Differential D6953 Diff 25202 java/src/main/java/org/softwareheritage/graph/utils/FindEarliestRevision.java
Changeset View
Changeset View
Standalone View
Standalone View
java/src/main/java/org/softwareheritage/graph/utils/FindEarliestRevision.java
package org.softwareheritage.graph.utils; | package org.softwareheritage.graph.utils; | ||||
import it.unimi.dsi.big.webgraph.LazyLongIterator; | import it.unimi.dsi.big.webgraph.LazyLongIterator; | ||||
import it.unimi.dsi.fastutil.BigArrays; | import it.unimi.dsi.fastutil.BigArrays; | ||||
import it.unimi.dsi.fastutil.io.BinIO; | import it.unimi.dsi.fastutil.io.BinIO; | ||||
import org.softwareheritage.graph.AllowedEdges; | import org.softwareheritage.graph.*; | ||||
import org.softwareheritage.graph.Graph; | |||||
import org.softwareheritage.graph.Node; | |||||
import org.softwareheritage.graph.SWHID; | |||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.time.Duration; | import java.time.Duration; | ||||
import java.util.HashSet; | import java.util.HashSet; | ||||
import java.util.Scanner; | import java.util.Scanner; | ||||
import java.util.Stack; | import java.util.Stack; | ||||
/* sample invocation on granet.internal.softwareheritage.org for benchmarking | /* sample invocation on granet.internal.softwareheritage.org for benchmarking | ||||
Show All 13 Lines | public static void main(String[] args) throws IOException, ClassNotFoundException { | ||||
if (args.length >= 2 && (args[0].equals("-t") || args[0].equals("--timing"))) { | if (args.length >= 2 && (args[0].equals("-t") || args[0].equals("--timing"))) { | ||||
timing = true; | timing = true; | ||||
graphPath = args[1]; | graphPath = args[1]; | ||||
System.err.println("started with timing option, will keep track of elapsed time"); | System.err.println("started with timing option, will keep track of elapsed time"); | ||||
} | } | ||||
System.err.println("loading transposed graph..."); | System.err.println("loading transposed graph..."); | ||||
ts = System.nanoTime(); | ts = System.nanoTime(); | ||||
Graph graph = Graph.loadMapped(graphPath).transpose(); | SwhBidirectionalGraph graph = SwhBidirectionalGraph.loadMapped(graphPath).transpose(); | ||||
elapsed = Duration.ofNanos(System.nanoTime() - ts); | elapsed = Duration.ofNanos(System.nanoTime() - ts); | ||||
System.err.println(String.format("transposed graph loaded (duration: %s).", elapsed)); | System.err.println(String.format("transposed graph loaded (duration: %s).", elapsed)); | ||||
System.err.println("loading revision timestamps..."); | System.err.println("loading revision timestamps..."); | ||||
ts = System.nanoTime(); | ts = System.nanoTime(); | ||||
long[][] committerTimestamps = BinIO.loadLongsBig(graphPath + "-rev_committer_timestamps.bin"); | long[][] committerTimestamps = BinIO.loadLongsBig(graphPath + "-rev_committer_timestamps.bin"); | ||||
elapsed = Duration.ofNanos(System.nanoTime() - ts); | elapsed = Duration.ofNanos(System.nanoTime() - ts); | ||||
System.err.println(String.format("revision timestamps loaded (duration: %s).", elapsed)); | System.err.println(String.format("revision timestamps loaded (duration: %s).", elapsed)); | ||||
Show All 36 Lines | public static void main(String[] args) throws IOException, ClassNotFoundException { | ||||
if (graph.getNodeType(currentNodeId) == Node.Type.REV) { | if (graph.getNodeType(currentNodeId) == Node.Type.REV) { | ||||
long committerTs = BigArrays.get(committerTimestamps, currentNodeId); | long committerTs = BigArrays.get(committerTimestamps, currentNodeId); | ||||
if (committerTs < minTimestamp) { | if (committerTs < minTimestamp) { | ||||
minRevId = currentNodeId; | minRevId = currentNodeId; | ||||
minTimestamp = committerTs; | minTimestamp = committerTs; | ||||
} | } | ||||
} | } | ||||
LazyLongIterator it = graph.successors(currentNodeId, edges); | LazyLongIterator it = Traversal.filterSuccessors(graph, currentNodeId, edges); | ||||
for (long neighborNodeId; (neighborNodeId = it.nextLong()) != -1;) { | for (long neighborNodeId; (neighborNodeId = it.nextLong()) != -1;) { | ||||
if (!visited.contains(neighborNodeId)) { | if (!visited.contains(neighborNodeId)) { | ||||
stack.push(neighborNodeId); | stack.push(neighborNodeId); | ||||
visited.add(neighborNodeId); | visited.add(neighborNodeId); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
Show All 16 Lines |