public Stream<M> receiveMessages(MessageScope messageScope) { if (messageScope instanceof MessageScope.Global) { M message = vertexMemory.getMessage(vertexId,messageScope); if (message == null) return Stream.empty(); else return Stream.of(message); } else { final MessageScope.Local<M> localMessageScope = (MessageScope.Local) messageScope; final Traversal<Vertex, Edge> reverseIncident = FulgoraUtil.getReverseElementTraversal(localMessageScope,vertex,vertex.tx()); final BiFunction<M,Edge,M> edgeFct = localMessageScope.getEdgeFunction(); return IteratorUtils.stream(reverseIncident) .map(e -> { M msg = vertexMemory.getMessage(vertexMemory.getCanonicalId(((TitanEdge) e).otherVertex(vertex).longId()), localMessageScope); return msg == null ? null : edgeFct.apply(msg, e); }) .filter(m -> m != null); } }
public Stream<M> receiveMessages(MessageScope messageScope) { if (messageScope instanceof MessageScope.Global) { M message = vertexMemory.getMessage(vertexId,messageScope); if (message == null) return Stream.empty(); else return Stream.of(message); } else { final MessageScope.Local<M> localMessageScope = (MessageScope.Local) messageScope; final BiFunction<M,Edge,M> edgeFct = localMessageScope.getEdgeFunction(); final List<Edge> edges; try (final Traversal<Vertex, Edge> reverseIncident = FulgoraUtil.getReverseElementTraversal(localMessageScope,vertex,vertex.tx())) { edges = IteratorUtils.list(reverseIncident); } catch (Exception e) { throw new JanusGraphException("Unable to close traversal", e); } return edges.stream() .map(e -> { M msg = vertexMemory.getMessage(vertexMemory.getCanonicalId(((JanusGraphEdge) e).otherVertex(vertex).longId()), localMessageScope); return msg == null ? null : edgeFct.apply(msg, e); }) .filter(Objects::nonNull); } }
.filter(q -> null != q) .flatMap(Queue::stream) .map(message -> localMessageScope.getEdgeFunction().apply(message, edge[0])) .iterator());
.filter(q -> null != q) .flatMap(Queue::stream) .map(message -> localMessageScope.getEdgeFunction().apply(message, edge[0])) .iterator());
.filter(q -> null != q) .flatMap(Queue::stream) .map(message -> localMessageScope.getEdgeFunction().apply(message, edge[0])) .iterator());
@Override public Iterator<M> receiveMessages() { MultiIterator<M> multiIterator = new MultiIterator<>(); for (MessageScope messageScope : messageBoard.getPreviousMessageScopes()) { if (messageScope instanceof MessageScope.Local) { @SuppressWarnings("unchecked") MessageScope.Local<M> localMessageScope = (MessageScope.Local<M>) messageScope; Traversal.Admin<Vertex, Edge> incidentTraversal = DuctileMessenger .setVertexStart(localMessageScope.getIncidentTraversal().get().asAdmin(), vertex); Direction direction = DuctileMessenger.getDirection(incidentTraversal); Edge[] edge = new Edge[1]; multiIterator.addIterator(// StreamSupport // .stream(Spliterators.spliteratorUnknownSize( VertexProgramHelper.reverse(incidentTraversal.asAdmin()), Spliterator.IMMUTABLE | Spliterator.SIZED), false)// .map(e -> messageBoard.getReceiveMessage((edge[0] = e).vertices(direction).next()))// .filter(q -> null != q)// .flatMap(Queue::stream)// .map(message -> localMessageScope.getEdgeFunction().apply(message, edge[0])) .iterator()); } else { multiIterator.addIterator(Stream.of(vertex).map(messageBoard.getReceiveMessages()::get) .filter(q -> null != q).flatMap(Queue::stream).iterator()); } } return multiIterator; }
@Override public void sendMessage(final MessageScope messageScope, final M message) { if (messageScope instanceof MessageScope.Local) { final MessageScope.Local<M> localMessageScope = (MessageScope.Local) messageScope; final Traversal.Admin<Vertex, Edge> incidentTraversal = SparkMessenger.setVertexStart(localMessageScope.getIncidentTraversal().get().asAdmin(), this.vertex); final Direction direction = SparkMessenger.getOppositeDirection(incidentTraversal); // handle processing for BOTH given TINKERPOP-1862 where the target of the message is the one opposite // the current vertex incidentTraversal.forEachRemaining(edge -> { if (direction.equals(Direction.IN) || direction.equals(Direction.OUT)) this.outgoingMessages.add(new Tuple2<>(edge.vertices(direction).next().id(), localMessageScope.getEdgeFunction().apply(message, edge))); else this.outgoingMessages.add(new Tuple2<>(edge instanceof StarGraph.StarOutEdge ? edge.inVertex().id() : edge.outVertex().id(), localMessageScope.getEdgeFunction().apply(message, edge))); }); } else { ((MessageScope.Global) messageScope).vertices().forEach(v -> this.outgoingMessages.add(new Tuple2<>(v.id(), message))); } }
public Stream<M> receiveMessages(MessageScope messageScope) { if (messageScope instanceof MessageScope.Global) { M message = vertexMemory.getMessage(vertexId,messageScope); if (message == null) return Stream.empty(); else return Stream.of(message); } else { final MessageScope.Local<M> localMessageScope = (MessageScope.Local) messageScope; final Traversal<Vertex, Edge> reverseIncident = FulgoraUtil.getReverseElementTraversal(localMessageScope,vertex,vertex.tx()); final BiFunction<M,Edge,M> edgeFct = localMessageScope.getEdgeFunction(); return IteratorUtils.stream(reverseIncident) .map(e -> { M msg = vertexMemory.getMessage(vertexMemory.getCanonicalId(((TitanEdge) e).otherVertex(vertex).longId()), localMessageScope); return msg == null ? null : edgeFct.apply(msg, e); }) .filter(m -> m != null); } }
@Override public void sendMessage(final MessageScope messageScope, final M message) { if (messageScope instanceof MessageScope.Local) { final MessageScope.Local<M> localMessageScope = (MessageScope.Local) messageScope; final Traversal.Admin<Vertex, Edge> incidentTraversal = SparkMessenger.setVertexStart(localMessageScope.getIncidentTraversal().get().asAdmin(), this.vertex); final Direction direction = SparkMessenger.getOppositeDirection(incidentTraversal); // handle processing for BOTH given TINKERPOP-1862 where the target of the message is the one opposite // the current vertex incidentTraversal.forEachRemaining(edge -> { if (direction.equals(Direction.IN) || direction.equals(Direction.OUT)) this.outgoingMessages.add(new Tuple2<>(edge.vertices(direction).next().id(), localMessageScope.getEdgeFunction().apply(message, edge))); else this.outgoingMessages.add(new Tuple2<>(edge instanceof StarGraph.StarOutEdge ? edge.inVertex().id() : edge.outVertex().id(), localMessageScope.getEdgeFunction().apply(message, edge))); }); } else { ((MessageScope.Global) messageScope).vertices().forEach(v -> this.outgoingMessages.add(new Tuple2<>(v.id(), message))); } }