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;
+ }
+
+ }
+
}