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 mr...@apache.org on 2013/04/04 12:20:49 UTC
svn commit: r1464417 - in /jackrabbit/oak/trunk/oak-mongomk/src:
main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java
test/java/org/apache/jackrabbit/mongomk/prototype/MongoMKDiffTest.java
Author: mreutegg
Date: Thu Apr 4 10:20:48 2013
New Revision: 1464417
URL: http://svn.apache.org/r1464417
Log:
OAK-619 Lock-free MongoMK implementation
- more MongoMK.diff() fixes
- Copied over and adapted MongoMKDiffTest from initial MongoDB based MicroKernel implementation
Added:
jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/MongoMKDiffTest.java
- copied, changed from r1464339, jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/impl/MongoMKDiffTest.java
Modified:
jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java
Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java?rev=1464417&r1=1464416&r2=1464417&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java Thu Apr 4 10:20:48 2013
@@ -573,6 +573,9 @@ public class MongoMK implements MicroKer
if (depth != 0) {
throw new MicroKernelException("Only depth 0 is supported, depth is " + depth);
}
+ if (path == null || path.equals("")) {
+ path = "/";
+ }
fromRevisionId = stripBranchRevMarker(fromRevisionId);
toRevisionId = stripBranchRevMarker(toRevisionId);
Node from = getNode(path, Revision.fromString(fromRevisionId));
@@ -587,13 +590,18 @@ public class MongoMK implements MicroKer
String fromValue = from.getProperty(p);
String toValue = to.getProperty(p);
if (!fromValue.equals(toValue)) {
- w.tag('^').key(p).value(toValue).newline();
+ w.tag('^').key(p);
+ if (toValue == null) {
+ w.value(toValue);
+ } else {
+ w.encodedValue(toValue).newline();
+ }
}
}
for (String p : to.getPropertyNames()) {
// added properties
if (from.getProperty(p) == null) {
- w.tag('^').key(p).value(to.getProperty(p)).newline();
+ w.tag('^').key(p).encodedValue(to.getProperty(p)).newline();
}
}
Revision fromRev = Revision.fromString(fromRevisionId);
@@ -605,7 +613,7 @@ public class MongoMK implements MicroKer
Set<String> childrenSet = new HashSet<String>(toChildren.children);
for (String n : fromChildren.children) {
if (!childrenSet.contains(n)) {
- w.tag('-').key(n).newline();
+ w.tag('-').value(n).newline();
} else {
Node n1 = getNode(n, fromRev);
Node n2 = getNode(n, toRev);
Copied: jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/MongoMKDiffTest.java (from r1464339, jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/impl/MongoMKDiffTest.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/MongoMKDiffTest.java?p2=jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/MongoMKDiffTest.java&p1=jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/impl/MongoMKDiffTest.java&r1=1464339&r2=1464417&rev=1464417&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/impl/MongoMKDiffTest.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/MongoMKDiffTest.java Thu Apr 4 10:20:48 2013
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.jackrabbit.mongomk.impl;
+package org.apache.jackrabbit.mongomk.prototype;
-import org.apache.jackrabbit.mongomk.BaseMongoMicroKernelTest;
import org.json.simple.JSONObject;
+import org.junit.Ignore;
import org.junit.Test;
import static org.junit.Assert.assertFalse;
@@ -27,7 +27,7 @@ import static org.junit.Assert.assertTru
/**
* Tests for MicroKernel#diff
*/
-public class MongoMKDiffTest extends BaseMongoMicroKernelTest {
+public class MongoMKDiffTest extends BaseMongoMKTest {
@Test
public void oak_596() {
@@ -35,8 +35,8 @@ public class MongoMKDiffTest extends Bas
String rev2 = mk.commit("/", "^\"node1/node2/prop1\":\"val1 new\" ^\"node1/node2/prop2\":null", null, null);
String diff = mk.diff(rev1, rev2, "/node1/node2", 0);
- assertTrue(diff.contains("^\"/node1/node2/prop2\":null"));
- assertTrue(diff.contains("^\"/node1/node2/prop1\":\"val1 new\""));
+ assertTrue(diff.contains("^\"prop2\":null"));
+ assertTrue(diff.contains("^\"prop1\":\"val1 new\""));
}
@Test
@@ -46,7 +46,7 @@ public class MongoMKDiffTest extends Bas
String rev1 = mk.commit("/", "+\"level1\":{}", null, null);
assertTrue(mk.nodeExists("/level1", null));
- String reverseDiff = mk.diff(rev1, rev0, null, -1);
+ String reverseDiff = mk.diff(rev1, rev0, null, 0);
assertNotNull(reverseDiff);
assertTrue(reverseDiff.length() > 0);
@@ -63,7 +63,7 @@ public class MongoMKDiffTest extends Bas
assertTrue(mk.nodeExists("/level1", null));
assertTrue(mk.nodeExists("/level1/level2", null));
- String reverseDiff = mk.diff(rev1, rev0, null, -1);
+ String reverseDiff = mk.diff(rev1, rev0, null, 0);
assertNotNull(reverseDiff);
assertTrue(reverseDiff.length() > 0);
@@ -81,7 +81,7 @@ public class MongoMKDiffTest extends Bas
assertTrue(mk.nodeExists("/level1a", null));
assertTrue(mk.nodeExists("/level1b", null));
- String reverseDiff = mk.diff(rev1, rev0, null, -1);
+ String reverseDiff = mk.diff(rev1, rev0, null, 0);
assertNotNull(reverseDiff);
assertTrue(reverseDiff.length() > 0);
@@ -91,6 +91,7 @@ public class MongoMKDiffTest extends Bas
}
@Test
+ @Ignore("New MongoMK only supports depth 0")
public void removePath() {
// Add level1 & level1/level2
String rev0 = mk.commit("/","+\"level1\":{}" +
@@ -104,7 +105,7 @@ public class MongoMKDiffTest extends Bas
assertFalse(mk.nodeExists("/level1/level2", null));
// Generate reverseDiff from rev1 to rev0
- String reverseDiff = mk.diff(rev1, rev0, null, -1);
+ String reverseDiff = mk.diff(rev1, rev0, "/level1", 0);
assertNotNull(reverseDiff);
assertTrue(reverseDiff.length() > 0);
@@ -113,13 +114,13 @@ public class MongoMKDiffTest extends Bas
assertTrue(mk.nodeExists("/level1", null));
assertTrue(mk.nodeExists("/level1/level2", null));
- // Remove level1 at rev0
- String rev2 = mk.commit("/", "-\"level1\"", rev0, null);
+ // Remove level1
+ String rev2 = mk.commit("/", "-\"level1\"", null, null);
assertFalse(mk.nodeExists("/level1", null));
assertFalse(mk.nodeExists("/level1/level2", null));
// Generate reverseDiff from rev2 to rev0
- reverseDiff = mk.diff(rev2, rev0, null, -1);
+ reverseDiff = mk.diff(rev2, rev0, null, 1);
assertNotNull(reverseDiff);
assertTrue(reverseDiff.length() > 0);
@@ -130,6 +131,7 @@ public class MongoMKDiffTest extends Bas
}
@Test
+ @Ignore("New MongoMK only supports depth 0")
public void movePath() {
String rev1 = mk.commit("/", "+\"level1\":{}", null, null);
rev1 = mk.commit("/", "+\"level1/level2\":{}", null, null);
@@ -141,7 +143,7 @@ public class MongoMKDiffTest extends Bas
assertTrue(mk.nodeExists("/level1new", null));
assertTrue(mk.nodeExists("/level1new/level2", null));
- String reverseDiff = mk.diff(rev2, rev1, null, -1);
+ String reverseDiff = mk.diff(rev2, rev1, null, 1);
assertNotNull(reverseDiff);
assertTrue(reverseDiff.length() > 0);
@@ -164,7 +166,7 @@ public class MongoMKDiffTest extends Bas
assertTrue(mk.nodeExists("/level1new", null));
assertTrue(mk.nodeExists("/level1new/level2", null));
- String reverseDiff = mk.diff(rev2, rev1, null, -1);
+ String reverseDiff = mk.diff(rev2, rev1, null, 0);
assertNotNull(reverseDiff);
assertTrue(reverseDiff.length() > 0);
@@ -182,18 +184,18 @@ public class MongoMKDiffTest extends Bas
// Add property.
String rev1 = mk.commit("/", "^\"level1/prop1\": \"value1\"", null, null);
- JSONObject obj = parseJSONObject(mk.getNodes("/level1", null, 1, 0, -1, null));
+ JSONObject obj = parseJSONObject(mk.getNodes("/level1", null, 0, 0, -1, null));
assertPropertyExists(obj, "prop1");
// Generate reverseDiff from rev1 to rev0
- String reverseDiff = mk.diff(rev1, rev0, null, -1);
+ String reverseDiff = mk.diff(rev1, rev0, "/level1", 0);
assertNotNull(reverseDiff);
assertTrue(reverseDiff.length() > 0);
// Commit the reverseDiff and check property is gone.
- mk.commit("", reverseDiff, null, null);
+ mk.commit("/level1", reverseDiff, null, null);
assertTrue(mk.nodeExists("/level1", null));
- obj = parseJSONObject(mk.getNodes("/level1", null, 1, 0, -1, null));
+ obj = parseJSONObject(mk.getNodes("/level1", null, 0, 0, -1, null));
assertPropertyNotExists(obj, "prop1");
}
@@ -201,23 +203,23 @@ public class MongoMKDiffTest extends Bas
public void removeProperty() {
String rev0 = mk.commit("/", "+\"level1\":{ \"prop1\" : \"value\"}", null, null);
assertTrue(mk.nodeExists("/level1", null));
- JSONObject obj = parseJSONObject(mk.getNodes("/level1", null, 1, 0, -1, null));
+ JSONObject obj = parseJSONObject(mk.getNodes("/level1", null, 0, 0, -1, null));
assertPropertyExists(obj, "prop1");
// Remove property
String rev1 = mk.commit("/", "^\"level1/prop1\" : null", null, null);
assertTrue(mk.nodeExists("/level1", null));
- obj = parseJSONObject(mk.getNodes("/level1", null, 1, 0, -1, null));
+ obj = parseJSONObject(mk.getNodes("/level1", null, 0, 0, -1, null));
assertPropertyNotExists(obj, "prop1");
// Generate reverseDiff from rev1 to rev0
- String reverseDiff = mk.diff(rev1, rev0, null, -1);
+ String reverseDiff = mk.diff(rev1, rev0, "/level1", 0);
assertNotNull(reverseDiff);
assertTrue(reverseDiff.length() > 0);
// Commit the reverseDiff and check property is added back.
- mk.commit("", reverseDiff, null, null);
- obj = parseJSONObject(mk.getNodes("/level1", null, 1, 0, -1, null));
+ mk.commit("/level1", reverseDiff, null, null);
+ obj = parseJSONObject(mk.getNodes("/level1", null, 0, 0, -1, null));
assertPropertyExists(obj, "prop1");
}
@@ -225,22 +227,22 @@ public class MongoMKDiffTest extends Bas
public void changeProperty() {
String rev0 = mk.commit("/", "+\"level1\":{ \"prop1\" : \"value1\"}", null, null);
assertTrue(mk.nodeExists("/level1", null));
- JSONObject obj = parseJSONObject(mk.getNodes("/level1", null, 1, 0, -1, null));
+ JSONObject obj = parseJSONObject(mk.getNodes("/level1", null, 0, 0, -1, null));
assertPropertyValue(obj, "prop1", "value1");
// Change property
String rev1 = mk.commit("/", "^\"level1/prop1\" : \"value2\"", null, null);
- obj = parseJSONObject(mk.getNodes("/level1", null, 1, 0, -1, null));
+ obj = parseJSONObject(mk.getNodes("/level1", null, 0, 0, -1, null));
assertPropertyValue(obj, "prop1", "value2");
// Generate reverseDiff from rev1 to rev0
- String reverseDiff = mk.diff(rev1, rev0, null, -1);
+ String reverseDiff = mk.diff(rev1, rev0, "/level1", 0);
assertNotNull(reverseDiff);
assertTrue(reverseDiff.length() > 0);
// Commit the reverseDiff and check property is set back.
- mk.commit("", reverseDiff, null, null);
- obj = parseJSONObject(mk.getNodes("/level1", null, 1, 0, -1, null));
+ mk.commit("/level1", reverseDiff, null, null);
+ obj = parseJSONObject(mk.getNodes("/level1", null, 0, 0, -1, null));
assertPropertyValue(obj, "prop1", "value1");
}
}
\ No newline at end of file