@SuppressWarnings("unchecked") @Override public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) { this.collector = collector; classifier = new TupleClassifier(); // Enable built in metrics metricsEnabled = config.getAs(BulletStormConfig.TOPOLOGY_METRICS_BUILT_IN_ENABLE, Boolean.class); metricsIntervalMapping = config.getAs(BulletStormConfig.TOPOLOGY_METRICS_BUILT_IN_EMIT_INTERVAL_MAPPING, Map.class); }
/** * Returns the {@link TupleClassifier.Type} of this tuple. If you have a custom record component name, you should * use setRecordComponent(String) first. Otherwise, the default value of {@link TopologyConstants#RECORD_COMPONENT} * is used. The type returned will never be a {@link Type#UNKNOWN_TUPLE}. See {@link #classifyInternalTypes(Tuple)} * if you will not be passing in {@link Type#RECORD_TUPLE} tuples. * * @param tuple The tuple whose type is needed. * @return An {@link Optional} {@link TupleClassifier.Type} for the tuple. */ public Optional<Type> classify(Tuple tuple) { return recordComponent.equals(tuple.getSourceComponent()) ? Optional.of(Type.RECORD_TUPLE) : classifyInternalTypes(tuple); }
@Override public void execute(Tuple tuple) { // Check if the tuple is any known type, otherwise make it unknown TupleClassifier.Type type = classifier.classify(tuple).orElse(TupleClassifier.Type.UNKNOWN_TUPLE); switch (type) { case TICK_TUPLE: onTick(); break; case METADATA_TUPLE: onMeta(tuple); break; case QUERY_TUPLE: onQuery(tuple); break; case RECORD_TUPLE: onRecord(tuple); updateLatency(tuple); break; default: // May want to throw an error here instead of not acking log.error("Unknown tuple encountered: {}", type); return; } collector.ack(tuple); }
@Override public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) { super.prepare(stormConf, context, collector); // Set the record component into the classifier classifier.setRecordComponent(recordComponent); // Set up the stats report intervals statsTickInterval = config.getAs(BulletStormConfig.FILTER_BOLT_STATS_REPORT_TICKS, Integer.class); statsTickCount = 0; // Set up the manager manager = new QueryManager(config); if (metricsEnabled) { averageLatency = registerAveragingMetric(TopologyConstants.LATENCY_METRIC, context); } }
@Override public void execute(Tuple tuple) { // Check if the tuple is any known type, otherwise make it unknown TupleClassifier.Type type = classifier.classify(tuple).orElse(TupleClassifier.Type.UNKNOWN_TUPLE); switch (type) { case TICK_TUPLE: onTick(); break; case METADATA_TUPLE: onMeta(tuple); break; case QUERY_TUPLE: onQuery(tuple); break; case RECORD_TUPLE: onRecord(tuple); updateLatency(tuple); break; default: // May want to throw an error here instead of not acking log.error("Unknown tuple encountered: {}", type); return; } collector.ack(tuple); }
@Override public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) { super.prepare(stormConf, context, collector); // Set the record component into the classifier classifier.setRecordComponent(recordComponent); // Set up the stats report intervals statsTickInterval = config.getAs(BulletStormConfig.FILTER_BOLT_STATS_REPORT_TICKS, Integer.class); statsTickCount = 0; // Set up the manager manager = new QueryManager(config); if (metricsEnabled) { averageLatency = registerAveragingMetric(TopologyConstants.LATENCY_METRIC, context); } }
@Test public void testPrepare() { CustomCollector collector = new CustomCollector(); TestQueryBolt bolt = new TestQueryBolt(new BulletStormConfig()); ComponentUtils.prepare(bolt, collector); Assert.assertEquals(collector.getAckedCount(), 0); bolt.getCollector().ack(null); Assert.assertEquals(collector.getAckedCount(), 1); Assert.assertEquals(bolt.getQueries().size(), 0); Assert.assertEquals(bolt.getMetricsMapping(), BulletStormConfig.DEFAULT_TOPOLOGY_METRICS_BUILT_IN_EMIT_INTERVAL_MAPPING); Assert.assertEquals(bolt.isMetricsEnabled(), BulletStormConfig.DEFAULT_TOPOLOGY_METRICS_ENABLE); Tuple tuple = mock(Tuple.class); doReturn(TopologyConstants.RECORD_COMPONENT).when(tuple).getSourceComponent(); Assert.assertEquals(bolt.getClassifier().classify(tuple), Optional.of(Type.RECORD_TUPLE)); }
/** * Returns the {@link TupleClassifier.Type} of this tuple. If you have a custom record component name, you should * use setRecordComponent(String) first. Otherwise, the default value of {@link TopologyConstants#RECORD_COMPONENT} * is used. The type returned will never be a {@link Type#UNKNOWN_TUPLE}. See {@link #classifyInternalTypes(Tuple)} * if you will not be passing in {@link Type#RECORD_TUPLE} tuples. * * @param tuple The tuple whose type is needed. * @return An {@link Optional} {@link TupleClassifier.Type} for the tuple. */ public Optional<Type> classify(Tuple tuple) { return recordComponent.equals(tuple.getSourceComponent()) ? Optional.of(Type.RECORD_TUPLE) : classifyInternalTypes(tuple); }
@SuppressWarnings("unchecked") @Override public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) { this.collector = collector; classifier = new TupleClassifier(); // Enable built in metrics metricsEnabled = config.getAs(BulletStormConfig.TOPOLOGY_METRICS_BUILT_IN_ENABLE, Boolean.class); metricsIntervalMapping = config.getAs(BulletStormConfig.TOPOLOGY_METRICS_BUILT_IN_EMIT_INTERVAL_MAPPING, Map.class); }
@Override public void execute(Tuple tuple) { TupleClassifier.Type type = classifier.classifyInternalTypes(tuple).orElse(TupleClassifier.Type.UNKNOWN_TUPLE); switch (type) { case TICK_TUPLE: onTick(); break; case METADATA_TUPLE: onMeta(tuple); break; case QUERY_TUPLE: onQuery(tuple); break; case ERROR_TUPLE: onError(tuple); break; case DATA_TUPLE: onData(tuple); break; default: // May want to throw an error here instead of not acking log.error("Unknown tuple encountered in join: {}", type); return; } collector.ack(tuple); }
@Override public void execute(Tuple tuple) { TupleClassifier.Type type = classifier.classifyInternalTypes(tuple).orElse(TupleClassifier.Type.UNKNOWN_TUPLE); switch (type) { case TICK_TUPLE: onTick(); break; case METADATA_TUPLE: onMeta(tuple); break; case QUERY_TUPLE: onQuery(tuple); break; case ERROR_TUPLE: onError(tuple); break; case DATA_TUPLE: onData(tuple); break; default: // May want to throw an error here instead of not acking log.error("Unknown tuple encountered in join: {}", type); return; } collector.ack(tuple); }