@Before public void setUp() { MockitoAnnotations.initMocks(this); this.producer = new HollowProducer.Builder() .withListeners(listener).withSingleProducerEnforcer(singleProducerEnforcer).build(); }
private HollowProducer createProducer(File tmpFolder, HollowObjectSchema... schemas) { HollowProducer producer = HollowProducer.withPublisher(new FakeBlobPublisher()) .withAnnouncer(new HollowFilesystemAnnouncer(tmpFolder.toPath())).build(); if (schemas != null && schemas.length > 0) { producer.initializeDataModel(schemas); } producer.addListener(new FakeProducerListener()); return producer; }
@Test public void duplicateDetectionSuccessTest() { HollowProducer producer = HollowProducer.withPublisher(blobStore) .withBlobStager(new HollowInMemoryBlobStager()) .withListener(new DuplicateDataDetectionValidator("TypeWithPrimaryKey")) .build(); //runCycle(producer, 1); producer.runCycle(newState -> { newState.add(new TypeWithPrimaryKey(1, "Brad Pitt", "klsdjfla;sdjkf")); newState.add(new TypeWithPrimaryKey(1, "Angelina Jolie", "as;dlkfjasd;l")); }); HollowConsumer consumer = HollowConsumer.withBlobRetriever(blobStore).build(); consumer.triggerRefresh(); Assert.assertEquals(2, consumer.getStateEngine().getTypeState("TypeWithPrimaryKey").getPopulatedOrdinals() .cardinality()); }
@Test public void producerUsesCustomVersionMinter() { HollowProducer producer = HollowProducer.withPublisher(blobStore) .withBlobStager(new HollowInMemoryBlobStager()) .withVersionMinter(new VersionMinter() { long counter = 0; public long mint() { return ++counter; } }) .build(); long v1 = runCycle(producer, 1); long v2 = runCycle(producer, 2); long v3 = runCycle(producer, 3); Assert.assertEquals(1, v1); Assert.assertEquals(2, v2); Assert.assertEquals(3, v3); }
@Test public void metricsWhenLoadingSnapshot() { HollowProducer producer = HollowProducer.withPublisher(blobStore) .withBlobStager(new HollowInMemoryBlobStager()) .build(); long version = producer.runCycle(new HollowProducer.Populator() { public void populate(HollowProducer.WriteState state) throws Exception { state.add(Integer.valueOf(1)); } }); HollowConsumer consumer = HollowConsumer.withBlobRetriever(blobStore).build(); consumer.triggerRefreshTo(version); HollowConsumerMetrics hollowConsumerMetrics = consumer.getMetrics(); Assert.assertEquals(version, consumer.getCurrentVersionId()); Assert.assertEquals(hollowConsumerMetrics.getCurrentVersion(), consumer.getCurrentVersionId()); Assert.assertEquals(hollowConsumerMetrics.getRefreshSucceded(), 1); Assert.assertEquals(hollowConsumerMetrics.getTotalPopulatedOrdinals(), 1); }
@Test public void metricsWhenPublishingSnapshot() { HollowProducer producer = HollowProducer.withPublisher(blobStore) .withBlobStager(new HollowInMemoryBlobStager()) .build(); producer.runCycle(new HollowProducer.Populator() { public void populate(HollowProducer.WriteState state) throws Exception { state.add(Integer.valueOf(1)); } }); HollowProducerMetrics hollowProducerMetrics = producer.getMetrics(); Assert.assertEquals(hollowProducerMetrics.getCyclesSucceeded(), 1); Assert.assertEquals(hollowProducerMetrics.getCyclesCompleted(), 1); Assert.assertEquals(hollowProducerMetrics.getTotalPopulatedOrdinals(), 1); Assert.assertEquals(hollowProducerMetrics.getSnapshotsCompleted(), 1); }
@Test public void consumerFollowsReverseDeltas() { HollowProducer producer = HollowProducer.withPublisher(blobStore) .withBlobStager(new HollowInMemoryBlobStager()) .withNumStatesBetweenSnapshots(2) /// do not produce snapshot for v2 or v3 .build(); long v1 = runCycle(producer, 1); runCycle(producer, 2); long v3 = runCycle(producer, 3); HollowConsumer consumer = HollowConsumer.withBlobRetriever(blobStore).build(); consumer.triggerRefreshTo(v3); Assert.assertEquals(v3, consumer.getCurrentVersionId()); blobStore.removeSnapshot( v1); // <-- not necessary to cause following of reverse deltas -- just asserting that's what happened. consumer.triggerRefreshTo(v1); Assert.assertEquals(v1, consumer.getCurrentVersionId()); }
@Test public void consumerFindsLatestPublishedVersionWithoutAnnouncementWatcher() { HollowProducer producer = HollowProducer.withPublisher(blobStore) .withAnnouncer(announcement) .withBlobStager(new HollowInMemoryBlobStager()) .build(); long v1 = runCycle(producer, 1); HollowConsumer consumer = HollowConsumer.withBlobRetriever(blobStore).build(); consumer.triggerRefresh(); Assert.assertEquals(v1, consumer.getCurrentVersionId()); consumer.triggerRefresh(); Assert.assertEquals(v1, consumer.getCurrentVersionId()); long v2 = runCycle(producer, 2); consumer.triggerRefresh(); Assert.assertEquals(v2, consumer.getCurrentVersionId()); }
@Test public void initializationTraversesDeltasToGetUpToDate() { HollowProducer producer = HollowProducer.withPublisher(blobStore) .withBlobStager(new HollowInMemoryBlobStager()) .withNumStatesBetweenSnapshots(2) /// do not produce snapshots for v2 or v3 .build(); long v1 = runCycle(producer, 1); long v2 = runCycle(producer, 2); long v3 = runCycle(producer, 3); HollowConsumer consumer = HollowConsumer.withBlobRetriever(blobStore).build(); consumer.triggerRefreshTo(v3); Assert.assertEquals(v3, consumer.getCurrentVersionId()); Assert.assertEquals(v1, blobStore.retrieveSnapshotBlob(v3).getToVersion()); Assert.assertEquals(v2, blobStore.retrieveDeltaBlob(v1).getToVersion()); Assert.assertEquals(v3, blobStore.retrieveDeltaBlob(v2).getToVersion()); }
@Test public void producerRestoresAndProducesDelta() { HollowProducer producer = HollowProducer.withPublisher(blobStore) .withBlobStager(new HollowInMemoryBlobStager()) .build(); long v1 = runCycle(producer, 1); HollowProducer redeployedProducer = HollowProducer.withPublisher(blobStore) .withBlobStager(new HollowInMemoryBlobStager()) .build(); redeployedProducer.initializeDataModel(Integer.class); redeployedProducer.restore(v1, blobStore); long v2 = runCycle(producer, 2); Assert.assertNotNull(blobStore.retrieveDeltaBlob(v1)); Assert.assertEquals(v2, blobStore.retrieveDeltaBlob(v1).getToVersion()); }
@Test public void consumerAutomaticallyUpdatesBasedOnAnnouncement() { HollowProducer producer = HollowProducer.withPublisher(blobStore) .withAnnouncer(announcement) .withBlobStager(new HollowInMemoryBlobStager()) .build(); long v1 = runCycle(producer, 1); HollowConsumer consumer = HollowConsumer.withBlobRetriever(blobStore) .withAnnouncementWatcher(announcement) .build(); consumer.triggerRefresh(); Assert.assertEquals(v1, consumer.getCurrentVersionId()); long v2 = runCycle(producer, 2); Assert.assertEquals(v2, consumer.getCurrentVersionId()); }
@Test public void testNullMetricsCollector() { HollowProducer producer = HollowProducer.withPublisher(blobStore) .withBlobStager(new HollowInMemoryBlobStager()) .build(); long version = producer.runCycle(new HollowProducer.Populator() { public void populate(HollowProducer.WriteState state) throws Exception { state.add(Integer.valueOf(1)); } }); HollowConsumer consumer = HollowConsumer.withBlobRetriever(blobStore) .withMetricsCollector(null) .build(); consumer.triggerRefreshTo(version); }
private HollowProducer createInMemoryProducer() { return HollowProducer.withPublisher(blobStore).withBlobStager(new HollowInMemoryBlobStager()).build(); }
@Test(expected = RuntimeException.class) public void failsWhenLastStateIsNotAvailable() { HollowProducer backingProducer = HollowProducer.withPublisher(blobStore) .withBlobStager(new HollowInMemoryBlobStager()) .build(); HollowIncrementalProducer incrementalProducer = HollowIncrementalProducer.withProducer(backingProducer) .withBlobRetriever(blobStore) .withAnnouncementWatcher(new FakeAnnouncementWatcher(0)) .withDataModel(TypeA.class, TypeB.class) .build(); incrementalProducer.restoreFromLastState(); }
@Override public HollowProducer build() { checkArguments(); HollowProducer producer; if(shouldAugment) producer = new AugmentedProducer(null, null); else producer = super.build(); return producer; } }
@Test public void publishAndLoadASnapshot() { HollowProducer producer = HollowProducer.withPublisher(blobStore) .withBlobStager(new HollowInMemoryBlobStager()) .build(); /// Showing verbose version of `runCycle(producer, 1);` long version = producer.runCycle(state -> state.add(1)); HollowConsumer consumer = HollowConsumer.withBlobRetriever(blobStore).build(); consumer.triggerRefreshTo(version); Assert.assertEquals(version, consumer.getCurrentVersionId()); }
private HollowProducer createInMemoryProducer() { return HollowProducer.withPublisher(blobStore) .withBlobStager(new HollowInMemoryBlobStager()) .build(); }
@Test(expected = NullPointerException.class) public void failsWhenNotEnoughArgs() { HollowProducer backingProducer = HollowProducer.withPublisher(blobStore) .withBlobStager(new HollowInMemoryBlobStager()) .build(); //No AnnouncementWatcher, BlobRetriever and DataModel to restore HollowIncrementalProducer incrementalProducer = HollowIncrementalProducer.withProducer(backingProducer) .build(); incrementalProducer.restoreFromLastState(); }
@Before public void setUp() { mapper = new HollowObjectMapper(new HollowWriteStateEngine()); mapper.initializeTypeState(TypeA.class); mapper.initializeTypeState(TypeC.class); schemaIdMapper = new FakeHollowSchemaIdentifierMapper(mapper.getStateEngine()); blobStore = new InMemoryBlobStore(); flatRecordWriter = new FlatRecordWriter(mapper.getStateEngine(), schemaIdMapper); producer = HollowProducer.withPublisher(blobStore).withBlobStager(new HollowInMemoryBlobStager()).build(); }
private static HollowProducer getProducer(ObjectModificationValidator validator) { return HollowProducer.withPublisher(new InMemoryBlobStore()) .withBlobStager(new HollowInMemoryBlobStager()) .withListener(validator) .build(); }