in cassovary-core/src/main/scala/com/twitter/cassovary/graph/GraphUtils.scala [106:130]
def randomWalk(dir: GraphDir, startNodeIds: Seq[Int], walkParams: RandomWalkParams)():
(VisitsCounter, Option[PathsCounter]) = {
val startNodesExist = (startNodeIds.length > 0) && startNodeIds.forall(graph.existsNodeId)
val visitsCounter = new VisitsCounter
val pathsCounterOption = walkParams.numTopPathsPerNode match {
case Some(k) if k > 0 => Some(new PathsCounter(k, startNodeIds))
case _ => None
}
if (startNodesExist) {
val traversedNodes = new RandomBoundedTraverser(graph, dir, startNodeIds,
walkParams.numSteps, walkParams)
Stat.time(statsReceiver.stat("random_walk_traverse")) {
traversedNodes.foreach { node =>
visitsCounter.visit(node)
if (pathsCounterOption.isDefined) {
pathsCounterOption.get.visit(node)
}
}
}
}
(visitsCounter, pathsCounterOption)
}