in hollow-diff-ui/src/tools/java/com/netflix/hollow/diff/ui/HistoryUITest.java [250:365]
private HollowHistory createHistoryD() throws IOException {
HollowHistory history;
HollowReadStateEngine readStateEngine;
HollowBlobReader reader;
HollowWriteStateEngine stateEngine;
{
schema = new HollowObjectSchema("TypeA", 2);
stateEngine = new HollowWriteStateEngine();
schema.addField("a1", HollowObjectSchema.FieldType.INT);
schema.addField("a2", HollowObjectSchema.FieldType.INT);
//attach schema to write state engine
stateEngine.addTypeState(new HollowObjectTypeWriteState(schema));
// v0
stateEngine.addHeaderTag(CUSTOM_VERSION_TAG, "v0");
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 3, 13 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 4, 44 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 15, 150 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 16, 160 });
stateEngine.prepareForWrite();
ByteArrayOutputStream baos_v0 = new ByteArrayOutputStream();
HollowBlobWriter writer = new HollowBlobWriter(stateEngine);
writer.writeSnapshot(baos_v0);
stateEngine.prepareForNextCycle();
// v1
stateEngine.addHeaderTag(CUSTOM_VERSION_TAG, "v1");
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 1, 1 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 2, 2 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 3, 3 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 4, 4 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 5, 5 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 6, 6 });
stateEngine.prepareForWrite();
ByteArrayOutputStream baos_v0_to_v1 = new ByteArrayOutputStream();
ByteArrayOutputStream baos_v1_to_v0 = new ByteArrayOutputStream();
ByteArrayOutputStream baos_v1 = new ByteArrayOutputStream();
writer = new HollowBlobWriter(stateEngine);
writer.writeSnapshot(baos_v1);
writer.writeDelta(baos_v0_to_v1);
writer.writeReverseDelta(baos_v1_to_v0);
stateEngine.prepareForNextCycle();
// v2
stateEngine.addHeaderTag(CUSTOM_VERSION_TAG, "v2");
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 2, 7 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 3, 3 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 5, 8 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 6, 6 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 7, 9 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 8, 10 });
stateEngine.prepareForWrite();
ByteArrayOutputStream baos_v2 = new ByteArrayOutputStream();
ByteArrayOutputStream baos_v1_to_v2 = new ByteArrayOutputStream();
ByteArrayOutputStream baos_v2_to_v1 = new ByteArrayOutputStream();
writer.writeSnapshot(baos_v2);
writer.writeDelta(baos_v1_to_v2);
writer.writeReverseDelta(baos_v2_to_v1);
stateEngine.prepareForNextCycle();
// v3
stateEngine.addHeaderTag(CUSTOM_VERSION_TAG, "v3");
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 1, 1 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 2, 7 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 3, 11 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 6, 12 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 7, 13 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 8, 10 });
stateEngine.prepareForWrite();
ByteArrayOutputStream baos_v3 = new ByteArrayOutputStream();
ByteArrayOutputStream baos_v2_to_v3 = new ByteArrayOutputStream();
ByteArrayOutputStream baos_v3_to_v2 = new ByteArrayOutputStream();
writer.writeSnapshot(baos_v3);
writer.writeDelta(baos_v2_to_v3);
writer.writeReverseDelta(baos_v3_to_v2);
stateEngine.prepareForNextCycle();
// v4
stateEngine.addHeaderTag(CUSTOM_VERSION_TAG, "v4");
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 1, 18 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 2, 7 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 3, 19 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 6, 12 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 15, 13 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 8, 10 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 18, 10 });
addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 28, 90 });
stateEngine.prepareForWrite();
ByteArrayOutputStream baos_v4 = new ByteArrayOutputStream();
ByteArrayOutputStream baos_v3_to_v4 = new ByteArrayOutputStream();
ByteArrayOutputStream baos_v4_to_v3 = new ByteArrayOutputStream();
writer.writeDelta(baos_v3_to_v4);
writer.writeReverseDelta(baos_v4_to_v3);
writer.writeSnapshot(baos_v4);
// Build history
readStateEngine = new HollowReadStateEngine();
reader = new HollowBlobReader(readStateEngine);
reader.readSnapshot(HollowBlobInput.serial(baos_v0.toByteArray()));
history = new HollowHistory(readStateEngine, 0L, MAX_STATES);
history.getKeyIndex().addTypeIndex("TypeA", "a1");
reader.applyDelta(HollowBlobInput.serial(baos_v0_to_v1.toByteArray()));
history.deltaOccurred(1L);
reader.applyDelta(HollowBlobInput.serial(baos_v1_to_v2.toByteArray()));
history.deltaOccurred(2L);
reader.applyDelta(HollowBlobInput.serial(baos_v2_to_v3.toByteArray()));
history.deltaOccurred(3L);
reader.applyDelta(HollowBlobInput.serial(baos_v3_to_v4.toByteArray()));
history.deltaOccurred(4L);
}
return history;
}