if (alertDeduplications != null && alertDeduplications.size() > 0) { for (AlertDeduplication deduplication : alertDeduplications) { DedupKey dedupKey = new DedupKey(entry.getKey(), deduplication.getOutputStreamId()); if (!deduplicatorMap.containsKey(dedupKey) || !deduplicatorMap.get(dedupKey).getAlertDeduplication().equals(deduplication)) {
@Test public void test() { Map<DedupKey, Integer> testMap = new HashMap<>(); DedupKey key1 = new DedupKey("policy1", "stream1"); update(testMap, key1); update(testMap, key1); DedupKey key2 = new DedupKey("policy2", "stream2"); update(testMap, key2); Assert.assertTrue(testMap.get(key1) == 1); Assert.assertTrue(testMap.get(key2) == 0); DedupKey key3 = new DedupKey("policy1", "stream1"); update(testMap, key3); Assert.assertTrue(testMap.get(key3) == 2); }
@Override public void execute(Tuple input) { try { streamContext.counter().incr("receive_count"); PublishPartition partition = (PublishPartition) input.getValueByField(AlertConstants.FIELD_0); AlertStreamEvent event = (AlertStreamEvent) input.getValueByField(AlertConstants.FIELD_1); if (logEventEnabled) { LOG.info("Alert publish bolt {}/{} with partition {} received event: {}", this.getBoltId(), this.context.getThisTaskId(), partition, event); } DedupKey dedupKey = new DedupKey(event.getPolicyId(), event.getStreamId()); if (deduplicatorMap != null && deduplicatorMap.containsKey(dedupKey)) { List<AlertStreamEvent> eventList = deduplicatorMap.get(dedupKey).dedup(event); if (eventList == null || eventList.isEmpty()) { collector.ack(input); return; } event.setDuplicationChecked(true); } AlertStreamEvent filteredEvent = alertFilter.filter(event); if (filteredEvent != null) { alertPublisher.nextEvent(partition, filteredEvent); } this.collector.ack(input); streamContext.counter().incr("ack_count"); } catch (Throwable ex) { streamContext.counter().incr("fail_count"); LOG.error(ex.getMessage(), ex); collector.reportError(ex); } }
field.set(bolt, engine); DedupKey dedupKey1 = new DedupKey("policy1", "stream"); DedupKey dedupKey2 = new DedupKey("policy2", "stream"); bolt.onAlertPolicyChange(pds1, null); Map<DedupKey, DefaultDeduplicator> deduplicatorMap = getAlertDeduplicator(bolt); bolt.onAlertPolicyChange(pds2, null); deduplicatorMap = getAlertDeduplicator(bolt); Assert.assertTrue(deduplicatorMap.containsKey(new DedupKey("policy2", "stream"))); Assert.assertTrue(deduplicatorMap.containsKey(new DedupKey("policy1", "stream"))); Assert.assertFalse(deduplicatorMap.get(dedupKey1).getAlertDeduplication() .equals(deduplicatorMap.get(dedupKey2).getAlertDeduplication()));