You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2010/09/30 10:27:58 UTC

svn commit: r1002960 - in /jackrabbit/trunk/jackrabbit-core/src: main/java/org/apache/jackrabbit/core/persistence/util/ main/java/org/apache/jackrabbit/core/value/ test/java/org/apache/jackrabbit/core/persistence/util/

Author: jukka
Date: Thu Sep 30 08:27:58 2010
New Revision: 1002960

URL: http://svn.apache.org/viewvc?rev=1002960&view=rev
Log:
JCR-2762: Optimize bundle serialization

Include serialized bundle byte patterns in the test case.

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/util/BundleBindingTest.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/util/TestAll.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java?rev=1002960&r1=1002959&r2=1002960&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java Thu Sep 30 08:27:58 2010
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.core.persistence.util;
 
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -511,6 +512,16 @@ public class NodePropBundle {
         public NodeId getId() {
             return id;
         }
+
+        public boolean equals(Object object) {
+            if (object instanceof ChildNodeEntry) {
+                ChildNodeEntry that = (ChildNodeEntry) object;
+                return name.equals(that.name) && id.equals(that.id);
+            } else {
+                return false;
+            }
+        }
+
     }
 
     //------------------------------------------------------< PropertyEntry >---
@@ -699,6 +710,18 @@ public class NodePropBundle {
             }
         }
 
+        public boolean equals(Object object) {
+            if (object instanceof PropertyEntry) {
+                PropertyEntry that = (PropertyEntry) object;
+                return id.equals(that.id)
+                    && type == that.type
+                    && multiValued == that.multiValued
+                    && Arrays.equals(values, that.values);
+            } else {
+                return false;
+            }
+        }
+
     }
 
 }

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java?rev=1002960&r1=1002959&r2=1002960&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/value/InternalValue.java Thu Sep 30 08:27:58 2010
@@ -49,7 +49,6 @@ import org.apache.jackrabbit.spi.commons
 import org.apache.jackrabbit.spi.commons.value.AbstractQValueFactory;
 import org.apache.jackrabbit.spi.commons.value.QValueValue;
 import org.apache.jackrabbit.util.ISO8601;
-import org.apache.commons.io.IOUtils;
 
 /**
  * <code>InternalValue</code> represents the internal format of a property value.
@@ -706,4 +705,13 @@ public class InternalValue extends Abstr
         }
     }
 
+    public boolean equals(Object object) {
+        if (object instanceof InternalValue) {
+            InternalValue that = (InternalValue) object;
+            return type == that.type && val.equals(that.val);
+        } else {
+            return false;
+        }
+    }
+
 }

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/util/BundleBindingTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/util/BundleBindingTest.java?rev=1002960&r1=1002959&r2=1002960&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/util/BundleBindingTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/util/BundleBindingTest.java Thu Sep 30 08:27:58 2010
@@ -18,9 +18,17 @@ package org.apache.jackrabbit.core.persi
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.util.Arrays;
+import java.util.Calendar;
 import java.util.Collections;
+import java.util.HashSet;
+
+import javax.jcr.PropertyType;
 
 import org.apache.jackrabbit.core.id.NodeId;
+import org.apache.jackrabbit.core.id.PropertyId;
+import org.apache.jackrabbit.core.persistence.util.NodePropBundle.PropertyEntry;
+import org.apache.jackrabbit.core.value.InternalValue;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.commons.name.NameConstants;
 
@@ -37,11 +45,69 @@ public class BundleBindingTest extends T
 
     public void testEmptyBundle() throws Exception {
         NodePropBundle bundle = new NodePropBundle(new NodeId());
-        bundle.setParentId(new NodeId());
+        bundle.setParentId(new NodeId(1, 2));
         bundle.setNodeTypeName(NameConstants.NT_UNSTRUCTURED);
         bundle.setMixinTypeNames(Collections.<Name>emptySet());
         bundle.setSharedSet(Collections.<NodeId>emptySet());
+
         assertBundleRoundtrip(bundle);
+
+        assertBundleSerialization(bundle, new byte[] {
+                2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+                0, 0, 0, 0, 0, 2, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1,
+                0, 0, 0, 0, 0 });
+    }
+
+    public void testComplexBundle() throws Exception {
+        NodeId id = new NodeId(1, 2);
+        NodePropBundle bundle = new NodePropBundle(id);
+        bundle.setParentId(new NodeId(3, 4));
+        bundle.setNodeTypeName(NameConstants.NT_UNSTRUCTURED);
+        bundle.setMixinTypeNames(Collections.singleton(
+                NameConstants.MIX_CREATED));
+        bundle.setReferenceable(true);
+        bundle.setSharedSet(new HashSet<NodeId>(Arrays.asList(
+                new NodeId(5, 6), new NodeId(7, 8), new NodeId(9, 10))));
+
+        PropertyEntry created = new PropertyEntry(
+                new PropertyId(id, NameConstants.JCR_CREATED));
+        created.setType(PropertyType.DATE);
+        created.setMultiValued(false);
+        Calendar date = Calendar.getInstance();
+        date.setTimeInMillis(1234567890);
+        created.setValues(new InternalValue[] { InternalValue.create(date) });
+        bundle.addProperty(created);
+
+        PropertyEntry createdby = new PropertyEntry(
+                new PropertyId(id, NameConstants.JCR_CREATEDBY));
+        createdby.setType(PropertyType.STRING);
+        createdby.setMultiValued(false);
+        createdby.setValues(new InternalValue[] {
+                InternalValue.create("test") });
+        bundle.addProperty(createdby);
+
+        bundle.addChildNodeEntry(
+                NameConstants.JCR_SYSTEM, new NodeId(11, 12));
+        bundle.addChildNodeEntry(
+                NameConstants.JCR_VERSIONSTORAGE, new NodeId(13, 14));
+
+        assertBundleRoundtrip(bundle);
+
+        assertBundleSerialization(bundle, new byte[] {
+                2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+                0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, -1, -1, -1, -1,
+                0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0,
+                0, 0, 4, 116, 101, 115, 116, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0,
+                5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 29, 49, 57, 55, 48, 45, 48,
+                49, 45, 49, 53, 84, 48, 55, 58, 53, 54, 58, 48, 55, 46, 56,
+                57, 48, 43, 48, 49, 58, 48, 48, -1, -1, -1, -1, 1, 1, 0, 0,
+                0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 2, 0, 6,
+                115, 121, 115, 116, 101, 109, 1, 0, 0, 0, 0, 0, 0, 0, 13, 0,
+                0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 2, 0, 14, 118, 101, 114, 115,
+                105, 111, 110, 83, 116, 111, 114, 97, 103, 101, 0, 0, 0, 1,
+                0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 1, 0, 0, 0,
+                0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 0, 0,
+                0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0 });
     }
 
     private void assertBundleRoundtrip(NodePropBundle bundle)
@@ -55,4 +121,13 @@ public class BundleBindingTest extends T
         assertEquals(bundle, binding.readBundle(
                 new ByteArrayInputStream(bytes), bundle.getId()));
     }
+
+    private void assertBundleSerialization(NodePropBundle bundle, byte[] data)
+            throws Exception {
+        assertTrue(binding.checkBundle(new ByteArrayInputStream(data)));
+
+        assertEquals(bundle, binding.readBundle(
+                new ByteArrayInputStream(data), bundle.getId()));
+    }
+
 }

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/util/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/util/TestAll.java?rev=1002960&r1=1002959&r2=1002960&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/util/TestAll.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/persistence/util/TestAll.java Thu Sep 30 08:27:58 2010
@@ -26,6 +26,7 @@ public class TestAll extends TestCase {
         TestSuite suite = new TestSuite("Persistence utility tests");
 
         suite.addTestSuite(HashMapIndexTest.class);
+        suite.addTestSuite(BundleBindingTest.class);
 
         return suite;
     }