public static void send(TopologyContext topologyContext, TaskSendTargets taskTargets, WorkerTransfer transfer_fn, String stream, List<Object> values) { java.util.Set<Integer> tasks = taskTargets.get(stream, values); Integer taskId = topologyContext.getThisTaskId(); Tuple tup = new Tuple(topologyContext, values, taskId, stream); for (Integer task : tasks) { transfer_fn.transfer(task, tup); } } }
public Tuple deserialize(byte[] ser) { try { ByteArrayInputStream bin = new ByteArrayInputStream(ser); DataInputStream in = new DataInputStream(bin); int taskId = WritableUtils.readVInt(in); int streamId = WritableUtils.readVInt(in); String componentName = _context.getComponentId(taskId); String streamName = _ids.getStreamName(componentName, streamId); MessageId id = MessageId.deserialize(in); List<Object> values = _kryo.deserializeFrom(bin); return new Tuple(_context, values, taskId, streamName, id); } catch(IOException e) { throw new RuntimeException(e); } } }
private List<Integer> boltEmit(String out_stream_id,Collection<Tuple> anchors, List<Object> values, Integer out_task_id) { try { java.util.Set<Integer> out_tasks = null; if (out_task_id != null) { out_tasks = sendTargets.get(out_task_id, out_stream_id, values); } else { out_tasks = sendTargets.get(out_stream_id, values); } for (Integer t : out_tasks) { HashMap anchors_to_ids = new HashMap(); if (anchors != null) { for (Tuple a : anchors) { Long edge_id = MessageId.generateId(); TasksCommon.put_xor(pending_acks, a, edge_id); for (Long root_id : a.getMessageId().getAnchorsToIds().keySet()) { TasksCommon.put_xor(anchors_to_ids, root_id, edge_id); } } } MessageId msgid=MessageId.makeId(anchors_to_ids); workerTransfer.transfer(t,new Tuple(topologyContext, values, task_id,out_stream_id, msgid)); } return StormUtils.mk_list(out_tasks); } catch (Exception e) { LOG.error("bolt emit", e); } return new ArrayList<Integer>(); }
Tuple tp = new Tuple(topology_context, values, task_id,out_stream_id, msgid); transfer_fn.transfer(t, tp);