use of org.apache.commons.lang3.ArrayUtils.EMPTY_BYTE_ARRAY in project hbase by apache.
the class RegionProcedureStore method tryMigrate.
@SuppressWarnings("deprecation")
private void tryMigrate(FileSystem fs) throws IOException {
Configuration conf = server.getConfiguration();
Path procWALDir = new Path(CommonFSUtils.getWALRootDir(conf), WALProcedureStore.MASTER_PROCEDURE_LOGDIR);
if (!fs.exists(procWALDir)) {
return;
}
LOG.info("The old WALProcedureStore wal directory {} exists, migrating...", procWALDir);
WALProcedureStore store = new WALProcedureStore(conf, leaseRecovery);
store.start(numThreads);
store.recoverLease();
MutableLong maxProcIdSet = new MutableLong(-1);
List<Procedure<?>> procs = new ArrayList<>();
Map<Class<?>, List<Procedure<?>>> activeProcsByType = new HashMap<>();
store.load(new ProcedureLoader() {
@Override
public void setMaxProcId(long maxProcId) {
maxProcIdSet.setValue(maxProcId);
}
@Override
public void load(ProcedureIterator procIter) throws IOException {
while (procIter.hasNext()) {
Procedure<?> proc = procIter.next();
procs.add(proc);
if (!proc.isFinished()) {
activeProcsByType.computeIfAbsent(proc.getClass(), k -> new ArrayList<>()).add(proc);
}
}
}
@Override
public void handleCorrupted(ProcedureIterator procIter) throws IOException {
long corruptedCount = 0;
while (procIter.hasNext()) {
LOG.error("Corrupted procedure {}", procIter.next());
corruptedCount++;
}
if (corruptedCount > 0) {
throw new IOException("There are " + corruptedCount + " corrupted procedures when" + " migrating from the old WAL based store to the new region based store, please" + " fix them before upgrading again.");
}
}
});
// check whether there are unsupported procedures, this could happen when we are migrating from
// 2.1-. We used to do this in HMaster, after loading all the procedures from procedure store,
// but here we have to do it before migrating, otherwise, if we find some unsupported
// procedures, the users can not go back to 2.1 to finish them any more, as all the data are now
// in the new region based procedure store, which is not supported in 2.1-.
checkUnsupportedProcedure(activeProcsByType);
MutableLong maxProcIdFromProcs = new MutableLong(-1);
for (Procedure<?> proc : procs) {
update(proc);
if (proc.getProcId() > maxProcIdFromProcs.longValue()) {
maxProcIdFromProcs.setValue(proc.getProcId());
}
}
LOG.info("Migrated {} existing procedures from the old storage format.", procs.size());
LOG.info("The WALProcedureStore max pid is {}, and the max pid of all loaded procedures is {}", maxProcIdSet.longValue(), maxProcIdFromProcs.longValue());
// anyway, let's do a check here.
if (maxProcIdSet.longValue() > maxProcIdFromProcs.longValue()) {
if (maxProcIdSet.longValue() > 0) {
// let's add a fake row to retain the max proc id
region.update(r -> r.put(new Put(Bytes.toBytes(maxProcIdSet.longValue())).addColumn(PROC_FAMILY, PROC_QUALIFIER, EMPTY_BYTE_ARRAY)));
}
} else if (maxProcIdSet.longValue() < maxProcIdFromProcs.longValue()) {
LOG.warn("The WALProcedureStore max pid is less than the max pid of all loaded procedures");
}
store.stop(false);
if (!fs.delete(procWALDir, true)) {
throw new IOException("Failed to delete the WALProcedureStore migrated proc wal directory " + procWALDir);
}
LOG.info("Migration of WALProcedureStore finished");
}
use of org.apache.commons.lang3.ArrayUtils.EMPTY_BYTE_ARRAY in project neo4j by neo4j.
the class AppendOnlyValuesContainerTest method addGet.
@TestFactory
Stream<DynamicTest> addGet() {
final List<Pair<String, Value[]>> inputs = asList(testInput("NoValue", Function.identity(), Values.NO_VALUE), testInput("Boolean", Values::booleanValue, true, false, true, false), testInput("BooleanArray", Values::booleanArray, new boolean[] { false, true, false }, EMPTY_BOOLEAN_ARRAY), testInput("Byte", Values::byteValue, (byte) 0, (byte) 1, (byte) -1, Byte.MIN_VALUE, Byte.MAX_VALUE), testInput("ByteArray", Values::byteArray, new byte[] { (byte) 0, (byte) 1, (byte) -1, Byte.MIN_VALUE, Byte.MAX_VALUE }, EMPTY_BYTE_ARRAY), testInput("Short", Values::shortValue, (short) 0, (short) 1, (short) -1, Short.MIN_VALUE, Short.MAX_VALUE), testInput("ShortArray", Values::shortArray, new short[] { (short) 0, (short) 1, (short) -1, Short.MIN_VALUE, Short.MAX_VALUE }, EMPTY_SHORT_ARRAY), testInput("Char", Values::charValue, 'a', '\uFFFF', '∂', '©'), testInput("CharArray", Values::charArray, new char[] { 'a', '\uFFFF', '∂', '©' }, EMPTY_CHAR_ARRAY), testInput("Int", Values::intValue, 0, 1, -1, Integer.MIN_VALUE, Integer.MAX_VALUE), testInput("IntArray", Values::intArray, new int[] { 0, 1, -1, Integer.MIN_VALUE, Integer.MAX_VALUE }, EMPTY_INT_ARRAY), testInput("Long", Values::longValue, 0L, 1L, -1L, Long.MIN_VALUE, Long.MAX_VALUE), testInput("LongArray", Values::longArray, new long[] { 0L, 1L, -1L, Long.MIN_VALUE, Long.MAX_VALUE }, EMPTY_LONG_ARRAY), testInput("Double", Values::doubleValue, 0.0, 1.0, -1.0, Double.MIN_VALUE, Double.MAX_VALUE, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY), testInput("DoubleArray", Values::doubleArray, new double[] { 0.0, 1.0, -1.0, Double.MIN_VALUE, Double.MAX_VALUE, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY }, EMPTY_DOUBLE_ARRAY), testInput("Float", Values::floatValue, 0.0f, 1.0f, -1.0f, Float.MIN_VALUE, Float.MAX_VALUE, Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY), testInput("FloatArray", Values::floatArray, new float[] { 0.0f, 1.0f, -1.0f, Float.MIN_VALUE, Float.MAX_VALUE, Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY }, EMPTY_FLOAT_ARRAY), testInput("String", Values::stringValue, "", "x", "foobar"), testInput("StringArray", Values::stringArray, new String[] { "", "x", "foobar" }, EMPTY_STRING_ARRAY), testInput("Point", input -> pointValue(input.getOne(), input.getTwo()), Tuples.pair(CoordinateReferenceSystem.WGS84, new double[] { 1.0, 2.0 }), Tuples.pair(CoordinateReferenceSystem.WGS84_3D, new double[] { 1.0, 2.0, 3.0 }), Tuples.pair(CoordinateReferenceSystem.Cartesian, new double[] { 1.0, 2.0 }), Tuples.pair(CoordinateReferenceSystem.Cartesian_3D, new double[] { 1.0, 2.0, 3.0 })), testInput("PointArray", Values::pointArray, new Point[] { pointValue(CoordinateReferenceSystem.WGS84, 1.0, 2.0), pointValue(CoordinateReferenceSystem.WGS84_3D, 1.0, 2.0, 3.0), pointValue(CoordinateReferenceSystem.Cartesian, 1.0, 2.0), pointValue(CoordinateReferenceSystem.Cartesian_3D, 1.0, 2.0, 3.0) }, new Point[0]), testInput("Duration", Values::durationValue, (TemporalAmount) Duration.parse("P2DT3H4M"), Period.parse("P1Y2M3W4D")), testInput("DurationArray", Values::durationArray, new TemporalAmount[] { Duration.parse("P2DT3H4M"), Period.parse("P1Y2M3W4D") }, new TemporalAmount[0]), testInput("Date", DateValue::date, LocalDate.now(), LocalDate.parse("1977-05-25")), testInput("DateArray", Values::dateArray, new LocalDate[] { LocalDate.now(), LocalDate.parse("1977-05-25") }, new LocalDate[0]), testInput("Time", TimeValue::time, OffsetTime.now(), OffsetTime.parse("19:28:34.123+02:00")), testInput("TimeArray", Values::timeArray, new OffsetTime[] { OffsetTime.now(), OffsetTime.parse("19:28:34.123+02:00") }, new OffsetTime[0]), testInput("LocalTime", LocalTimeValue::localTime, LocalTime.now(), LocalTime.parse("19:28:34.123")), testInput("LocalTimeArray", Values::localTimeArray, new LocalTime[] { LocalTime.now(), LocalTime.parse("19:28:34.123") }, new LocalTime[0]), testInput("LocalDateTime", LocalDateTimeValue::localDateTime, LocalDateTime.now(), LocalDateTime.parse("1956-10-04T19:28:34.123")), testInput("LocalDateTimeArray", Values::localDateTimeArray, new LocalDateTime[] { LocalDateTime.now(), LocalDateTime.parse("1956-10-04T19:28:34.123") }, new LocalDateTime[0]), testInput("DateTime", DateTimeValue::datetime, ZonedDateTime.now(), ZonedDateTime.parse("1956-10-04T19:28:34.123+01:00[Europe/Paris]"), ZonedDateTime.parse("1956-10-04T19:28:34.123+01:15"), ZonedDateTime.parse("2018-09-13T16:12:16.12345+14:00[Pacific/Kiritimati]"), ZonedDateTime.parse("2018-09-13T16:12:16.12345-12:00[Etc/GMT+12]"), ZonedDateTime.parse("2018-09-13T16:12:16.12345-18:00"), ZonedDateTime.parse("2018-09-13T16:12:16.12345+18:00")), testInput("DateTimeArray", Values::dateTimeArray, new ZonedDateTime[] { ZonedDateTime.parse("1956-10-04T19:28:34.123+01:00[Europe/Paris]"), ZonedDateTime.parse("1956-10-04T19:28:34.123+01:15"), ZonedDateTime.parse("2018-09-13T16:12:16.12345+14:00[Pacific/Kiritimati]"), ZonedDateTime.parse("2018-09-13T16:12:16.12345-12:00[Etc/GMT+12]"), ZonedDateTime.parse("2018-09-13T16:12:16.12345-18:00"), ZonedDateTime.parse("2018-09-13T16:12:16.12345+18:00") }, new ZonedDateTime[0]));
return DynamicTest.stream(inputs.iterator(), Pair::getOne, pair -> {
final Value[] values = pair.getTwo();
final long[] refs = Arrays.stream(values).mapToLong(container::add).toArray();
for (int i = 0; i < values.length; i++) {
assertEquals(values[i], container.get(refs[i]));
}
});
}
Aggregations