@Override public void finishBatch(ProcessorContext processorContext) { BatchState state = (BatchState) processorContext.state[_context.getStateIndex()]; if (!state.tuples.isEmpty()) { List<Object> results = _function.batchRetrieve(_state, Collections.unmodifiableList(state.args)); if (results.size() != state.tuples.size()) { throw new RuntimeException( "Results size is different than argument size: " + results.size() + " vs " + state.tuples.size()); } for (int i = 0; i < state.tuples.size(); i++) { TridentTuple tuple = state.tuples.get(i); Object result = results.get(i); _collector.setContext(processorContext, tuple); _function.execute(state.args.get(i), result, _collector); } } }
@Override public void cleanup() { _function.cleanup(); }
@Override public void prepare(Map<String, Object> conf, TopologyContext context, TridentContext tridentContext) { List<Factory> parents = tridentContext.getParentTupleFactories(); if (parents.size() != 1) { throw new RuntimeException("State query operation can only have one parent"); } _context = tridentContext; _state = (State) context.getTaskData(_stateId); _projection = new ProjectionFactory(parents.get(0), _inputFields); _collector = new AppendCollector(tridentContext); _function.prepare(conf, new TridentOperationContext(context, _projection)); }
@Override public void prepare(Map conf, TopologyContext context, TridentContext tridentContext) { List<Factory> parents = tridentContext.getParentTupleFactories(); if(parents.size()!=1) { throw new RuntimeException("State query operation can only have one parent"); } _context = tridentContext; _state = (State) context.getTaskData(_stateId); _projection = new ProjectionFactory(parents.get(0), _inputFields); _collector = new AppendCollector(tridentContext); _function.prepare(conf, new TridentOperationContext(context, _projection)); }
@Override public void finishBatch(ProcessorContext processorContext) { BatchState state = (BatchState) processorContext.state[_context.getStateIndex()]; if(!state.tuples.isEmpty()) { List<Object> results = _function.batchRetrieve(_state, Collections.unmodifiableList(state.args)); if(results.size()!=state.tuples.size()) { throw new RuntimeException("Results size is different than argument size: " + results.size() + " vs " + state.tuples.size()); } for(int i=0; i<state.tuples.size(); i++) { TridentTuple tuple = state.tuples.get(i); Object result = results.get(i); _collector.setContext(processorContext, tuple); _function.execute(state.args.get(i), result, _collector); } } }
@Override public void cleanup() { _function.cleanup(); }