in hollow-perf/src/jmh/java/com/netflix/hollow/core/read/engine/object/HollowObjectTypeReadStateDeltaTransitionBenchmark.java [75:157]
public void setUp() throws ExecutionException, InterruptedException {
final List<String> readStrings = new ArrayList<>();
final Set<Integer> readKeys = new HashSet<>();
refreshExecutor = Executors.newSingleThreadExecutor();
refreshExecutor.submit(() -> {
writeStateEngine = new HollowWriteStateEngine();
writeStateEngine.setTargetMaxTypeShardSize((long) shardSizeKBs * 1000l);
objectMapper = new HollowObjectMapper(writeStateEngine);
objectMapper.initializeTypeState(String.class);
readOrder = new ArrayList<>(countStringsToRead);
for (int i = 0; i < countStringsToRead; i++) {
readOrder.add(r.nextInt(countStringsDb));
}
readKeys.addAll(readOrder);
for (int i = 0; i < countStringsDb; i++) {
StringBuilder sb = new StringBuilder();
sb.append("string_");
sb.append(i);
sb.append("_");
int thisStringLength = r.nextInt(maxStringLength) - sb.length() + 1;
for (int j = 0; j < thisStringLength; j++) {
sb.append((char) (r.nextInt(26) + 'a'));
}
String s = sb.toString();
objectMapper.add(s);
if (readKeys.contains(i)) {
readStrings.add(s);
}
}
readStateEngine = new HollowReadStateEngine();
try {
StateEngineRoundTripper.roundTripSnapshot(writeStateEngine, readStateEngine, null);
} catch (IOException e) {
throw new RuntimeException(e);
}
dataAccess = (HollowObjectTypeDataAccess) readStateEngine.getTypeDataAccess("String", 0);
}).get();
doneBenchmark = new CountDownLatch(1);
reshardingFuture = refreshExecutor.submit(() -> {
Random r = new Random();
long origShardSize = shardSizeKBs * 1000l;
long newShardSize = origShardSize;
do {
for (int i=0; i<readStrings.size(); i++) {
objectMapper.add(readStrings.get(i));
}
for (int i = 0; i < deltaChanges; i++) {
int changeKey = r.nextInt(countStringsDb);
if (readKeys.contains(changeKey)) {
continue;
}
StringBuilder sb = new StringBuilder();
sb.append("string_");
sb.append(changeKey);
sb.append("_");
int thisStringLength = r.nextInt(maxStringLength) - sb.length() + 1;
for (int j = 0; j < thisStringLength; j++) {
sb.append((char) (r.nextInt(26) + 'a'));
}
objectMapper.add(sb.toString());
}
try {
if (isReshardingEnabled) {
if (newShardSize == origShardSize) {
newShardSize = origShardSize / 10;
} else {
newShardSize = origShardSize;
}
writeStateEngine.setTargetMaxTypeShardSize(newShardSize);
}
StateEngineRoundTripper.roundTripDelta(writeStateEngine, readStateEngine);
} catch (IOException e) {
throw new RuntimeException(e);
}
} while (doneBenchmark.getCount() > 0);
});
}