Author: alexparvulescu Date: Thu Sep 4 15:26:04 2014 New Revision: 1622498
URL: http://svn.apache.org/r1622498 Log: OAK-1858 Segment Explorer - added option to skip the size check Modified: jackrabbit/oak/trunk/oak-run/README.md jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/Explorer.java jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/NodeStoreTree.java Modified: jackrabbit/oak/trunk/oak-run/README.md URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/README.md?rev=1622498&r1=1622497&r2=1622498&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-run/README.md (original) +++ jackrabbit/oak/trunk/oak-run/README.md Thu Sep 4 15:26:04 2014 @@ -81,7 +81,7 @@ Explore The 'explore' mode starts a desktop browser GUI based on java swing which allows for read-only browsing of an existing oak repository. - $ java -jar oak-run-*.jar explore /path/to/oak/repository + $ java -jar oak-run-*.jar explore /path/to/oak/repository [skip-size-check] Compact ------- Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/Explorer.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/Explorer.java?rev=1622498&r1=1622497&r2=1622498&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/Explorer.java (original) +++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/Explorer.java Thu Sep 4 15:26:04 2014 @@ -51,23 +51,27 @@ import org.apache.jackrabbit.oak.plugins */ public class Explorer { + private static String skip = "skip-size-check"; + public static void main(String[] args) throws IOException { new Explorer(args); } public Explorer(String[] args) throws IOException { if (args.length == 0) { - System.err.println("usage: explore <path>"); + System.err.println("usage: explore <path> [skip-size-check]"); System.exit(1); } final String path = args[0]; final FileStore store = new FileStore(new File(path), 256); + final boolean skipSizeCheck = args.length == 2 + && skip.equalsIgnoreCase(args[1]); javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { initLF(); - createAndShowGUI(path, store); + createAndShowGUI(path, store, skipSizeCheck); } }); } @@ -86,7 +90,7 @@ public class Explorer { } } - private void createAndShowGUI(final String path, final FileStore store) { + private void createAndShowGUI(final String path, final FileStore store, boolean skipSizeCheck) { final JFrame frame = new JFrame("Explore " + path); frame.addWindowListener(new java.awt.event.WindowAdapter() { @Override @@ -103,7 +107,7 @@ public class Explorer { log.setLineWrap(true); log.setEditable(false); - final NodeStoreTree treePanel = new NodeStoreTree(store, log); + final NodeStoreTree treePanel = new NodeStoreTree(store, log, skipSizeCheck); GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/NodeStoreTree.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/NodeStoreTree.java?rev=1622498&r1=1622497&r2=1622498&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/NodeStoreTree.java (original) +++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/NodeStoreTree.java Thu Sep 4 15:26:04 2014 @@ -71,17 +71,20 @@ public class NodeStoreTree extends JPane private Map<String, Set<UUID>> index; private Map<RecordIdKey, Long[]> sizeCache; + private final boolean skipSizeCheck; - public NodeStoreTree(FileStore store, JTextArea log) { + public NodeStoreTree(FileStore store, JTextArea log, boolean skipSizeCheck) { super(new GridLayout(1, 0)); this.store = store; this.log = log; - index = store.getTarReaderIndex(); - sizeCache = new HashMap<RecordIdKey, Long[]>(); + this.index = store.getTarReaderIndex(); + this.sizeCache = new HashMap<RecordIdKey, Long[]>(); + this.skipSizeCheck = skipSizeCheck; DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode( - new NamePathModel("/", "/", store.getHead(), sizeCache), true); + new NamePathModel("/", "/", store.getHead(), sizeCache, + skipSizeCheck), true); treeModel = new DefaultTreeModel(rootNode); addChildren(rootNode); @@ -100,7 +103,8 @@ public class NodeStoreTree extends JPane index = store.getTarReaderIndex(); sizeCache = new HashMap<RecordIdKey, Long[]>(); DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode( - new NamePathModel("/", "/", store.getHead(), sizeCache), true); + new NamePathModel("/", "/", store.getHead(), sizeCache, + skipSizeCheck), true); treeModel = new DefaultTreeModel(rootNode); addChildren(rootNode); } @@ -113,8 +117,25 @@ public class NodeStoreTree extends JPane return; } // load child nodes: - addChildren(node); - updateStats(node); + try { + addChildren(node); + updateStats(node); + } catch (IllegalStateException ex) { + ex.printStackTrace(); + + StringBuilder sb = new StringBuilder(); + sb.append(ex.getMessage()); + sb.append(newline); + + NamePathModel model = (NamePathModel) node.getUserObject(); + if (model.getState() instanceof SegmentNodeState) { + SegmentNodeState sns = (SegmentNodeState)model.getState(); + sb.append("Record "); + sb.append(sns.getRecordId().toString()); + sb.append(newline); + } + log.setText(sb.toString()); + } } private void addChildren(DefaultMutableTreeNode parent) { @@ -127,7 +148,7 @@ public class NodeStoreTree extends JPane for (ChildNodeEntry ce : model.getState().getChildNodeEntries()) { NamePathModel c = new NamePathModel(ce.getName(), PathUtils.concat( model.getPath(), ce.getName()), ce.getNodeState(), - sizeCache); + sizeCache, skipSizeCheck); kids.add(c); } Collections.sort(kids); @@ -433,17 +454,19 @@ public class NodeStoreTree extends JPane private final String name; private final String path; private final NodeState state; + private final boolean skipSizeCheck; private boolean loaded = false; private Long[] size = { -1l, -1l }; public NamePathModel(String name, String path, NodeState state, - Map<RecordIdKey, Long[]> sizeCache) { + Map<RecordIdKey, Long[]> sizeCache, boolean skipSizeCheck) { this.name = name; this.path = path; this.state = state; - if (state instanceof SegmentNodeState) { + this.skipSizeCheck = skipSizeCheck; + if (!skipSizeCheck && state instanceof SegmentNodeState) { this.size = exploreSize((SegmentNodeState) state, sizeCache); } } @@ -458,6 +481,9 @@ public class NodeStoreTree extends JPane @Override public String toString() { + if (skipSizeCheck) { + return name; + } if (size[1] > 0) { return name + " (" + FileUtils.byteCountToDisplaySize(size[0]) + ";" + FileUtils.byteCountToDisplaySize(size[1]) + ")";