Author: mduerig
Date: Fri Nov 27 13:13:28 2015
New Revision: 1716870

URL: http://svn.apache.org/viewvc?rev=1716870&view=rev
Log:
OAK-3681: SegmentSizeTest.testAccessControlNodes() and testNodeSize() fail
- Make sure id of SegmentBufferWriter is always 4 characters in segment info
- Improve output of failing tests
- Adapt test expectations

Modified:
    
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/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=1716870&r1=1716869&r2=1716870&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 13:13:28 2015
@@ -32,6 +32,7 @@ import static com.google.common.collect.
 import static com.google.common.collect.Sets.newHashSet;
 import static com.google.common.io.ByteStreams.read;
 import static com.google.common.io.Closeables.close;
+import static java.lang.String.valueOf;
 import static java.lang.Thread.currentThread;
 import static java.util.Arrays.asList;
 import static java.util.Collections.emptyMap;
@@ -788,6 +789,8 @@ public class SegmentWriter {
         private final Set<SegmentBufferWriter> borrowed = newHashSet();
         private final Map<Object, SegmentBufferWriter> writers = newHashMap();
 
+        private short writerId = -1;
+
         public void flush() {
             List<SegmentBufferWriter> toFlush = newArrayList();
             synchronized (this) {
@@ -805,7 +808,7 @@ public class SegmentWriter {
         public synchronized SegmentBufferWriter borrowWriter(Object key) {
             SegmentBufferWriter writer = writers.remove(key);
             if (writer == null) {
-                writer = new SegmentBufferWriter(store, version, wid + "." + 
(key.hashCode() & 0xffff));
+                writer = new SegmentBufferWriter(store, version, wid + "." + 
getWriterId());
             }
             borrowed.add(writer);
             return writer;
@@ -826,6 +829,22 @@ public class SegmentWriter {
                 return false;
             }
         }
+
+        private synchronized String getWriterId() {
+            if (++writerId > 9999) {
+                writerId = 0;
+            }
+            // Manually padding seems to be fastest here
+            if (writerId < 10) {
+                return "000" + writerId;
+            } else if (writerId < 100) {
+                return "00" + writerId;
+            } else if (writerId < 1000) {
+                return "0" + writerId;
+            } else {
+                return valueOf(writerId);
+            }
+        }
     }
 
 }

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=1716870&r1=1716869&r2=1716870&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
 Fri Nov 27 13:13:28 2015
@@ -22,50 +22,49 @@ import static org.apache.jackrabbit.oak.
 import java.util.Calendar;
 import java.util.Collections;
 
+import com.google.common.collect.ImmutableList;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.plugins.segment.memory.MemoryStore;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.util.ISO8601;
-import org.junit.Ignore;
 import org.junit.Test;
 
-import com.google.common.collect.ImmutableList;
 
 /**
  * Test case for ensuring that segment size remains within bounds.
  */
 public class SegmentSizeTest {
 
-    @Ignore("OAK-3681")
     @Test
     public void testNodeSize() {
         NodeBuilder builder = EMPTY_NODE.builder();
-        assertEquals(112, getSize(builder));
-        assertEquals(4, getAmortizedSize(builder));
+        System.out.println("testNodeSize");
+        expectSize(96, builder);
+        expectAmortizedSize(4, builder);
 
         builder = EMPTY_NODE.builder();
         builder.setProperty("foo", "bar");
-        assertEquals(112, getSize(builder));
-        assertEquals(8, getAmortizedSize(builder));
+        expectSize(112, builder);
+        expectAmortizedSize(8, builder);
 
         builder = EMPTY_NODE.builder();
         builder.setProperty("foo", "bar");
         builder.setProperty("baz", 123);
-        assertEquals(144, getSize(builder));
-        assertEquals(16, getAmortizedSize(builder));
+        expectSize(128, builder);
+        expectAmortizedSize(16, builder);
 
         builder = EMPTY_NODE.builder();
         builder.child("foo");
-        assertEquals(128, getSize(builder));
-        assertEquals(12, getAmortizedSize(builder));
+        expectSize(128, builder);
+        expectAmortizedSize(12, builder);
 
         builder = EMPTY_NODE.builder();
         builder.child("foo");
         builder.child("bar");
-        assertEquals(160, getSize(builder));
-        assertEquals(40, getAmortizedSize(builder));
+        expectSize(144, builder);
+        expectAmortizedSize(40, builder);
     }
 
     @Test
@@ -116,29 +115,29 @@ public class SegmentSizeTest {
                 id2.getOffset() - id3.getOffset());
     }
 
-    @Ignore("OAK-3681")
     @Test
     public void testAccessControlNodes() {
         NodeBuilder builder = EMPTY_NODE.builder();
         builder.setProperty("jcr:primaryType", "rep:ACL", Type.NAME);
-        assertEquals(112, getSize(builder));
-        assertEquals(4, getAmortizedSize(builder));
+        System.out.println("testAccessControlNodes");
+        expectSize(96, builder);
+        expectAmortizedSize(4, builder);
 
         NodeBuilder deny = builder.child("deny");
         deny.setProperty("jcr:primaryType", "rep:DenyACE", Type.NAME);
         deny.setProperty("rep:principalName", "everyone");
         deny.setProperty(PropertyStates.createProperty(
                 "rep:privileges", ImmutableList.of("jcr:read"), Type.NAMES));
-        assertEquals(240, getSize(builder));
-        assertEquals(32, getAmortizedSize(builder));
+        expectSize(240, builder);
+        expectAmortizedSize(32, builder);
 
         NodeBuilder allow = builder.child("allow");
         allow.setProperty("jcr:primaryType", "rep:GrantACE");
         allow.setProperty("rep:principalName", "administrators");
         allow.setProperty(PropertyStates.createProperty(
                 "rep:privileges", ImmutableList.of("jcr:all"), Type.NAMES));
-        assertEquals(368, getSize(builder));
-        assertEquals(84, getAmortizedSize(builder));
+        expectSize(368, builder);
+        expectAmortizedSize(84, builder);
 
         NodeBuilder deny0 = builder.child("deny0");
         deny0.setProperty("jcr:primaryType", "rep:DenyACE", Type.NAME);
@@ -146,16 +145,16 @@ public class SegmentSizeTest {
         deny0.setProperty("rep:glob", "*/activities/*");
         builder.setProperty(PropertyStates.createProperty(
                 "rep:privileges", ImmutableList.of("jcr:read"), Type.NAMES));
-        assertEquals(480, getSize(builder));
-        assertEquals(124, getAmortizedSize(builder));
+        expectSize(464, builder);
+        expectAmortizedSize(124, builder);
 
         NodeBuilder allow0 = builder.child("allow0");
         allow0.setProperty("jcr:primaryType", "rep:GrantACE");
         allow0.setProperty("rep:principalName", "user-administrators");
         allow0.setProperty(PropertyStates.createProperty(
                 "rep:privileges", ImmutableList.of("jcr:all"), Type.NAMES));
-        assertEquals(544, getSize(builder));
-        assertEquals(160, getAmortizedSize(builder));
+        expectSize(528, builder);
+        expectAmortizedSize(160, builder);
     }
 
     @Test
@@ -183,19 +182,22 @@ public class SegmentSizeTest {
         assertEquals(560, segment.size());
     }
 
-    private int getSize(NodeBuilder builder) {
+    private static void expectSize(int expectedSize, NodeBuilder builder) {
         SegmentWriter writer = new MemoryStore().getTracker().getWriter();
         RecordId id = writer.writeNode(builder.getNodeState()).getRecordId();
         writer.flush();
-        return id.getSegment().size();
+        Segment segment = id.getSegment();
+        System.out.println(segment.getSegmentInfo());
+        assertEquals("Unexpected size of segment " + id + " info=" + 
segment.getSegmentInfo(),
+            expectedSize, segment.size());
     }
 
-    private int getAmortizedSize(NodeBuilder builder) {
+    private static void expectAmortizedSize(int expectedSize, NodeBuilder 
builder) {
         SegmentWriter writer = new MemoryStore().getTracker().getWriter();
         NodeState state = builder.getNodeState();
         RecordId id1 = writer.writeNode(state).getRecordId();
         RecordId id2 = writer.writeNode(state).getRecordId();
-        return id1.getOffset() - id2.getOffset();
+        assertEquals(expectedSize, id1.getOffset() - id2.getOffset());
     }
 
 }


Reply via email to