@Override public void execute(Vertex vertex, Messenger<Integer> messenger, Memory memory) { if (memory.isInitialIteration()) { messenger.sendMessage(DEG_MSG, 1); } else { int degree = IteratorUtils.stream(messenger.receiveMessages()).reduce(0, (a, b) -> a + b); vertex.property(VertexProperty.Cardinality.single, DEGREE, degree); if (memory.getIteration()<length) messenger.sendMessage(DEG_MSG, degree); } }
@Override public void execute(Vertex vertex, Messenger<Integer> messenger, Memory memory) { if (memory.isInitialIteration()) { messenger.sendMessage(DEG_MSG, 1); } else { int degree = IteratorUtils.stream(messenger.receiveMessages()).reduce(0, (a, b) -> a + b); vertex.property(VertexProperty.Cardinality.single, DEGREE, degree); if (memory.getIteration()<length) messenger.sendMessage(DEG_MSG, degree); } }
@Override public void execute(final Vertex vertex, Messenger<Long> messenger, final Memory memory) { if (memory.isInitialIteration()) { if (vertex.id().equals(Long.valueOf(seed).longValue())) { // The seed sends a single message to start the computation log.debug("Sent initial message from {}", vertex.id()); // The seed's distance to itself is zero vertex.property(VertexProperty.Cardinality.single, DISTANCE, 0L); messenger.sendMessage(incidentMessageScope, 0L); } } else { Iterator<Long> distances = messenger.receiveMessages(); // Find minimum distance among all incoming messages, or null if no messages came in Long shortestDistanceSeenOnThisIteration = IteratorUtils.stream(distances).reduce((a, b) -> Math.min(a, b)).orElse(null); if (null == shortestDistanceSeenOnThisIteration) return; // no messages to process or forward on this superstep VertexProperty<Long> currentShortestVP = vertex.property(DISTANCE); if (!currentShortestVP.isPresent() || currentShortestVP.value() > shortestDistanceSeenOnThisIteration) { // First/shortest distance seen by this vertex: store it and forward to neighbors vertex.property(VertexProperty.Cardinality.single, DISTANCE, shortestDistanceSeenOnThisIteration); messenger.sendMessage(incidentMessageScope, shortestDistanceSeenOnThisIteration); } // else: no new winner, ergo no reason to send message to neighbors } }
@Override public void execute(Vertex vertex, Messenger<Double> messenger, Memory memory) { if (memory.isInitialIteration()) { messenger.sendMessage(inE, 1D); } else if (1 == memory.getIteration()) { double initialPageRank = 1D / vertexCount; double edgeCount = IteratorUtils.stream(messenger.receiveMessages()).reduce(0D, (a, b) -> a + b); vertex.property(VertexProperty.Cardinality.single, PAGE_RANK, initialPageRank); vertex.property(VertexProperty.Cardinality.single, OUTGOING_EDGE_COUNT, edgeCount); messenger.sendMessage(outE, initialPageRank / edgeCount); } else { double newPageRank = IteratorUtils.stream(messenger.receiveMessages()).reduce(0D, (a, b) -> a + b); newPageRank = (dampingFactor * newPageRank) + ((1D - dampingFactor) / vertexCount); vertex.property(VertexProperty.Cardinality.single, PAGE_RANK, newPageRank); messenger.sendMessage(outE, newPageRank / vertex.<Double>value(OUTGOING_EDGE_COUNT)); } }
@Override public void execute(Vertex vertex, Messenger<Double> messenger, Memory memory) { if (memory.isInitialIteration()) { messenger.sendMessage(inE, 1D); } else if (1 == memory.getIteration()) { double initialPageRank = 1D / vertexCount; double edgeCount = IteratorUtils.stream(messenger.receiveMessages()).reduce(0D, (a, b) -> a + b); vertex.property(VertexProperty.Cardinality.single, PAGE_RANK, initialPageRank); vertex.property(VertexProperty.Cardinality.single, OUTGOING_EDGE_COUNT, edgeCount); messenger.sendMessage(outE, initialPageRank / edgeCount); } else { double newPageRank = IteratorUtils.stream(messenger.receiveMessages()).reduce(0D, (a, b) -> a + b); newPageRank = (dampingFactor * newPageRank) + ((1D - dampingFactor) / vertexCount); vertex.property(VertexProperty.Cardinality.single, PAGE_RANK, newPageRank); messenger.sendMessage(outE, newPageRank / vertex.<Double>value(OUTGOING_EDGE_COUNT)); } }
@Override public void execute(final Vertex vertex, Messenger<Long> messenger, final Memory memory) { if (memory.isInitialIteration()) { if (vertex.id().equals(seed)) { // The seed sends a single message to start the computation log.debug("Sent initial message from {}", vertex.id()); // The seed's distance to itself is zero vertex.property(VertexProperty.Cardinality.single, DISTANCE, 0L); messenger.sendMessage(incidentMessageScope, 0L); } } else { Iterator<Long> distances = messenger.receiveMessages(); // Find minimum distance among all incoming messages, or null if no messages came in Long shortestDistanceSeenOnThisIteration = IteratorUtils.stream(distances).reduce(Math::min).orElse(null); if (null == shortestDistanceSeenOnThisIteration) return; // no messages to process or forward on this superstep VertexProperty<Long> currentShortestVP = vertex.property(DISTANCE); if (!currentShortestVP.isPresent() || currentShortestVP.value() > shortestDistanceSeenOnThisIteration) { // First/shortest distance seen by this vertex: store it and forward to neighbors vertex.property(VertexProperty.Cardinality.single, DISTANCE, shortestDistanceSeenOnThisIteration); messenger.sendMessage(incidentMessageScope, shortestDistanceSeenOnThisIteration); } // else: no new winner, ergo no reason to send message to neighbors } }
@Override public void sendMessage(final MessageScope messageScope, final M message) { this.baseMessenger.sendMessage(messageScope, message); } }
@Override public void execute(final Vertex vertex, final Messenger<String> messenger, final Memory memory) { if (memory.isInitialIteration()) { messenger.sendMessage(this.messageScope, vertex.value(PROPERTY_IN).toString()); } else { final char[] composite = IteratorUtils.reduce(messenger.receiveMessages(), "", (a, b) -> a + b).toCharArray(); Arrays.sort(composite); vertex.property(PROPERTY_OUT, new String(composite)); } }
@Override public void execute(Vertex vertex, Messenger<Long> messenger, Memory memory) { switch (memory.getIteration()) { case 0: if (vertex.value("name").equals("josh")) { messenger.sendMessage(this.countMessageScopeIn, 2L); messenger.sendMessage(this.countMessageScopeOut, 1L); } break; case 1: long edgeCount = IteratorUtils.reduce(messenger.receiveMessages(), 0L, (a, b) -> a + b); vertex.property(MEMORY_KEY, edgeCount); break; } }
@Override public void execute(Vertex vertex, Messenger<Long> messenger, Memory memory) { switch (memory.getIteration()) { case 0: if (vertex.value("name").equals("josh")) { messenger.sendMessage(this.countMessageScopeIn, 2L); messenger.sendMessage(this.countMessageScopeOut, 1L); } break; case 1: long edgeCount = IteratorUtils.reduce(messenger.receiveMessages(), 0L, (a, b) -> a + b); vertex.property(MEMORY_KEY, edgeCount); break; } }
messenger.sendMessage(scope, vertex.id().toString()); memory.add(VOTE_TO_HALT, false); messenger.sendMessage(scope, currentComponent); memory.add(VOTE_TO_HALT, false);
if (memory.isInitialIteration()) { if (this.distributeVote) { messenger.sendMessage(this.countScope, Pair.with('c', 1.0d)); } else { double voteStrength = (null == this.initialVoteStrengthTraversal ? vertex.property(VertexProperty.Cardinality.single, this.property, vertex.id()); vertex.property(VertexProperty.Cardinality.single, VOTE_STRENGTH, voteStrength); messenger.sendMessage(this.voteScope, new Pair<>((Serializable) vertex.id(), voteStrength)); memory.add(VOTE_TO_HALT, false); vertex.property(VertexProperty.Cardinality.single, this.property, vertex.id()); vertex.property(VertexProperty.Cardinality.single, VOTE_STRENGTH, voteStrength); messenger.sendMessage(this.voteScope, new Pair<>((Serializable) vertex.id(), voteStrength)); memory.add(VOTE_TO_HALT, false); } else { memory.add(VOTE_TO_HALT, vertex.value(this.property).equals(cluster)); vertex.property(VertexProperty.Cardinality.single, this.property, cluster); messenger.sendMessage(this.voteScope, new Pair<>(cluster, vertex.<Double>value(VOTE_STRENGTH)));
private void processEdges(final Vertex vertex, final Path currentPath, final Number currentDistance, final Messenger<Triplet<Path, Edge, Number>> messenger) { final Traversal.Admin<Vertex, Edge> edgeTraversal = this.edgeTraversal.getPure(); edgeTraversal.addStart(edgeTraversal.getTraverserGenerator().generate(vertex, edgeTraversal.getStartStep(), 1)); while (edgeTraversal.hasNext()) { final Edge edge = edgeTraversal.next(); final Number distance = getDistance(edge); Vertex otherV = edge.inVertex(); if (otherV.equals(vertex)) otherV = edge.outVertex(); // only send message if the adjacent vertex is not yet part of the current path if (!currentPath.objects().contains(otherV)) { messenger.sendMessage(MessageScope.Global.of(otherV), Triplet.with(currentPath, this.includeEdges ? edge : null, NumberHelper.add(currentDistance, distance))); } } }
@Override public void sendMessage(final MessageScope messageScope, final M message) { this.baseMessenger.sendMessage(messageScope, message); } }
@Override public void execute(final Vertex vertex, Messenger<Double> messenger, final Memory memory) { if (memory.isInitialIteration()) { messenger.sendMessage(this.countMessageScope, 1.0d); memory.add(VERTEX_COUNT, 1.0d); } else { pageRank = this.alpha * pageRank; if (edgeCount > 0.0d) messenger.sendMessage(this.incidentMessageScope, pageRank / edgeCount); else memory.add(TELEPORTATION_ENERGY, pageRank);
messenger.sendMessage(messageScope, Pair.with(sourceVertex.id(), targetVertex.id()));
if (!vertex.equals(hostingVertex)) { // if its host is not the current vertex, then send the traverser to the hosting vertex voteToHalt.set(false); // if message is passed, then don't vote to halt messenger.sendMessage(MessageScope.Global.of(hostingVertex), new TraverserSet<>(traverser.detach())); } else {
static void degreeStatisticsStepResourceOwner(Vertex vertex, Messenger<Long> messenger, Set<LabelId> ofLabelIds) { LabelId labelId = Utility.getVertexTypeId(vertex); if (labelId.isValid() && !ofLabelIds.contains(labelId)) { messenger.sendMessage(messageScopeShortcutIn, 1L); messenger.sendMessage(messageScopeResourceOut, 1L); } }
private static void updateClusterLabel(Vertex vertex, Messenger<String> messenger, Memory memory) { String currentMax = vertex.value(CLUSTER_LABEL); String max = IteratorUtils.reduce(messenger.receiveMessages(), currentMax, (a, b) -> a.compareTo(b) > 0 ? a : b); if (max.compareTo(currentMax) > 0) { vertex.property(CLUSTER_LABEL, max); messenger.sendMessage(messageScopeIn, max); messenger.sendMessage(messageScopeOut, max); memory.add(VOTE_TO_HALT, false); } }
@Override public void execute(final Vertex vertex, final Messenger<String> messenger, final Memory memory) { if (memory.isInitialIteration()) { messenger.sendMessage(this.messageScope, vertex.value(PROPERTY_IN).toString()); } else { final char[] composite = IteratorUtils.reduce(messenger.receiveMessages(), "", (a, b) -> a + b).toCharArray(); Arrays.sort(composite); vertex.property(PROPERTY_OUT, new String(composite)); } }