You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by th...@apache.org on 2012/02/14 10:02:36 UTC
svn commit: r1243833 - in /jackrabbit/sandbox/microkernel/src:
main/java/org/apache/jackrabbit/mk/mem/
test/java/org/apache/jackrabbit/mk/hash/
test/java/org/apache/jackrabbit/mk/large/
Author: thomasm
Date: Tue Feb 14 09:02:36 2012
New Revision: 1243833
URL: http://svn.apache.org/viewvc?rev=1243833&view=rev
Log:
Pseudo-property nodeVersion ; bugfix
Added:
jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/large/NodeVersionTest.java
Modified:
jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeImpl.java
jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeMap.java
jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/hash/HashTest.java
Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeImpl.java?rev=1243833&r1=1243832&r2=1243833&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeImpl.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeImpl.java Tue Feb 14 09:02:36 2012
@@ -60,6 +60,11 @@ public class NodeImpl implements Cache.V
public static final String HASH = ":hash";
/**
+ * The node version.
+ */
+ public static final String NODE_VERSION = ":nodeVersion";
+
+ /**
* Used when there are many child nodes.
* The id of an internal node.
*/
@@ -91,8 +96,8 @@ public class NodeImpl implements Cache.V
private long descendantCount;
private int descendantInlineCount;
private boolean hasMoreChildNodes;
-
private byte[] hash;
+ private String nodeVersion;
public NodeImpl(NodeMap map, long revId) {
this.map = map;
@@ -295,6 +300,9 @@ public class NodeImpl implements Cache.V
if (map.hash) {
json.key(HASH).value(StringUtils.convertBytesToHex(getHash()));
}
+ if (map.nodeVersion) {
+ json.key(NODE_VERSION).value(id.toString());
+ }
if (childNodes == null) {
if (childNodeCount) {
json.key(CHILREN_COUNT).value(0);
@@ -467,6 +475,9 @@ public class NodeImpl implements Cache.V
} else if (key.equals(HASH)) {
value = JsopTokenizer.decodeQuoted(value);
node.hash = StringUtils.convertHexToBytes(value);
+ } else if (key.equals(NODE_VERSION)) {
+ value = JsopTokenizer.decodeQuoted(value);
+ node.nodeVersion = value;
} else if (key.equals(DESCENDANT_COUNT)) {
node.descendantCount = Long.parseLong(value);
} else {
@@ -727,4 +738,8 @@ public class NodeImpl implements Cache.V
return hasMoreChildNodes;
}
+ public String getNodeVersion() {
+ return nodeVersion;
+ }
+
}
Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeMap.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeMap.java?rev=1243833&r1=1243832&r2=1243833&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeMap.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/mem/NodeMap.java Tue Feb 14 09:02:36 2012
@@ -29,6 +29,7 @@ public class NodeMap {
public static final String DESCENDANT_COUNT = "descendantCount";
public static final String DESCENDANT_INLINE_COUNT = "descendantInlineCount";
public static final String HASH = "hash";
+ public static final String NODE_VERSION = "nodeVersion";
private static final int DEFAULT_MAX_MEMORY_CHILDREN = Integer.MAX_VALUE;
@@ -38,6 +39,8 @@ public class NodeMap {
protected boolean hash;
+ protected boolean nodeVersion;
+
final HashMap<Long, NodeImpl> temp = new HashMap<Long, NodeImpl>();
private Map<Long, NodeImpl> nodes = Collections.synchronizedMap(new HashMap<Long, NodeImpl>());
private AtomicLong nextId = new AtomicLong();
@@ -78,6 +81,8 @@ public class NodeMap {
descendantInlineCount = Integer.parseInt(value);
} else if (key.equals(HASH)) {
hash = Boolean.parseBoolean(value);
+ } else if (key.equals(NODE_VERSION)) {
+ nodeVersion = Boolean.parseBoolean(value);
} else {
throw ExceptionFactory.get("Unknown setting: " + key);
}
@@ -179,4 +184,8 @@ public class NodeMap {
return hash;
}
+ public boolean getNodeVersion() {
+ return nodeVersion;
+ }
+
}
Modified: jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/hash/HashTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/hash/HashTest.java?rev=1243833&r1=1243832&r2=1243833&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/hash/HashTest.java (original)
+++ jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/hash/HashTest.java Tue Feb 14 09:02:36 2012
@@ -62,8 +62,8 @@ public class HashTest extends MultiMkTes
head = mk.commit("/", "+ \"test2\": { \"id\": 1 }", mk.getHeadRevision(), "");
NodeImpl r = NodeImpl.parse(mk.getNodes("/", head));
assertTrue(r.getHash() != null);
- NodeImpl t1 = NodeImpl.parse(mk.getNodes("/", head));
- NodeImpl t2 = NodeImpl.parse(mk.getNodes("/", head));
+ NodeImpl t1 = NodeImpl.parse(mk.getNodes("/test1", head));
+ NodeImpl t2 = NodeImpl.parse(mk.getNodes("/test2", head));
IOUtilsTest.assertEquals(t1.getHash(), t2.getHash());
assertFalse(Arrays.equals(t1.getHash(), r.getHash()));
}
Added: jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/large/NodeVersionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/large/NodeVersionTest.java?rev=1243833&view=auto
==============================================================================
--- jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/large/NodeVersionTest.java (added)
+++ jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/large/NodeVersionTest.java Tue Feb 14 09:02:36 2012
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.mk.large;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import org.apache.jackrabbit.mk.MultiMkTestBase;
+import org.apache.jackrabbit.mk.mem.NodeImpl;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+/**
+ * Test moving nodes.
+ */
+@RunWith(Parameterized.class)
+public class NodeVersionTest extends MultiMkTestBase {
+
+ private String head;
+
+ public NodeVersionTest(String url) {
+ super(url);
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ }
+
+ @After
+ public void tearDown() throws InterruptedException {
+ if (isSimpleKernel(mk)) {
+ head = mk.commit("/:root/head/config", "^ \"nodeVersion\": false", head, "");
+ head = mk.commit("/:root/head/config", "^ \"nodeVersion\": null", head, "");
+ }
+ super.tearDown();
+ }
+
+ @Test
+ public void nodeVersion() {
+ if (!isSimpleKernel(mk)) {
+ return;
+ }
+ String head = mk.getHeadRevision();
+ head = mk.commit("/:root/head/config", "^ \"nodeVersion\": true", head, "");
+
+ head = mk.commit("/", "+ \"test1\": { \"id\": 1 }", head, "");
+ head = mk.commit("/", "+ \"test2\": { \"id\": 1 }", head, "");
+
+ NodeImpl n = NodeImpl.parse(mk.getNodes("/", head));
+ String vra = n.getNodeVersion();
+ String v1a = n.getNode("test1").getNodeVersion();
+ String v2a = n.getNode("test2").getNodeVersion();
+
+ // changes the node version
+ head = mk.commit("/", "^ \"test2/id\": 2", head, "");
+
+ n = NodeImpl.parse(mk.getNodes("/", head));
+ String vrb = n.getNodeVersion();
+ String v1b = n.getNode("test1").getNodeVersion();
+ String v2b = n.getNode("test2").getNodeVersion();
+
+ assertFalse(vra.equals(vrb));
+ assertEquals(v1a, v1b);
+ assertFalse(v2a.equals(v2b));
+ }
+
+}