Author: mduerig
Date: Fri Nov 27 09:56:38 2015
New Revision: 1716816

URL: http://svn.apache.org/viewvc?rev=1716816&view=rev
Log:
OAK-1828: Improved SegmentWriter
Rename SegmentBuilder to SegmentBufferWriter

Added:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBufferWriter.java
      - copied, changed from r1716810, 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBuilder.java
Removed:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBuilder.java
Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/RecordWriters.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/SegmentIdFactoryTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/RecordWriters.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/RecordWriters.java?rev=1716816&r1=1716815&r2=1716816&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/RecordWriters.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/RecordWriters.java
 Fri Nov 27 09:56:38 2015
@@ -62,13 +62,13 @@ final class RecordWriters {
             this(type, size, Collections.<RecordId> emptyList());
         }
 
-        public final T write(SegmentBuilder builder) {
-            RecordId id = builder.prepare(type, size, ids);
-            return writeRecordContent(id, builder);
+        public final T write(SegmentBufferWriter writer) {
+            RecordId id = writer.prepare(type, size, ids);
+            return writeRecordContent(id, writer);
         }
 
         protected abstract T writeRecordContent(RecordId id,
-                SegmentBuilder builder);
+                SegmentBufferWriter writer);
     }
 
     public static RecordWriter<MapRecord> newMapLeafWriter(int level, 
Collection<MapEntry> entries) {
@@ -171,10 +171,10 @@ final class RecordWriters {
 
         @Override
         protected MapRecord writeRecordContent(RecordId id,
-                SegmentBuilder builder) {
+                SegmentBufferWriter writer) {
             if (entries != null) {
                 int size = entries.size();
-                builder.writeInt((level << SIZE_BITS) | size);
+                writer.writeInt((level << SIZE_BITS) | size);
 
                 // copy the entries to an array so we can sort them before
                 // writing
@@ -182,14 +182,14 @@ final class RecordWriters {
                 sort(array);
 
                 for (MapEntry entry : array) {
-                    builder.writeInt(entry.getHash());
+                    writer.writeInt(entry.getHash());
                 }
                 for (MapEntry entry : array) {
-                    builder.writeRecordId(entry.getKey());
-                    builder.writeRecordId(entry.getValue());
+                    writer.writeRecordId(entry.getKey());
+                    writer.writeRecordId(entry.getValue());
                 }
             } else {
-                builder.writeInt(0);
+                writer.writeInt(0);
             }
             return new MapRecord(id);
         }
@@ -223,12 +223,12 @@ final class RecordWriters {
         }
 
         @Override
-        protected MapRecord writeRecordContent(RecordId id, SegmentBuilder 
builder) {
+        protected MapRecord writeRecordContent(RecordId id, 
SegmentBufferWriter writer) {
             // -1 to encode a map diff (if level == 0 and entryCount == -1)
-            builder.writeInt((level << SIZE_BITS) | entryCount);
-            builder.writeInt(bitmap);
+            writer.writeInt((level << SIZE_BITS) | entryCount);
+            writer.writeInt(bitmap);
             for (RecordId mapId : ids) {
-                builder.writeRecordId(mapId);
+                writer.writeRecordId(mapId);
             }
             return new MapRecord(id);
         }
@@ -256,10 +256,10 @@ final class RecordWriters {
 
         @Override
         protected RecordId writeRecordContent(RecordId id,
-                SegmentBuilder builder) {
-            builder.writeInt(count);
+                SegmentBufferWriter writer) {
+            writer.writeInt(count);
             if (lid != null) {
-                builder.writeRecordId(lid);
+                writer.writeRecordId(lid);
             }
             return id;
         }
@@ -278,9 +278,9 @@ final class RecordWriters {
 
         @Override
         protected RecordId writeRecordContent(RecordId id,
-                SegmentBuilder builder) {
+                SegmentBufferWriter writer) {
             for (RecordId bucketId : ids) {
-                builder.writeRecordId(bucketId);
+                writer.writeRecordId(bucketId);
             }
             return id;
         }
@@ -303,8 +303,8 @@ final class RecordWriters {
 
         @Override
         protected RecordId writeRecordContent(RecordId id,
-                SegmentBuilder builder) {
-            builder.writeBytes(bytes, offset, size);
+                SegmentBufferWriter writer) {
+            writer.writeBytes(bytes, offset, size);
             return id;
         }
     }
@@ -326,9 +326,9 @@ final class RecordWriters {
 
         @Override
         protected RecordId writeRecordContent(RecordId id,
-                SegmentBuilder builder) {
-            builder.writeLong(len);
-            builder.writeRecordId(rid);
+                SegmentBufferWriter writer) {
+            writer.writeLong(len);
+            writer.writeRecordId(rid);
             return id;
         }
     }
@@ -364,13 +364,13 @@ final class RecordWriters {
         }
 
         @Override
-        protected RecordId writeRecordContent(RecordId id, SegmentBuilder 
builder) {
+        protected RecordId writeRecordContent(RecordId id, SegmentBufferWriter 
writer) {
             if (isSmallSize(length)) {
-                builder.writeByte((byte) length);
+                writer.writeByte((byte) length);
             } else {
-                builder.writeShort((short) ((length - SMALL_LIMIT) | 0x8000));
+                writer.writeShort((short) ((length - SMALL_LIMIT) | 0x8000));
             }
-            builder.writeBytes(data, 0, length);
+            writer.writeBytes(data, 0, length);
             return id;
         }
     }
@@ -393,13 +393,13 @@ final class RecordWriters {
 
         @Override
         protected RecordId writeRecordContent(RecordId id,
-                SegmentBuilder builder) {
+                SegmentBufferWriter writer) {
             // The length uses a fake "length" field that is always equal to
             // 0xF0.
             // This allows the code to take apart small from a large blob IDs.
-            builder.writeByte((byte) 0xF0);
-            builder.writeRecordId(stringRecord);
-            builder.addBlobRef(id);
+            writer.writeByte((byte) 0xF0);
+            writer.writeRecordId(stringRecord);
+            writer.addBlobRef(id);
             return id;
         }
     }
@@ -422,11 +422,11 @@ final class RecordWriters {
 
         @Override
         protected RecordId writeRecordContent(RecordId id,
-                SegmentBuilder builder) {
+                SegmentBufferWriter writer) {
             int length = blobId.length;
-            builder.writeShort((short) (length | 0xE000));
-            builder.writeBytes(blobId, 0, length);
-            builder.addBlobRef(id);
+            writer.writeShort((short) (length | 0xE000));
+            writer.writeBytes(blobId, 0, length);
+            writer.addBlobRef(id);
             return id;
         }
     }
@@ -461,30 +461,30 @@ final class RecordWriters {
 
         @Override
         protected RecordId writeRecordContent(RecordId id,
-                SegmentBuilder builder) {
-            builder.writeInt(head);
+                SegmentBufferWriter writer) {
+            writer.writeInt(head);
             if (primaryId != null) {
-                builder.writeRecordId(primaryId);
+                writer.writeRecordId(primaryId);
             }
             if (mixinIds != null) {
                 for (RecordId mixinId : mixinIds) {
-                    builder.writeRecordId(mixinId);
+                    writer.writeRecordId(mixinId);
                 }
             }
             if (childNameId != null) {
-                builder.writeRecordId(childNameId);
+                writer.writeRecordId(childNameId);
             }
             if (version.onOrAfter(V_11)) {
                 if (propNamesId != null) {
-                    builder.writeRecordId(propNamesId);
+                    writer.writeRecordId(propNamesId);
                 }
             }
             for (int i = 0; i < propertyNames.length; i++) {
                 if (!version.onOrAfter(V_11)) {
                     // V10 only
-                    builder.writeRecordId(propertyNames[i]);
+                    writer.writeRecordId(propertyNames[i]);
                 }
-                builder.writeByte(propertyTypes[i]);
+                writer.writeByte(propertyTypes[i]);
             }
             return id;
         }
@@ -501,9 +501,9 @@ final class RecordWriters {
 
         @Override
         protected SegmentNodeState writeRecordContent(RecordId id,
-                SegmentBuilder builder) {
+                SegmentBufferWriter writer) {
             for (RecordId recordId : ids) {
-                builder.writeRecordId(recordId);
+                writer.writeRecordId(recordId);
             }
             return new SegmentNodeState(id);
         }

Copied: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBufferWriter.java
 (from r1716810, 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBuilder.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBufferWriter.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBufferWriter.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBuilder.java&r1=1716810&r2=1716816&rev=1716816&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBuilder.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentBufferWriter.java
 Fri Nov 27 09:56:38 2015
@@ -53,17 +53,15 @@ import org.slf4j.LoggerFactory;
  * <p>
  * The common usage pattern is:
  * <pre>
- *    SegmentBuilder builder = ...
- *    builder.prepare(...)  // allocate buffer
- *    builder.writeXYZ(...)
+ *    SegmentBufferWriter writer = ...
+ *    writer.prepare(...)  // allocate buffer
+ *    writer.writeXYZ(...)
  * </pre>
  * The behaviour of this class is undefined should the pre-allocated buffer be
  * overrun be calling any of the write methods.
- *
- * TODO find a better name for SegmentBuilder
  */
-class SegmentBuilder {
-    private static final Logger LOG = 
LoggerFactory.getLogger(SegmentBuilder.class);
+class SegmentBufferWriter {
+    private static final Logger LOG = 
LoggerFactory.getLogger(SegmentBufferWriter.class);
 
     /**
      * The set of root records (i.e. ones not referenced by other records)
@@ -110,7 +108,7 @@ class SegmentBuilder {
      */
     private int position;
 
-    public SegmentBuilder(SegmentStore store, SegmentVersion version, String 
wid) {
+    public SegmentBufferWriter(SegmentStore store, SegmentVersion version, 
String wid) {
         this.store = store;
         this.version = version;
         this.wid = (wid == null

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=1716816&r1=1716815&r2=1716816&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
 Fri Nov 27 09:56:38 2015
@@ -88,7 +88,7 @@ public class SegmentWriter {
 
     static final int BLOCK_SIZE = 1 << 12; // 4kB
 
-    private final SegmentBuilderPool segmentBuilderPool = new 
SegmentBuilderPool();
+    private final SegmentBufferWriterPool segmentBufferWriterPool = new 
SegmentBufferWriterPool();
 
     /**
      * Cache of recently stored string and template records, used to
@@ -139,7 +139,7 @@ public class SegmentWriter {
     }
 
     public void flush() {
-        segmentBuilderPool.flush();
+        segmentBufferWriterPool.flush();
     }
 
     public void dropCache() {
@@ -776,51 +776,51 @@ public class SegmentWriter {
     }
 
     private <T> T writeRecord(RecordWriter<T> recordWriter) {
-        SegmentBuilder builder = 
segmentBuilderPool.borrowBuilder(currentThread());
+        SegmentBufferWriter writer = 
segmentBufferWriterPool.borrowWriter(currentThread());
         try {
-            return recordWriter.write(builder);
+            return recordWriter.write(writer);
         } finally {
-            segmentBuilderPool.returnBuilder(currentThread(), builder);
+            segmentBufferWriterPool.returnWriter(currentThread(), writer);
         }
     }
 
-    private class SegmentBuilderPool {
-        private final Set<SegmentBuilder> borrowed = newHashSet();
-        private final Map<Object, SegmentBuilder> builders = newHashMap();
+    private class SegmentBufferWriterPool {
+        private final Set<SegmentBufferWriter> borrowed = newHashSet();
+        private final Map<Object, SegmentBufferWriter> writers = newHashMap();
 
         public void flush() {
-            List<SegmentBuilder> toFlush = newArrayList();
+            List<SegmentBufferWriter> toFlush = newArrayList();
             synchronized (this) {
-                toFlush.addAll(builders.values());
-                builders.clear();
+                toFlush.addAll(writers.values());
+                writers.clear();
                 borrowed.clear();
             }
             // Call flush from outside a synchronized context to avoid
             // deadlocks of that method calling SegmentStore.writeSegment
-            for (SegmentBuilder builder : toFlush) {
-                builder.flush();
+            for (SegmentBufferWriter writer : toFlush) {
+                writer.flush();
             }
         }
 
-        public synchronized SegmentBuilder borrowBuilder(Object key) {
-            SegmentBuilder builder = builders.remove(key);
-            if (builder == null) {
-                builder = new SegmentBuilder(store, version, wid + "." + 
(key.hashCode() & 0xffff));
+        public synchronized SegmentBufferWriter borrowWriter(Object key) {
+            SegmentBufferWriter writer = writers.remove(key);
+            if (writer == null) {
+                writer = new SegmentBufferWriter(store, version, wid + "." + 
(key.hashCode() & 0xffff));
             }
-            borrowed.add(builder);
-            return builder;
+            borrowed.add(writer);
+            return writer;
         }
 
-        public void returnBuilder(Object key, SegmentBuilder builder) {
-            if (!tryReturn(key, builder)) {
-                // Delayed flush this builder as it was borrowed while flush() 
was called.
-                builder.flush();
+        public void returnWriter(Object key, SegmentBufferWriter writer) {
+            if (!tryReturn(key, writer)) {
+                // Delayed flush this writer as it was borrowed while flush() 
was called.
+                writer.flush();
             }
         }
 
-        private synchronized boolean tryReturn(Object key, SegmentBuilder 
builder) {
-            if (borrowed.remove(builder)) {
-                builders.put(key, builder);
+        private synchronized boolean tryReturn(Object key, SegmentBufferWriter 
writer) {
+            if (borrowed.remove(writer)) {
+                writers.put(key, writer);
                 return true;
             } else {
                 return false;

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentIdFactoryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentIdFactoryTest.java?rev=1716816&r1=1716815&r2=1716816&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentIdFactoryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentIdFactoryTest.java
 Fri Nov 27 09:56:38 2015
@@ -90,7 +90,7 @@ public class SegmentIdFactoryTest {
     @Test(expected = IllegalStateException.class)
     public void dataAIOOBE() {
         SegmentId id = factory.newDataSegmentId();
-        byte[] buffer = SegmentBuilder.createNewBuffer(SegmentVersion.V_11);
+        byte[] buffer = 
SegmentBufferWriter.createNewBuffer(SegmentVersion.V_11);
         ByteBuffer data = ByteBuffer.allocate(Segment.MAX_SEGMENT_SIZE);
         data.put(buffer);
         data.rewind();


Reply via email to