Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java (revision 62de029fbeb1700886799e4eb417fcc6a55c698a) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java (revision ) @@ -24,6 +24,7 @@ import static com.google.common.collect.Maps.newHashMap; import static com.google.common.collect.Sets.newHashSet; import static java.lang.String.format; +import static java.util.Collections.emptyMap; import static java.util.Collections.singletonMap; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.NANOSECONDS; @@ -49,18 +50,18 @@ import java.util.regex.Pattern; import com.google.common.base.Stopwatch; - +import com.google.common.collect.Maps; import org.apache.jackrabbit.oak.api.Blob; import org.apache.jackrabbit.oak.plugins.blob.BlobStoreBlob; import org.apache.jackrabbit.oak.plugins.segment.Compactor; import org.apache.jackrabbit.oak.plugins.segment.RecordId; import org.apache.jackrabbit.oak.plugins.segment.Segment; import org.apache.jackrabbit.oak.plugins.segment.SegmentId; +import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState; import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore; import org.apache.jackrabbit.oak.plugins.segment.SegmentNotFoundException; -import org.apache.jackrabbit.oak.plugins.segment.SegmentTracker; -import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState; import org.apache.jackrabbit.oak.plugins.segment.SegmentStore; +import org.apache.jackrabbit.oak.plugins.segment.SegmentTracker; import org.apache.jackrabbit.oak.plugins.segment.SegmentWriter; import org.apache.jackrabbit.oak.spi.blob.BlobStore; import org.apache.jackrabbit.oak.spi.state.NodeBuilder; @@ -727,6 +728,20 @@ index.put(reader.getFile().getAbsolutePath(), reader.getUUIDs()); } return index; + } + + public Map> getTarGraph(String fileName) throws IOException { + for (TarReader reader : readers) { + if (fileName.equals(reader.getFile().getName())) { + Map> graph = Maps.newHashMap(); + for (UUID uuid : reader.getUUIDs()) { + graph.put(uuid, null); + } + graph.putAll(reader.getGraph()); + return graph; + } + } + return emptyMap(); } public FileStore setPauseCompaction(boolean pauseCompaction) { Index: oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/NodeStoreTree.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/NodeStoreTree.java (revision 62de029fbeb1700886799e4eb417fcc6a55c698a) +++ oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/NodeStoreTree.java (revision ) @@ -353,7 +353,7 @@ return ""; } - public void printDependenciesToFile(String file) { + public void printTarInfo(String file) { if (file == null || file.length() == 0) { return; } @@ -386,6 +386,18 @@ sb.append(p); sb.append(newline); } + } + + sb.append(newline); + try { + Map> graph = store.getTarGraph(file); + sb.append("Tar graph:").append(newline); + for (Entry> entry : graph.entrySet()) { + sb.append(entry.getKey()).append('=').append(entry.getValue()).append(newline); + } + sb.append(newline); + } catch (IOException e) { + sb.append("Error getting tar graph:").append(e).append(newline); } log.setText(sb.toString()); Index: oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/Explorer.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/Explorer.java (revision 62de029fbeb1700886799e4eb417fcc6a55c698a) +++ oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/Explorer.java (revision ) @@ -137,7 +137,7 @@ } }); - JMenuItem menuRefs = new JMenuItem("Tar File Refs"); + JMenuItem menuRefs = new JMenuItem("Tar File Info"); menuRefs.setMnemonic(KeyEvent.VK_R); menuRefs.addActionListener(new ActionListener() { @Override @@ -150,11 +150,11 @@ } String s = (String) JOptionPane.showInputDialog(frame, - "Choose a tar file", "Tar File References", + "Choose a tar file", "Tar File Info", JOptionPane.PLAIN_MESSAGE, null, tarFiles.toArray(), tarFiles.get(0)); if (s != null) { - treePanel.printDependenciesToFile(s); + treePanel.printTarInfo(s); return; } } Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarReader.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarReader.java (revision 62de029fbeb1700886799e4eb417fcc6a55c698a) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarReader.java (revision ) @@ -23,6 +23,7 @@ import static com.google.common.collect.Maps.newLinkedHashMap; import static com.google.common.collect.Maps.newTreeMap; import static com.google.common.collect.Sets.newHashSetWithExpectedSize; +import static java.util.Collections.emptyMap; import static java.util.Collections.singletonList; import static org.apache.jackrabbit.oak.plugins.segment.Segment.REF_COUNT_OFFSET; import static org.apache.jackrabbit.oak.plugins.segment.SegmentId.isDataSegmentId; @@ -724,6 +725,14 @@ } //-----------------------------------------------------------< private >-- + + Map> getGraph() throws IOException { + if (graph == null) { + return emptyMap(); + } else { + return parseGraph(); + } + } private Map> parseGraph() throws IOException { int count = graph.getInt(graph.limit() - 12);