in graphjet-core/src/main/java/com/twitter/graphjet/algorithms/salsa/fullgraph/LeftSalsaIteration.java [63:96]
public void runSingleIteration() {
int numEdgesTraversed = 0;
int numWalksResetToQueryNode = 0;
for (long leftNode : salsaInternalState.getCurrentLeftNodes().keySet()) {
int numWalksToStart = salsaInternalState.getCurrentLeftNodes().get(leftNode);
int numWalks = 0;
for (int i = 0; i < numWalksToStart; i++) {
if (random.nextDouble() >= salsaInternalState.getSalsaRequest().getResetProbability()) {
numWalks++;
}
}
numWalksResetToQueryNode += numWalksToStart - numWalks;
if (numWalks > 0) {
EdgeIterator sampledRightNodes = salsaInternalState.getBipartiteGraph()
.getRandomLeftNodeEdges(leftNode, numWalks, random);
int leftNodeDegree = salsaInternalState.getBipartiteGraph().getLeftNodeDegree(leftNode);
if (sampledRightNodes != null) {
while (sampledRightNodes.hasNext()) {
long rightNode = sampledRightNodes.nextLong();
salsaInternalState.addNodeToCurrentRightNodes(rightNode);
int numVisits =
salsaInternalState.visitRightNode(nodeVisitor, leftNode,
rightNode, sampledRightNodes.currentEdgeType(),
sampledRightNodes.currentMetadata(), leftNodeDegree);
salsaInternalState.getSalsaStats().updateVisitStatsPerRightNode(numVisits);
numEdgesTraversed++;
}
}
}
}
salsaInternalState.resetCurrentLeftNodes(
salsaInternalState.getSalsaRequest().getQueryNode(), numWalksResetToQueryNode);
salsaInternalState.getSalsaStats().addToNumRHSVisits(numEdgesTraversed);
}