You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by al...@apache.org on 2014/12/01 22:29:40 UTC

svn commit: r1642765 - /jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/NodeStoreTree.java

Author: alexparvulescu
Date: Mon Dec  1 21:29:40 2014
New Revision: 1642765

URL: http://svn.apache.org/r1642765
Log:
OAK-2313 Better handling for external binaries in the segment explorer

Modified:
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/explorer/NodeStoreTree.java

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=1642765&r1=1642764&r2=1642765&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 Mon Dec  1 21:29:40 2014
@@ -308,9 +308,9 @@ public class NodeStoreTree extends JPane
             Blob b = ps.getValue(Type.BINARY, index);
             String info = "<";
             info += b.getClass().getSimpleName() + ";";
-            info += "ref:" + b.getReference() + ";";
+            info += "ref:" + safeGetReference(b) + ";";
             info += "id:" + b.getContentIdentity() + ";";
-            info += FileUtils.byteCountToDisplaySize(b.length()) + ">";
+            info += safeGetLength(b) + ">";
             for (SegmentId sid : SegmentBlob.getBulkSegmentIds(b)) {
                 info += newline + "        Bulk Segment Id " + sid;
                 String f = getFile(sid);
@@ -335,6 +335,24 @@ public class NodeStoreTree extends JPane
         }
     }
 
+    private String safeGetReference(Blob b) {
+        try {
+            return b.getReference();
+        } catch (IllegalStateException e) {
+            // missing BlobStore probably
+        }
+        return "[BlobStore not available]";
+    }
+
+    private String safeGetLength(Blob b) {
+        try {
+            return FileUtils.byteCountToDisplaySize(b.length());
+        } catch (IllegalStateException e) {
+            // missing BlobStore probably
+        }
+        return "[BlobStore not available]";
+    }
+
     private String getFile(RecordId id) {
         return getFile(id.getSegmentId());
     }
@@ -426,6 +444,13 @@ public class NodeStoreTree extends JPane
         StringBuilder sb = new StringBuilder();
         sb.append("SegmentNodeState references to " + id);
         sb.append(newline);
+        for (Entry<String, Set<UUID>> e : store.getTarReaderIndex().entrySet()) {
+            if (e.getValue().contains(id)) {
+                sb.append("Tar file: " + e.getKey());
+                sb.append(newline);
+                break;
+            }
+        }
 
         List<String> paths = newArrayList();
         filterNodeStates(newHashSet(id), paths, store.getHead(), "/");
@@ -729,7 +754,16 @@ public class NodeStoreTree extends JPane
         }
         for (PropertyState ps : ns.getProperties()) {
             for (int j = 0; j < ps.count(); j++) {
-                s[0] = s[0] + ps.size(j);
+                if (ps.getType().tag() == Type.BINARY.tag()) {
+                    Blob b = ps.getValue(Type.BINARY, j);
+                    boolean skip = b instanceof SegmentBlob
+                            && ((SegmentBlob) b).isExternal();
+                    if (!skip) {
+                        s[0] = s[0] + b.length();
+                    }
+                } else {
+                    s[0] = s[0] + ps.size(j);
+                }
             }
         }
         sizeCache.put(key, s);