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/08/25 11:49:10 UTC

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

Author: alexparvulescu
Date: Mon Aug 25 09:49:09 2014
New Revision: 1620287

URL: http://svn.apache.org/r1620287
Log:
OAK-1858 Segment Explorer
 - decoupled hard refs to the segmentids / segments from the UI

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=1620287&r1=1620286&r2=1620287&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 Aug 25 09:49:09 2014
@@ -64,12 +64,12 @@ class NodeStoreTree extends JPanel imple
 
     private final FileStore store;
 
-    private final DefaultTreeModel treeModel;
+    private DefaultTreeModel treeModel;
     private final JTree tree;
     private final JTextArea log;
 
-    private final Map<String, Set<UUID>> index;
-    private final Map<RecordId, Long[]> sizeCache;
+    private Map<String, Set<UUID>> index;
+    private Map<RecordIdKey, Long[]> sizeCache;
 
     public NodeStoreTree(FileStore store, JTextArea log) {
         super(new GridLayout(1, 0));
@@ -77,7 +77,7 @@ class NodeStoreTree extends JPanel imple
         this.log = log;
 
         index = store.getTarReaderIndex();
-        sizeCache = new HashMap<RecordId, Long[]>();
+        sizeCache = new HashMap<RecordIdKey, Long[]>();
 
         DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(
                 new NamePathModel("/", "/", store.getHead(), sizeCache), true);
@@ -95,6 +95,15 @@ class NodeStoreTree extends JPanel imple
         add(scrollPane);
     }
 
+    private void refreshModel() {
+        index = store.getTarReaderIndex();
+        sizeCache = new HashMap<RecordIdKey, Long[]>();
+        DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(
+                new NamePathModel("/", "/", store.getHead(), sizeCache), true);
+        treeModel = new DefaultTreeModel(rootNode);
+        addChildren(rootNode);
+    }
+
     @Override
     public void valueChanged(TreeSelectionEvent e) {
         DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
@@ -381,6 +390,9 @@ class NodeStoreTree extends JPanel imple
     }
 
     public void compact() {
+        sizeCache = new HashMap<RecordIdKey, Long[]>();
+        treeModel = null;
+
         StringBuilder sb = new StringBuilder();
 
         long s = System.currentTimeMillis();
@@ -409,6 +421,8 @@ class NodeStoreTree extends JPanel imple
         }
         sb.append("----------");
         log.setText(sb.toString());
+
+        refreshModel();
     }
 
     private static class NamePathModel implements Comparable<NamePathModel> {
@@ -422,7 +436,7 @@ class NodeStoreTree extends JPanel imple
         private Long[] size = { -1l, -1l };
 
         public NamePathModel(String name, String path, NodeState state,
-                Map<RecordId, Long[]> sizeCache) {
+                Map<RecordIdKey, Long[]> sizeCache) {
             this.name = name;
             this.path = path;
             this.state = state;
@@ -484,9 +498,10 @@ class NodeStoreTree extends JPanel imple
     }
 
     private static Long[] exploreSize(SegmentNodeState ns,
-            Map<RecordId, Long[]> sizeCache) {
-        if (sizeCache.containsKey(ns.getRecordId())) {
-            return sizeCache.get(ns.getRecordId());
+            Map<RecordIdKey, Long[]> sizeCache) {
+        RecordIdKey key = new RecordIdKey(ns.getRecordId());
+        if (sizeCache.containsKey(key)) {
+            return sizeCache.get(key);
         }
         Long[] s = { 0l, 0l };
 
@@ -511,9 +526,10 @@ class NodeStoreTree extends JPanel imple
 
         for (String n : names) {
             SegmentNodeState k = (SegmentNodeState) ns.getChildNode(n);
-            if (sizeCache.containsKey(k.getRecordId())) {
+            RecordIdKey ckey = new RecordIdKey(k.getRecordId());
+            if (sizeCache.containsKey(ckey)) {
                 // already been here, record size under 'link'
-                Long[] ks = sizeCache.get(k.getRecordId());
+                Long[] ks = sizeCache.get(ckey);
                 s[1] = s[1] + ks[0] + ks[1];
             } else {
                 Long[] ks = exploreSize(k, sizeCache);
@@ -526,7 +542,42 @@ class NodeStoreTree extends JPanel imple
                 s[0] = s[0] + ps.size(j);
             }
         }
-        sizeCache.put(ns.getRecordId(), s);
+        sizeCache.put(key, s);
         return s;
     }
+
+    private static class RecordIdKey {
+
+        private final long msb;
+        private final long lsb;
+        private final int offset;
+
+        public RecordIdKey(RecordId rid) {
+            this.offset = rid.getOffset();
+            this.msb = rid.getSegmentId()
+                    .getMostSignificantBits();
+            this.lsb = rid.getSegmentId()
+                    .getLeastSignificantBits();
+        }
+
+        @Override
+        public boolean equals(Object object) {
+            if (this == object) {
+                return true;
+            } else if (object instanceof RecordIdKey) {
+                RecordIdKey that = (RecordIdKey) object;
+                return offset == that.offset && msb == that.msb
+                        && lsb == that.lsb;
+            } else {
+                return false;
+            }
+        }
+
+        @Override
+        public int hashCode() {
+            return ((int) lsb) ^ offset;
+        }
+
+    }
+
 }