@Override public synchronized void onAlertPublishSpecChange(PublishSpec pubSpec, Map<String, StreamDefinition> sds) { if (pubSpec == null) { return; } this.streamDefinitionMap = sds; List<Publishment> newPublishments = pubSpec.getPublishments(); if (newPublishments == null) { LOG.info("no publishments with PublishSpec {} for this topology", pubSpec); return; } Map<String, Publishment> newPublishmentsMap = new HashMap<>(); newPublishments.forEach(p -> newPublishmentsMap.put(p.getName(), p)); MapComparator<String, Publishment> comparator = new MapComparator<>(newPublishmentsMap, cachedPublishments); comparator.compare(); List<Publishment> beforeModified = new ArrayList<>(); comparator.getModified().forEach(p -> beforeModified.add(cachedPublishments.get(p.getName()))); alertPublisher.onPublishChange(comparator.getAdded(), comparator.getRemoved(), comparator.getModified(), beforeModified); // switch cachedPublishments = newPublishmentsMap; specVersion = pubSpec.getVersion(); }
PublishSpec pubSpec = pubSpecs.get(u.getTopoName()); if (pubSpec == null) { pubSpec = new PublishSpec(u.getTopoName(), context.getTopologies().get(u.getTopoName()).getPubBoltId()); pubSpecs.put(u.getTopoName(), pubSpec); pubSpec.addPublishment(pub);
ps.setVersion(version);
@Test public void testMapComparatorRemoved() { PublishSpec spec1 = MetadataSerDeser.deserialize(getClass().getResourceAsStream("/testPublishForAdd0.json"), PublishSpec.class); PublishSpec spec2 = MetadataSerDeser.deserialize(getClass().getResourceAsStream("/testPublishForAdd1.json"), PublishSpec.class); Map<String, Publishment> map1 = new HashMap<>(); Map<String, Publishment> map2 = new HashMap<>(); spec1.getPublishments().forEach(p -> map1.put(p.getName(), p)); spec2.getPublishments().forEach(p -> map2.put(p.getName(), p)); MapComparator<String, Publishment> comparator = new MapComparator<>(map1, map2); comparator.compare(); Assert.assertTrue(comparator.getRemoved().size() == 1); }
@Test public void testMapComparatorAdded() { PublishSpec spec1 = MetadataSerDeser.deserialize(getClass().getResourceAsStream("/testPublishForAdd1.json"), PublishSpec.class); PublishSpec spec2 = MetadataSerDeser.deserialize(getClass().getResourceAsStream("/testPublishForAdd0.json"), PublishSpec.class); Map<String, Publishment> map1 = new HashMap<>(); Map<String, Publishment> map2 = new HashMap<>(); spec1.getPublishments().forEach(p -> map1.put(p.getName(), p)); spec2.getPublishments().forEach(p -> map2.put(p.getName(), p)); MapComparator<String, Publishment> comparator = new MapComparator<>(map1, map2); comparator.compare(); Assert.assertTrue(comparator.getAdded().size() == 1); }
@Test public void testMapComparatorModified() { PublishSpec spec1 = MetadataSerDeser.deserialize(getClass().getResourceAsStream("/testPublishForAdd0.json"), PublishSpec.class); PublishSpec spec2 = MetadataSerDeser.deserialize(getClass().getResourceAsStream("/testPublishForMdyValue.json"), PublishSpec.class); Map<String, Publishment> map1 = new HashMap<>(); Map<String, Publishment> map2 = new HashMap<>(); spec1.getPublishments().forEach(p -> map1.put(p.getName(), p)); spec2.getPublishments().forEach(p -> map2.put(p.getName(), p)); MapComparator<String, Publishment> comparator = new MapComparator<>(map1, map2); comparator.compare(); Assert.assertTrue(comparator.getModified().size() == 1); }
@Test public void testMapComparator() { PublishSpec spec1 = MetadataSerDeser.deserialize(getClass().getResourceAsStream("/testPublishSpec.json"), PublishSpec.class); PublishSpec spec2 = MetadataSerDeser.deserialize(getClass().getResourceAsStream("/testPublishSpec2.json"), PublishSpec.class); PublishSpec spec3 = MetadataSerDeser.deserialize(getClass().getResourceAsStream("/testPublishSpec3.json"), PublishSpec.class); Map<String, Publishment> map1 = new HashMap<>(); Map<String, Publishment> map2 = new HashMap<>(); spec1.getPublishments().forEach(p -> map1.put(p.getName(), p)); spec2.getPublishments().forEach(p -> map2.put(p.getName(), p)); MapComparator<String, Publishment> comparator = new MapComparator<>(map1, map2); comparator.compare(); Assert.assertTrue(comparator.getModified().size() == 1); AlertPublisherBolt publisherBolt = new AlertPublisherBolt("alert-publisher-test", null, null); publisherBolt.onAlertPublishSpecChange(spec1, null); publisherBolt.onAlertPublishSpecChange(spec2, null); publisherBolt.onAlertPublishSpecChange(spec3, null); }
@SuppressWarnings("rawtypes") @Ignore @Test public void test() { Config config = ConfigFactory.load("application-test.conf"); AlertPublisher publisher = new AlertPublisherImpl("alertPublishBolt"); publisher.init(config, new HashMap()); PublishSpec spec = MetadataSerDeser.deserialize(getClass().getResourceAsStream("/testPublishSpec.json"), PublishSpec.class); publisher.onPublishChange(spec.getPublishments(), null, null, null); AlertStreamEvent event = create("testAlertStream"); publisher.nextEvent(new PublishPartition(event.getStreamId(), event.getPolicyId(), spec.getPublishments().get(0).getName(), spec.getPublishments().get(0).getPartitionColumns()), event); AlertStreamEvent event1 = create("testAlertStream"); publisher.nextEvent(new PublishPartition(event1.getStreamId(), event1.getPolicyId(), spec.getPublishments().get(0).getName(), spec.getPublishments().get(0).getPartitionColumns()), event1); }