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 ju...@apache.org on 2013/02/21 18:24:27 UTC

svn commit: r1448728 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment: JcrImporter.java MemoryStore.java MongoStore.java SegmentNodeState.java SegmentNodeStoreBranch.java SegmentWriter.java

Author: jukka
Date: Thu Feb 21 17:24:27 2013
New Revision: 1448728

URL: http://svn.apache.org/r1448728
Log:
OAK-593: Segment-based MK

Return SegmentNodeState instead of plain RecordId from writeNode()

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/JcrImporter.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MemoryStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MongoStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/JcrImporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/JcrImporter.java?rev=1448728&r1=1448727&r2=1448728&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/JcrImporter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/JcrImporter.java Thu Feb 21 17:24:27 2013
@@ -28,6 +28,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeState;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
 
 public class JcrImporter {
 
@@ -37,7 +38,7 @@ public class JcrImporter {
         this.writer = writer;
     }
 
-    public RecordId writeNode(Node node) throws RepositoryException {
+    public NodeState writeNode(Node node) throws RepositoryException {
         NodeBuilder builder =
                 new MemoryNodeBuilder(MemoryNodeState.EMPTY_NODE);
         buildNode(builder, node);

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MemoryStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MemoryStore.java?rev=1448728&r1=1448727&r2=1448728&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MemoryStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MemoryStore.java Thu Feb 21 17:24:27 2013
@@ -34,7 +34,7 @@ public class MemoryStore implements Segm
 
     public MemoryStore(NodeState root) {
         SegmentWriter writer = new SegmentWriter(this, new SegmentReader(this));
-        journals.put("root", writer.writeNode(root));
+        journals.put("root", writer.writeNode(root).getRecordId());
         writer.flush();
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MongoStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MongoStore.java?rev=1448728&r1=1448727&r2=1448728&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MongoStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/MongoStore.java Thu Feb 21 17:24:27 2013
@@ -46,7 +46,7 @@ public class MongoStore implements Segme
 
         if (journals.findOne(new BasicDBObject("_id", "root")) == null) {
             SegmentWriter writer = new SegmentWriter(this, new SegmentReader(this));
-            RecordId id = writer.writeNode(MemoryNodeState.EMPTY_NODE);
+            RecordId id = writer.writeNode(MemoryNodeState.EMPTY_NODE).getRecordId();
             writer.flush();
             journals.insert(new BasicDBObject(ImmutableMap.of(
                     "_id", "root", "head", id.toString())));

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java?rev=1448728&r1=1448727&r2=1448728&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java Thu Feb 21 17:24:27 2013
@@ -31,14 +31,6 @@ import org.apache.jackrabbit.oak.spi.sta
 
 class SegmentNodeState extends AbstractNodeState {
 
-    public static RecordId getRecordIdIfAvailable(NodeState state) {
-        if (state instanceof SegmentNodeState) {
-            SegmentNodeState sstate = (SegmentNodeState) state;
-            return sstate.recordId;
-        }
-        return null;
-    }
-
     private final SegmentReader reader;
 
     private final RecordId recordId;
@@ -50,6 +42,10 @@ class SegmentNodeState extends AbstractN
         this.recordId = checkNotNull(id);
     }
 
+    RecordId getRecordId() {
+        return recordId;
+    }
+
     private synchronized Template getTemplate() {
         if (template == null) {
             template = reader.readTemplate(reader.readRecordId(recordId, 0));

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java?rev=1448728&r1=1448727&r2=1448728&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java Thu Feb 21 17:24:27 2013
@@ -76,7 +76,7 @@ class SegmentNodeStoreBranch implements 
 
     @Override
     public synchronized void setRoot(NodeState newRoot) {
-        this.rootId = writer.writeNode(newRoot);
+        this.rootId = writer.writeNode(newRoot).getRecordId();
         writer.flush();
     }
 
@@ -168,7 +168,7 @@ class SegmentNodeStoreBranch implements 
                     new MemoryNodeBuilder(new SegmentNodeState(reader, newBaseId));
             getRoot().compareAgainstBaseState(getBase(), new RebaseDiff(builder));
             this.baseId = newBaseId;
-            this.rootId = writer.writeNode(builder.getNodeState());
+            this.rootId = writer.writeNode(builder.getNodeState()).getRecordId();
             writer.flush();
         }
     }
@@ -183,7 +183,7 @@ class SegmentNodeStoreBranch implements 
             // rebase to latest head and apply commit hooks
             rebase();
             RecordId headId = writer.writeNode(
-                    hook.processCommit(getBase(), getRoot()));
+                    hook.processCommit(getBase(), getRoot())).getRecordId();
             writer.flush();
 
             // use optimistic locking to update the journal

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java?rev=1448728&r1=1448727&r2=1448728&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentWriter.java Thu Feb 21 17:24:27 2013
@@ -630,10 +630,9 @@ public class SegmentWriter {
         return id;
     }
 
-    public RecordId writeNode(NodeState state) {
-        RecordId nodeId = SegmentNodeState.getRecordIdIfAvailable(state);
-        if (nodeId != null) {
-            return nodeId;
+    public SegmentNodeState writeNode(NodeState state) {
+        if (state instanceof SegmentNodeState) {
+            return (SegmentNodeState) state;
         }
 
         SegmentNodeState before = null;
@@ -661,12 +660,12 @@ public class SegmentWriter {
                 after.compareAgainstBaseState(before, new DefaultNodeStateDiff() {
                     @Override
                     public void childNodeAdded(String name, NodeState after) {
-                        childNodes.put(name, writeNode(after));
+                        childNodes.put(name, writeNode(after).getRecordId());
                     }
                     @Override
                     public void childNodeChanged(
                             String name, NodeState before, NodeState after) {
-                        childNodes.put(name, writeNode(after));
+                        childNodes.put(name, writeNode(after).getRecordId());
                     }
                     @Override
                     public void childNodeDeleted(String name, NodeState before) {
@@ -676,12 +675,14 @@ public class SegmentWriter {
             } else {
                 base = null;
                 for (ChildNodeEntry entry : state.getChildNodeEntries()) {
-                    childNodes.put(entry.getName(), writeNode(entry.getNodeState()));
+                    childNodes.put(
+                            entry.getName(),
+                            writeNode(entry.getNodeState()).getRecordId());
                 }
             }
             ids.add(writeMap(base, childNodes).getRecordId());
         } else if (!template.hasNoChildNodes()) {
-            ids.add(writeNode(state.getChildNode(template.getChildName())));
+            ids.add(writeNode(state.getChildNode(template.getChildName())).getRecordId());
         }
 
         for (PropertyTemplate property : template.getPropertyTemplates()) {
@@ -692,7 +693,7 @@ public class SegmentWriter {
         for (RecordId id : ids) {
             writeRecordId(id);
         }
-        return recordId;
+        return new SegmentNodeState(reader, recordId);
     }
 
 }