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]) + 
")";


Reply via email to