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/03/06 22:00:15 UTC

svn commit: r1453556 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/segment/ test/java/org/apache/jackrabbit/oak/plugins/segment/

Author: jukka
Date: Wed Mar  6 21:00:15 2013
New Revision: 1453556

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

Avoid rewriting templates if there are no changes to node structure

Modified:
    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/SegmentWriter.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentSizeTest.java

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=1453556&r1=1453555&r2=1453556&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 Wed Mar  6 21:00:15 2013
@@ -35,6 +35,8 @@ class SegmentNodeState extends AbstractN
 
     private final RecordId recordId;
 
+    private RecordId templateId = null;
+
     private Template template = null;
 
     SegmentNodeState(SegmentStore store, RecordId id) {
@@ -46,10 +48,15 @@ class SegmentNodeState extends AbstractN
         return recordId;
     }
 
-    private synchronized Template getTemplate() {
+    RecordId getTemplateId() {
+        getTemplate(); // force loading of the template
+        return templateId;
+    }
+
+    synchronized Template getTemplate() {
         if (template == null) {
             Segment segment = store.readSegment(recordId.getSegmentId());
-            RecordId templateId = segment.readRecordId(recordId.getOffset());
+            templateId = segment.readRecordId(recordId.getOffset());
             template = segment.readTemplate(templateId);
         }
         return template;

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=1453556&r1=1453555&r2=1453556&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 Wed Mar  6 21:00:15 2013
@@ -642,9 +642,15 @@ public class SegmentWriter {
         }
 
         Template template = new Template(state);
+        RecordId templateId;
+        if (before != null && template.equals(before.getTemplate())) {
+            templateId = before.getTemplateId();
+        } else {
+            templateId = writeTemplate(template);
+        }
 
         List<RecordId> ids = Lists.newArrayList();
-        ids.add(writeTemplate(template));
+        ids.add(templateId);
 
         if (template.hasManyChildNodes()) {
             MapRecord base;

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentSizeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentSizeTest.java?rev=1453556&r1=1453555&r2=1453556&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentSizeTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentSizeTest.java Wed Mar  6 21:00:15 2013
@@ -162,7 +162,7 @@ public class SegmentSizeTest {
         state = writer.writeNode(builder.getNodeState());
         writer.flush();
         segment = store.readSegment(state.getRecordId().getSegmentId());
-        assertEquals(260, segment.getData().length);
+        assertEquals(256, segment.getData().length);
     }
 
     private int getSize(NodeBuilder builder) {