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; }
private void createHollowProducerAndRunCycle(final String typeName, boolean addPrimaryKeyValidator) { ValidatorListener dupeValidator = new DuplicateDataDetectionValidator(typeName); ValidatorListener countValidator = new RecordCountVarianceValidator(typeName, 3.0f); validationListener = new TestValidationStatusListener(); cycleAndValidationListener = new TestCycleAndValidationStatusListener(); Builder builder = HollowProducer.withPublisher(publisher).withAnnouncer(announcer) .withListener(validationListener) .withListener(cycleAndValidationListener) .withListener(countValidator); if (addPrimaryKeyValidator) { builder = builder.withListener(dupeValidator); } HollowProducer hollowProducer = builder.build(); if (typeName.equals("MovieWithPrimaryKey")) { hollowProducer.initializeDataModel(MovieWithPrimaryKey.class); } else { hollowProducer.initializeDataModel(MovieWithoutPrimaryKey.class); } hollowProducer.runCycle(newState -> { List<String> actors = Arrays.asList("Angelina Jolie", "Brad Pitt"); if (typeName.equals("MovieWithPrimaryKey")) { newState.add(new MovieWithPrimaryKey(123, "someTitle1", actors)); newState.add(new MovieWithPrimaryKey(123, "someTitle1", actors)); } else { newState.add(new MovieWithoutPrimaryKey(123, "someTitle1", actors)); newState.add(new MovieWithoutPrimaryKey(1233, "someTitle2", actors)); } }); }
HollowProducer producer = HollowProducer.withPublisher(blobStore) .withBlobStager(new HollowInMemoryBlobStager()) .withAnnouncer(fakeAnnouncerSpy) .withVersionMinter(new HollowProducer.VersionMinter() { long counter = 0;
@Test public void testNotPrimaryProducerVersion() { BasicSingleProducerEnforcer enforcer = new BasicSingleProducerEnforcer(); HollowProducer producer = HollowProducer.withPublisher(new FakeBlobPublisher()) .withSingleProducerEnforcer(enforcer) .withAnnouncer(new HollowFilesystemAnnouncer(tmpFolder.toPath())) .build(); producer.addListener(new FakeProducerListener()); long v1 = producer.runCycle(ws -> { ws.add(1); }); enforcer.disable(); // Run cycle as not the primary producer long v2 = producer.runCycle(ws -> { ws.add(1); }); // Run cycle as the primary producer enforcer.enable(); long v3 = producer.runCycle(ws -> { ws.add(2); }); Assert.assertEquals(v1, v2); Assert.assertTrue(v3 > v2); }
@Test public void consumerRespondsToPinnedAnnouncement() { HollowProducer producer = HollowProducer.withPublisher(blobStore) .withAnnouncer(announcement) .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) .withAnnouncementWatcher(announcement) .build(); consumer.triggerRefresh(); Assert.assertEquals(v3, consumer.getCurrentVersionId()); announcement.pin(v1); Assert.assertEquals(v1, consumer.getCurrentVersionId()); /// another cycle occurs while we're pinned long v4 = runCycle(producer, 4); announcement.unpin(); Assert.assertEquals(v4, 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 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()); }