@BeforeMethod public void setup() { collector = new CustomCollector(); config = oneRecordConfig(); bolt = ComponentUtils.prepare(new FilterBolt(TopologyConstants.RECORD_COMPONENT, config), collector); }
@Test public void testStatisticsReporting() { config.set(BulletStormConfig.FILTER_BOLT_STATS_REPORT_TICKS, 10); config.validate(); bolt = ComponentUtils.prepare(new HashMap<>(), new FilterBolt(TopologyConstants.RECORD_COMPONENT, config), collector); Tuple tick = TupleUtils.makeTuple(TupleClassifier.Type.TICK_TUPLE); for (int i = 0; i < 10; ++i) { Assert.assertEquals(bolt.getStatsTickCount(), i); bolt.execute(tick); } Assert.assertEquals(bolt.getStatsTickCount(), 0); } }
@Test public void testFilteringLatency() { config = new BulletStormConfig(); // Don't use the overridden aggregation default size but turn on built in metrics config.set(BulletStormConfig.TOPOLOGY_METRICS_BUILT_IN_ENABLE, true); collector = new CustomCollector(); CustomTopologyContext context = new CustomTopologyContext(); bolt = new FilterBolt(TopologyConstants.RECORD_COMPONENT, config); ComponentUtils.prepare(new HashMap<>(), bolt, context, collector); Tuple query = makeIDTuple(TupleClassifier.Type.QUERY_TUPLE, "42", makeFieldFilterQuery("bar"), METADATA); bolt.execute(query); BulletRecord record = RecordBox.get().add("field", "foo").getRecord(); long start = System.currentTimeMillis(); IntStream.range(0, 10).mapToObj(i -> makeRecordTuple(record, System.currentTimeMillis())) .forEach(bolt::execute); long end = System.currentTimeMillis(); double actualLatecy = context.getDoubleMetric(TopologyConstants.LATENCY_METRIC); Assert.assertTrue(actualLatecy <= end - start); }
@Test public void testTuplesCustomSource() { bolt = ComponentUtils.prepare(new FilterBolt("CustomSource", oneRecordConfig()), collector); Tuple query = makeIDTuple(TupleClassifier.Type.QUERY_TUPLE, "42", makeFieldFilterQuery("b235gf23b"), METADATA); bolt.execute(query); BulletRecord record = RecordBox.get().add("field", "b235gf23b").getRecord(); Tuple matching = TupleUtils.makeRawTuple("CustomSource", TopologyConstants.RECORD_STREAM, record); bolt.execute(matching); Tuple tick = TupleUtils.makeTuple(TupleClassifier.Type.TICK_TUPLE); bolt.execute(tick); BulletRecord anotherRecord = RecordBox.get().add("field", "wontmatch").getRecord(); Tuple nonMatching = TupleUtils.makeRawTuple("CustomSource", TopologyConstants.RECORD_STREAM, anotherRecord); bolt.execute(nonMatching); Tuple expected = makeDataTuple(TupleClassifier.Type.DATA_TUPLE, "42", record); Assert.assertTrue(wasRawRecordEmittedTo(TopologyConstants.DATA_STREAM, 1, expected)); Tuple notExpected = makeDataTuple(TupleClassifier.Type.DATA_TUPLE, "42", anotherRecord); Assert.assertFalse(wasRawRecordEmitted(notExpected)); }
builder.setBolt(FILTER_COMPONENT, new FilterBolt(recordComponent, config), filterBoltParallelism) .shuffleGrouping(recordComponent) .allGrouping(QUERY_COMPONENT, QUERY_STREAM)
builder.setBolt(FILTER_COMPONENT, new FilterBolt(recordComponent, config), filterBoltParallelism) .shuffleGrouping(recordComponent) .allGrouping(QUERY_COMPONENT, QUERY_STREAM)