Index: oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/command/InconsistentNodeHierarchyException.java =================================================================== --- oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/command/InconsistentNodeHierarchyException.java (revision 0) +++ oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/command/InconsistentNodeHierarchyException.java (working copy) @@ -0,0 +1,7 @@ +package org.apache.jackrabbit.mongomk.command; + +public class InconsistentNodeHierarchyException extends Exception { + + private static final long serialVersionUID = 6361719178625761034L; + +} Property changes on: oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/command/InconsistentNodeHierarchyException.java ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: oak-mongomk/src/test/resources/logback-test.xml =================================================================== --- oak-mongomk/src/test/resources/logback-test.xml (revision 0) +++ oak-mongomk/src/test/resources/logback-test.xml (working copy) @@ -0,0 +1,39 @@ + + + + + + %date{HH:mm:ss.SSS} %-5level %-40([%thread] %F:%L) %msg%n + + + + + target/unit-tests.log + + %date{HH:mm:ss.SSS} %-5level %-40([%thread] %F:%L) %msg%n + + + + + + + + + Property changes on: oak-mongomk/src/test/resources/logback-test.xml ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/BaseMongoTest.java =================================================================== --- oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/BaseMongoTest.java (revision 1389420) +++ oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/BaseMongoTest.java (working copy) @@ -21,7 +21,6 @@ import org.apache.jackrabbit.mongomk.MongoConnection; import org.apache.jackrabbit.mongomk.util.MongoUtil; -import org.apache.log4j.BasicConfigurator; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -40,7 +39,6 @@ @BeforeClass public static void setUpBeforeClass() throws Exception { - BasicConfigurator.configure(); createDefaultMongoConnection(); MongoAssert.setMongoConnection(mongoConnection); } Index: oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/model/CommitCommandInstructionVisitor.java =================================================================== --- oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/model/CommitCommandInstructionVisitor.java (revision 1389420) +++ oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/model/CommitCommandInstructionVisitor.java (working copy) @@ -17,8 +17,11 @@ package org.apache.jackrabbit.mongomk.model; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; import org.apache.jackrabbit.mongomk.MongoConnection; import org.apache.jackrabbit.mongomk.api.model.Instruction.AddNodeInstruction; @@ -50,18 +53,14 @@ @Override public void visit(AddNodeInstruction instruction) { -// Old code -// String path = instruction.getPath(); -// getStagedNode(path); -// if (!PathUtils.denotesRoot(path)) { -// String parentPath = PathUtils.getParentPath(path); -// NodeMongo parentNode = getStagedNode(parentPath); -// parentNode.addChild(PathUtils.getName(path)); -// } - String path = instruction.getPath(); getStagedNode(path); + String nodeName = PathUtils.getName(path); + if (nodeName.isEmpty()) { + return; + } + String parentNodePath = PathUtils.getParentPath(path); NodeMongo parent = null; if (!PathUtils.denotesRoot(parentNodePath)) { @@ -69,10 +68,9 @@ if (parent == null) { throw new RuntimeException("No such parent: " + PathUtils.getName(parentNodePath)); } - // FIXME [Mete] Add once tests are fixed. - //if (parent.childExists(nodeName)) { - // throw new RuntimeException("There's already a child node with name '" + nodeName + "'"); - //} + if (parent.childExists(nodeName)) { + throw new RuntimeException("There's already a child node with name '" + nodeName + "'"); + } } else { parent = getStagedNode(parentNodePath); } @@ -192,9 +190,27 @@ NodeMongo srcNode = getStoredNode(srcPath); destNode = srcNode; destNode.setPath(destPath); + pathNodeMap.remove(srcPath); pathNodeMap.put(destPath, destNode); } + // [Mete] Check that this works in all cases. + // Remove all the pending old node child changes. + Map pendingChanges = new HashMap(); + for (Iterator> iterator = pathNodeMap.entrySet().iterator(); iterator.hasNext();) { + Entry entry = iterator.next(); + String path = entry.getKey(); + NodeMongo node = entry.getValue(); + if (path.startsWith(srcPath)) { + iterator.remove(); + String newPath = destPath + path.substring(srcPath.length()); + node.setPath(newPath); + pendingChanges.put(newPath, node); + } + } + pathNodeMap.putAll(pendingChanges); + + // Remove from srcParent - [Mete] What if there is no such child? NodeMongo scrParentNode = getStoredNode(srcParentPath); scrParentNode.removeChild(srcNodeName); @@ -213,8 +229,11 @@ public void visit(RemoveNodeInstruction instruction) { String path = instruction.getPath(); String parentPath = PathUtils.getParentPath(path); - NodeMongo parentNode = getStagedNode(parentPath); - // [Mete] What if there is no such child? + NodeMongo parentNode = getStoredNode(parentPath); + String childName = PathUtils.getName(path); + if (!parentNode.childExists(childName)) { + throw new RuntimeException(path); + } parentNode.removeChild(PathUtils.getName(path)); } Index: oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/command/CommitCommandMongo.java =================================================================== --- oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/command/CommitCommandMongo.java (revision 1389420) +++ oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/command/CommitCommandMongo.java (working copy) @@ -36,7 +36,8 @@ import org.apache.jackrabbit.mongomk.query.SaveAndSetHeadRevisionQuery; import org.apache.jackrabbit.mongomk.query.SaveCommitQuery; import org.apache.jackrabbit.mongomk.query.SaveNodesQuery; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.mongodb.BasicDBObject; import com.mongodb.DBCollection; @@ -51,7 +52,7 @@ */ public class CommitCommandMongo extends AbstractCommand { - private static final Logger logger = Logger.getLogger(CommitCommandMongo.class); + private static final Logger logger = LoggerFactory.getLogger(CommitCommandMongo.class); private final Commit commit; private final MongoConnection mongoConnection; Index: oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/command/CommitCommandMongoTest.java =================================================================== --- oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/command/CommitCommandMongoTest.java (revision 1389420) +++ oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/command/CommitCommandMongoTest.java (working copy) @@ -32,6 +32,7 @@ import org.apache.jackrabbit.mongomk.impl.model.CommitImpl; import org.apache.jackrabbit.mongomk.impl.model.RemoveNodeInstructionImpl; import org.apache.jackrabbit.mongomk.scenario.SimpleNodeScenario; +import org.apache.jackrabbit.mongomk.util.MongoUtil; import org.apache.jackrabbit.oak.commons.PathUtils; import org.junit.Assert; import org.junit.Ignore; @@ -77,7 +78,7 @@ } @Test - public void commitAddNodes() throws Exception { + public void addNodes() throws Exception { List instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/", "a")); instructions.add(new AddNodeInstructionImpl("/a", "b")); @@ -99,7 +100,29 @@ } @Test - public void commitAddNodesAndPropertiesOutOfOrder() throws Exception { + public void addDuplicateNode() throws Exception { + // Add /a and /a/b + List instructions = new LinkedList(); + instructions.add(new AddNodeInstructionImpl("/", "a")); + instructions.add(new AddNodeInstructionImpl("/a", "b")); + Commit commit = new CommitImpl("/", "+a : { \"b\" : {} }", "Add /a, /a/b", instructions); + CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); + command.execute(); + + // Add /a/b again + instructions = new LinkedList(); + instructions.add(new AddNodeInstructionImpl("/a", "b")); + commit = new CommitImpl("/a", "+b", "Add /a/b", instructions); + command = new CommitCommandMongo(mongoConnection, commit); + try { + command.execute(); + fail("Exception expected"); + } catch (Exception expected) { + } + } + + @Test + public void addNodesAndPropertiesOutOfOrder() throws Exception { List instructions = new LinkedList(); instructions.add(new AddPropertyInstructionImpl("/a", "key1", "value1")); instructions.add(new AddNodeInstructionImpl("/", "a")); @@ -129,7 +152,7 @@ } @Test - public void commitAddNodesWhichAlreadyExist() throws Exception { + public void addNodesWhichAlreadyExist() throws Exception { SimpleNodeScenario scenario1 = new SimpleNodeScenario(mongoConnection); scenario1.create(); @@ -230,7 +253,6 @@ } @Test - @Ignore // FIXME public void removeNonExistentNode() throws Exception { List instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("/", "a")); @@ -368,18 +390,18 @@ } @Test - @Ignore /// FIXME public void rootNodeHasEmptyRootPath() throws Exception { List instructions = new LinkedList(); instructions.add(new AddNodeInstructionImpl("", "/")); - Commit commit = new CommitImpl("", "+/ : {}", "This is the root commit", instructions); + Commit commit = new CommitImpl(MongoUtil.INITIAL_COMMIT_PATH, MongoUtil.INITIAL_COMMIT_DIFF, + MongoUtil.INITIAL_COMMIT_MESSAGE, instructions); CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); String revisionId = command.execute(); - Assert.assertNotNull(revisionId); - MongoAssert.assertNodesExist("", - NodeBuilder.build(String.format("{ \"/#%1$s\" : {} }", revisionId))); + + Node expected = NodeBuilder.build(String.format("{ \"/#%1$s\" : {} }", revisionId)); + MongoAssert.assertNodesExist(MongoUtil.INITIAL_COMMIT_PATH, expected); } @Test Index: oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/model/CommitMongo.java =================================================================== --- oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/model/CommitMongo.java (revision 1389420) +++ oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/model/CommitMongo.java (working copy) @@ -86,7 +86,7 @@ @SuppressWarnings("unchecked") public List getAffectedPaths() { - return (List) this.get(KEY_AFFECTED_PATH); + return (List) get(KEY_AFFECTED_PATH); } public long getBaseRevisionId() { @@ -110,7 +110,7 @@ } public boolean hasFailed() { - return this.getBoolean(KEY_FAILED); + return getBoolean(KEY_FAILED); } public void setAffectedPaths(List affectedPaths) { @@ -142,7 +142,7 @@ } public void setRevisionId(String revisionId) { - this.setRevisionId(MongoUtil.toMongoRepresentation(revisionId)); + setRevisionId(MongoUtil.toMongoRepresentation(revisionId)); } public void setTimestamp(long timestamp) { Index: oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/query/FetchNodesByPathAndDepthQuery.java =================================================================== --- oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/query/FetchNodesByPathAndDepthQuery.java (revision 1389420) +++ oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/query/FetchNodesByPathAndDepthQuery.java (working copy) @@ -22,7 +22,8 @@ import org.apache.jackrabbit.mongomk.MongoConnection; import org.apache.jackrabbit.mongomk.model.NodeMongo; import org.apache.jackrabbit.mongomk.util.MongoUtil; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.mongodb.DBCollection; import com.mongodb.DBCursor; @@ -35,7 +36,9 @@ * @author Philipp Marx - */ -@SuppressWarnings("all") public class FetchNodesByPathAndDepthQueryTest extends BaseMongoTest { @Test - @Ignore - public void testFetchWithInvalidFirstRevision() throws Exception { - SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); - String firstRevisionId = scenario.create(); - String secondRevisionId = scenario.update_A_and_add_D_and_E(); - SimpleNodeScenario scenario2 = new SimpleNodeScenario(mongoConnection); - String thirdRevisionId = scenario.update_A_and_add_D_and_E(); + public void fetchWithInvalidFirstRevision() throws Exception { + String revisionId1 = addNode("a"); + String revisionId2 = addNode("b"); + String revisionId3 = addNode("c"); - DBCollection commitCollection = mongoConnection.getCommitCollection(); - DBObject q = QueryBuilder.start(CommitMongo.KEY_REVISION_ID) - .is(MongoUtil.toMongoRepresentation(firstRevisionId)).get(); - DBObject u = new BasicDBObject("$set", new BasicDBObject(CommitMongo.KEY_FAILED, Boolean.TRUE)); - commitCollection.update(q, u); + invalidateCommit(revisionId1); + updateBaseRevisionId(revisionId2, "0"); - q = QueryBuilder.start(CommitMongo.KEY_REVISION_ID).is(MongoUtil.toMongoRepresentation(secondRevisionId)) - .get(); - u = new BasicDBObject("$set", new BasicDBObject(CommitMongo.KEY_BASE_REVISION_ID, 0L)); - commitCollection.update(q, u); + FetchNodesByPathAndDepthQuery query = new FetchNodesByPathAndDepthQuery(mongoConnection, + "/", revisionId3, -1); + List actuals = NodeMongo.toNode(query.execute()); - FetchNodesByPathAndDepthQuery query = new FetchNodesByPathAndDepthQuery(mongoConnection, "/", thirdRevisionId, - -1); - List result = query.execute(); - List actuals = NodeMongo.toNode(result); - Node expected = NodeBuilder - .build(String - .format("{ \"/#%0$s\" : { \"a#%3$s\" : { \"int\" : 1 , \"double\" : 0.123 , \"b#%3$s\" : { \"string\" : \"foo\" , \"e#%3$s\" : { \"array\" : [ 123, null, 123.456, \"for:bar\", true ] } } , \"d#%3$s\" : { \"null\" : null } } } }", - firstRevisionId, secondRevisionId, - thirdRevisionId)); - Set expecteds = expected.getDescendants(true); + //String json = String.format("{\"/#%1$s\" : { \"a#%2$s\" : {}, \"b#%3$s\" : {}, \"c#%1$s\" : {} }}", revisionId3, revisionId1, revisionId2); + String json = String.format("{\"/#%2$s\" : { \"b#%1$s\" : {}, \"c#%2$s\" : {} }}", revisionId2, revisionId3); + Set expecteds = NodeBuilder.build(json).getDescendants(true); NodeAssert.assertEquals(expecteds, actuals); } @Test - public void testFetchWithInvalidLastRevision() throws Exception { - SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); - String firstRevisionId = scenario.create(); - String secondRevisionId = scenario.update_A_and_add_D_and_E(); - SimpleNodeScenario scenario2 = new SimpleNodeScenario(mongoConnection); - String thirdRevisionId = scenario.update_A_and_add_D_and_E(); + public void fetchWithInvalidLastRevision() throws Exception { + String revisionId1 = addNode("a"); + String revisionId2 = addNode("b"); + String revisionId3 = addNode("c"); - DBCollection commitCollection = mongoConnection.getCommitCollection(); - DBObject q = QueryBuilder.start(CommitMongo.KEY_REVISION_ID) - .is(MongoUtil.toMongoRepresentation(thirdRevisionId)).get(); - DBObject u = new BasicDBObject(); - u.put("$set", new BasicDBObject(CommitMongo.KEY_FAILED, Boolean.TRUE)); - commitCollection.update(q, u); + invalidateCommit(revisionId3); - FetchNodesByPathAndDepthQuery query = new FetchNodesByPathAndDepthQuery(mongoConnection, "/", thirdRevisionId, - -1); - List result = query.execute(); - List actuals = NodeMongo.toNode(result); - Node expected = NodeBuilder - .build(String - .format("{ \"/#%1$s\" : { \"a#%2$s\" : { \"int\" : 1 , \"double\" : 0.123 , \"b#%2$s\" : { \"string\" : \"foo\" , \"e#%2$s\" : { \"array\" : [ 123, null, 123.456, \"for:bar\", true ] } } , \"c#%1$s\" : { \"bool\" : true }, \"d#%2$s\" : { \"null\" : null } } } }", - firstRevisionId, secondRevisionId)); - Set expecteds = expected.getDescendants(true); + FetchNodesByPathAndDepthQuery query = new FetchNodesByPathAndDepthQuery(mongoConnection, + "/", revisionId3, -1); + List actuals = NodeMongo.toNode(query.execute()); + + //String json = String.format("{\"/#%1$s\" : { \"a#%2$s\" : {}, \"b#%3$s\" : {}, \"c#%1$s\" : {} }}", revisionId3, revisionId1, revisionId2); + String json = String.format("{\"/#%2$s\" : { \"a#%1$s\" : {}, \"b#%2$s\" : {} }}", revisionId1, revisionId2); + Set expecteds = NodeBuilder.build(json).getDescendants(true); NodeAssert.assertEquals(expecteds, actuals); } @Test - public void testFetchWithInvalidMiddleRevision() throws Exception { - SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); - String firstRevisionId = scenario.create(); - String secondRevisionId = scenario.update_A_and_add_D_and_E(); - SimpleNodeScenario scenario2 = new SimpleNodeScenario(mongoConnection); - String thirdRevisionId = scenario.update_A_and_add_D_and_E(); + public void fetchWithInvalidMiddleRevision() throws Exception { + String revisionId1 = addNode("a"); + String revisionId2 = addNode("b"); + String revisionId3 = addNode("c"); - DBCollection commitCollection = mongoConnection.getCommitCollection(); - DBObject q = QueryBuilder.start(CommitMongo.KEY_REVISION_ID) - .is(MongoUtil.toMongoRepresentation(secondRevisionId)).get(); - DBObject u = new BasicDBObject("$set", new BasicDBObject(CommitMongo.KEY_FAILED, Boolean.TRUE)); - commitCollection.update(q, u); + invalidateCommit(revisionId2); + updateBaseRevisionId(revisionId3, revisionId1); - q = QueryBuilder.start(CommitMongo.KEY_REVISION_ID).is(MongoUtil.toMongoRepresentation(thirdRevisionId)) - .get(); - u = new BasicDBObject(); - u.put("$set", - new BasicDBObject(CommitMongo.KEY_BASE_REVISION_ID, MongoUtil - .toMongoRepresentation(firstRevisionId))); - commitCollection.update(q, u); + FetchNodesByPathAndDepthQuery query = new FetchNodesByPathAndDepthQuery(mongoConnection, + "/", revisionId3, -1); + List actuals = NodeMongo.toNode(query.execute()); - FetchNodesByPathAndDepthQuery query = new FetchNodesByPathAndDepthQuery(mongoConnection, "/", thirdRevisionId, - -1); - List result = query.execute(); - List actuals = NodeMongo.toNode(result); - Node expected = NodeBuilder - .build(String - .format("{ \"/#%1$s\" : { \"a#%3$s\" : { \"int\" : 1 , \"double\" : 0.123 , \"b#%3$s\" : { \"string\" : \"foo\" , \"e#%3$s\" : { \"array\" : [ 123, null, 123.456, \"for:bar\", true ] } } , \"c#%1$s\" : { \"bool\" : true }, \"d#%3$s\" : { \"null\" : null } } } }", - firstRevisionId, secondRevisionId, - thirdRevisionId)); - Set expecteds = expected.getDescendants(true); + String json = String.format("{\"/#%2$s\" : { \"a#%1$s\" : {}, \"c#%2$s\" : {} }}", revisionId1, revisionId3); + Set expecteds = NodeBuilder.build(json).getDescendants(true); NodeAssert.assertEquals(expecteds, actuals); } @Test - public void testSimpleFetchRootAndAllDepths() throws Exception { + public void simpleFetchRootAndAllDepths() throws Exception { SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); String firstRevisionId = scenario.create(); String secondRevisionId = scenario.update_A_and_add_D_and_E(); @@ -215,4 +175,33 @@ expecteds = expected.getDescendants(true); NodeAssert.assertEquals(expecteds, actuals); } + + private String addNode(String nodeName) throws Exception { + List instructions = new LinkedList(); + instructions.add(new AddNodeInstructionImpl("/", nodeName)); + Commit commit = new CommitImpl("/", "+" + nodeName, "Add /" + nodeName, instructions); + CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); + String revisionId = command.execute(); + return revisionId; + } + + private void invalidateCommit(String revisionId) { + DBCollection commitCollection = mongoConnection.getCommitCollection(); + DBObject query = QueryBuilder.start(CommitMongo.KEY_REVISION_ID) + .is(MongoUtil.toMongoRepresentation(revisionId)).get(); + DBObject update = new BasicDBObject(); + update.put("$set", new BasicDBObject(CommitMongo.KEY_FAILED, Boolean.TRUE)); + commitCollection.update(query, update); + } + + private void updateBaseRevisionId(String revisionId2, String baseRevisionId) { + DBCollection commitCollection = mongoConnection.getCommitCollection(); + DBObject query = QueryBuilder.start(CommitMongo.KEY_REVISION_ID) + .is(MongoUtil.toMongoRepresentation(revisionId2)) + .get(); + DBObject update = new BasicDBObject("$set", + new BasicDBObject(CommitMongo.KEY_BASE_REVISION_ID, + MongoUtil.toMongoRepresentation(baseRevisionId))); + commitCollection.update(query, update); + } } Index: oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/query/FetchNodesForRevisionQuery.java =================================================================== --- oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/query/FetchNodesForRevisionQuery.java (revision 1389420) +++ oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/query/FetchNodesForRevisionQuery.java (working copy) @@ -24,7 +24,8 @@ import org.apache.jackrabbit.mongomk.MongoConnection; import org.apache.jackrabbit.mongomk.model.NodeMongo; import org.apache.jackrabbit.mongomk.util.MongoUtil; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.mongodb.DBCollection; import com.mongodb.DBCursor; @@ -37,7 +38,9 @@ * @author nodeMongos = query.execute(); - List actuals = NodeMongo.toNode(nodeMongos); - Node expected = NodeBuilder - .build(String - .format("{ \"/#%1$s\" : { \"a#%3$s\" : { \"int\" : 1 , \"double\" : 0.123 , \"b#%3$s\" : { \"string\" : \"foo\" , \"e#%3$s\" : { \"array\" : [ 123, null, 123.456, \"for:bar\", true ] } } , \"c#%1$s\" : { \"bool\" : true }, \"d#%3$s\" : { \"null\" : null } } } }", - firstRevisionId, secondRevisionId, - thirdRevisionId)); - Set expecteds = expected.getDescendants(true); + FetchNodesForRevisionQuery query = new FetchNodesForRevisionQuery(mongoConnection, + new String[] { "/", "/a", "/b", "/c", "not_existing" }, revisionId3); + List actuals = NodeMongo.toNode(query.execute()); + + //String json = String.format("{\"/#%1$s\" : { \"a#%2$s\" : {}, \"b#%3$s\" : {}, \"c#%1$s\" : {} }}", revisionId3, revisionId1, revisionId2); + String json = String.format("{\"/#%2$s\" : { \"b#%1$s\" : {}, \"c#%2$s\" : {} }}", revisionId2, revisionId3); + Set expecteds = NodeBuilder.build(json).getDescendants(true); NodeAssert.assertEquals(expecteds, actuals); } @Test - public void testFetchWithInvalidLastRevision() throws Exception { - SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); - String firstRevisionId = scenario.create(); - String secondRevisionId = scenario.update_A_and_add_D_and_E(); - SimpleNodeScenario scenario2 = new SimpleNodeScenario(mongoConnection); - String thirdRevisionId = scenario.update_A_and_add_D_and_E(); + public void fetchWithInvalidLastRevision() throws Exception { + String revisionId1 = addNode("a"); + String revisionId2 = addNode("b"); + String revisionId3 = addNode("c"); - DBCollection commitCollection = mongoConnection.getCommitCollection(); - DBObject q = QueryBuilder.start(CommitMongo.KEY_REVISION_ID) - .is(MongoUtil.toMongoRepresentation(thirdRevisionId)).get(); - DBObject u = new BasicDBObject(); - u.put("$set", new BasicDBObject(CommitMongo.KEY_FAILED, Boolean.TRUE)); - commitCollection.update(q, u); + invalidateCommit(revisionId3); - FetchNodesForRevisionQuery query = new FetchNodesForRevisionQuery(mongoConnection, new String[] { "/", "/a", - "/a/b", "/a/c", "/a/d", "/a/b/e", "not_existing" }, thirdRevisionId); - List nodeMongos = query.execute(); - List actuals = NodeMongo.toNode(nodeMongos); - Node expected = NodeBuilder - .build(String - .format("{ \"/#%1$s\" : { \"a#%2$s\" : { \"int\" : 1 , \"double\" : 0.123 , \"b#%2$s\" : { \"string\" : \"foo\" , \"e#%2$s\" : { \"array\" : [ 123, null, 123.456, \"for:bar\", true ] } } , \"c#%1$s\" : { \"bool\" : true }, \"d#%2$s\" : { \"null\" : null } } } }", - firstRevisionId, secondRevisionId)); - Set expecteds = expected.getDescendants(true); + FetchNodesForRevisionQuery query = new FetchNodesForRevisionQuery(mongoConnection, + new String[] { "/", "/a", "/b", "/c", "not_existing" }, revisionId3); + List actuals = NodeMongo.toNode(query.execute()); + + String json = String.format("{\"/#%2$s\" : { \"a#%1$s\" : {}, \"b#%2$s\" : {} }}", revisionId1, revisionId2); + Set expecteds = NodeBuilder.build(json).getDescendants(true); NodeAssert.assertEquals(expecteds, actuals); } @Test - public void testFetchWithInvalidMiddleRevision() throws Exception { - SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); - String firstRevisionId = scenario.create(); - String secondRevisionId = scenario.update_A_and_add_D_and_E(); - SimpleNodeScenario scenario2 = new SimpleNodeScenario(mongoConnection); - String thirdRevisionId = scenario.update_A_and_add_D_and_E(); + public void fetchWithInvalidMiddleRevision() throws Exception { + String revisionId1 = addNode("a"); + String revisionId2 = addNode("b"); + String revisionId3 = addNode("c"); - DBCollection commitCollection = mongoConnection.getCommitCollection(); - DBObject q = QueryBuilder.start(CommitMongo.KEY_REVISION_ID) - .is(MongoUtil.toMongoRepresentation(secondRevisionId)).get(); - DBObject u = new BasicDBObject("$set", new BasicDBObject(CommitMongo.KEY_FAILED, Boolean.TRUE)); - commitCollection.update(q, u); + invalidateCommit(revisionId2); + updateBaseRevisionId(revisionId3, revisionId1); - q = QueryBuilder.start(CommitMongo.KEY_REVISION_ID).is(MongoUtil.toMongoRepresentation(thirdRevisionId)) - .get(); - u = new BasicDBObject(); - u.put("$set", - new BasicDBObject(CommitMongo.KEY_BASE_REVISION_ID, MongoUtil - .toMongoRepresentation(firstRevisionId))); - commitCollection.update(q, u); + FetchNodesForRevisionQuery query = new FetchNodesForRevisionQuery(mongoConnection, + new String[] { "/", "/a", "/b", "/c", "not_existing" }, revisionId3); + List actuals = NodeMongo.toNode(query.execute()); - FetchNodesForRevisionQuery query = new FetchNodesForRevisionQuery(mongoConnection, new String[] { "/", "/a", - "/a/b", "/a/c", "/a/d", "/a/b/e", "not_existing" }, thirdRevisionId); - List nodeMongos = query.execute(); - List actuals = NodeMongo.toNode(nodeMongos); - Node expected = NodeBuilder - .build(String - .format("{ \"/#%1$s\" : { \"a#%3$s\" : { \"int\" : 1 , \"double\" : 0.123 , \"b#%3$s\" : { \"string\" : \"foo\" , \"e#%3$s\" : { \"array\" : [ 123, null, 123.456, \"for:bar\", true ] } } , \"c#%1$s\" : { \"bool\" : true }, \"d#%3$s\" : { \"null\" : null } } } }", - firstRevisionId, secondRevisionId, - thirdRevisionId)); - Set expecteds = expected.getDescendants(true); + String json = String.format("{\"/#%2$s\" : { \"a#%1$s\" : {}, \"c#%2$s\" : {} }}", revisionId1, revisionId3); + Set expecteds = NodeBuilder.build(json).getDescendants(true); NodeAssert.assertEquals(expecteds, actuals); } @Test - public void testFetchWithOneRevision() throws Exception { + public void fetchWithOneRevision() throws Exception { SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); String revisionId = scenario.create(); @@ -158,7 +127,7 @@ } @Test - public void testFetchWithTwoRevisions() throws Exception { + public void fetchWithTwoRevisions() throws Exception { SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); String firstRevisionId = scenario.create(); String secondRevisionId = scenario.update_A_and_add_D_and_E(); @@ -185,4 +154,33 @@ expecteds = expected.getDescendants(true); NodeAssert.assertEquals(expecteds, actuals); } + + private String addNode(String nodeName) throws Exception { + List instructions = new LinkedList(); + instructions.add(new AddNodeInstructionImpl("/", nodeName)); + Commit commit = new CommitImpl("/", "+" + nodeName, "Add /" + nodeName, instructions); + CommitCommandMongo command = new CommitCommandMongo(mongoConnection, commit); + String revisionId = command.execute(); + return revisionId; + } + + private void invalidateCommit(String revisionId) { + DBCollection commitCollection = mongoConnection.getCommitCollection(); + DBObject query = QueryBuilder.start(CommitMongo.KEY_REVISION_ID) + .is(MongoUtil.toMongoRepresentation(revisionId)).get(); + DBObject update = new BasicDBObject(); + update.put("$set", new BasicDBObject(CommitMongo.KEY_FAILED, Boolean.TRUE)); + commitCollection.update(query, update); + } + + private void updateBaseRevisionId(String revisionId2, String baseRevisionId) { + DBCollection commitCollection = mongoConnection.getCommitCollection(); + DBObject query = QueryBuilder.start(CommitMongo.KEY_REVISION_ID) + .is(MongoUtil.toMongoRepresentation(revisionId2)) + .get(); + DBObject update = new BasicDBObject("$set", + new BasicDBObject(CommitMongo.KEY_BASE_REVISION_ID, + MongoUtil.toMongoRepresentation(baseRevisionId))); + commitCollection.update(query, update); + } } Index: oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/query/FetchValidCommitsQuery.java =================================================================== --- oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/query/FetchValidCommitsQuery.java (revision 1389420) +++ oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/query/FetchValidCommitsQuery.java (working copy) @@ -25,7 +25,8 @@ import org.apache.jackrabbit.mongomk.MongoConnection; import org.apache.jackrabbit.mongomk.model.CommitMongo; import org.apache.jackrabbit.mongomk.util.MongoUtil; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.mongodb.DBCollection; import com.mongodb.DBCursor; @@ -40,7 +41,7 @@ public class FetchValidCommitsQuery extends AbstractQuery> { private static final int LIMITLESS = 0; - private static final Logger LOG = Logger.getLogger(FetchValidCommitsQuery.class); + private static final Logger LOG = LoggerFactory.getLogger(FetchValidCommitsQuery.class); private final String fromRevisionId; private String toRevisionId; @@ -112,6 +113,9 @@ while (true) { CommitMongo commitMongo = revisions.get(currentRevision); + if (commitMongo == null) { + break; + } validCommits.add(commitMongo); Long baseRevision = commitMongo.getBaseRevisionId(); Long fromRevision = MongoUtil.toMongoRepresentation(fromRevisionId); Index: oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/command/GetNodesCommandMongo.java =================================================================== --- oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/command/GetNodesCommandMongo.java (revision 1389420) +++ oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/command/GetNodesCommandMongo.java (working copy) @@ -32,7 +32,8 @@ import org.apache.jackrabbit.mongomk.query.FetchValidCommitsQuery; import org.apache.jackrabbit.mongomk.util.MongoUtil; import org.apache.jackrabbit.oak.commons.PathUtils; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * A {@code Command} for getting nodes from {@code MongoDB}. @@ -41,11 +42,7 @@ */ public class GetNodesCommandMongo extends AbstractCommand { - class InconsitentNodeHierarchyException extends Exception { - private static final long serialVersionUID = 8155418280936077632L; - } - - private static final Logger LOG = Logger.getLogger(GetNodesCommandMongo.class); + private static final Logger LOG = LoggerFactory.getLogger(GetNodesCommandMongo.class); private final MongoConnection mongoConnection; private final String path; @@ -86,7 +83,7 @@ boolean verified = verifyProblematicNodes() && verifyNodeHierarchy(); if (!verified) { - throw new InconsitentNodeHierarchyException(); + throw new InconsistentNodeHierarchyException(); } this.buildNodeStructure(); @@ -101,7 +98,7 @@ @Override public boolean needsRetry(Exception e) { - return e instanceof InconsitentNodeHierarchyException; + return e instanceof InconsistentNodeHierarchyException; } private void buildNodeStructure() { Index: oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/command/GetNodesCommandMongoTest.java =================================================================== --- oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/command/GetNodesCommandMongoTest.java (revision 1389420) +++ oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/command/GetNodesCommandMongoTest.java (working copy) @@ -16,153 +16,72 @@ */ package org.apache.jackrabbit.mongomk.command; -import java.util.Arrays; -import java.util.Set; +import static org.junit.Assert.fail; import org.apache.jackrabbit.mongomk.BaseMongoTest; -import org.apache.jackrabbit.mongomk.MongoConnection; import org.apache.jackrabbit.mongomk.api.model.Node; import org.apache.jackrabbit.mongomk.impl.NodeAssert; import org.apache.jackrabbit.mongomk.impl.builder.NodeBuilder; -import org.apache.jackrabbit.mongomk.model.CommitMongo; -import org.apache.jackrabbit.mongomk.model.NodeMongo; import org.apache.jackrabbit.mongomk.scenario.SimpleNodeScenario; -import org.easymock.EasyMock; -import org.junit.Ignore; import org.junit.Test; -import com.mongodb.BasicDBList; -import com.mongodb.BasicDBObject; -import com.mongodb.DBCollection; -import com.mongodb.DBCursor; -import com.mongodb.DBObject; - /** - * @author expectedNodeMongos = NodeMongo.fromNodes(expected.getDescendants(true)); - for (NodeMongo nodeMongo : expectedNodeMongos) { - - BasicDBObject groupDbObject = new BasicDBObject(); - groupDbObject.put("result", nodeMongo); - if (!nodeMongo.getPath().equals(missingPath)) { - results1.add(groupDbObject); - } - results2.add(groupDbObject); - } - - DBCollection mockNodeCollection = EasyMock.createMock(DBCollection.class); - EasyMock.expect( - mockNodeCollection.group(EasyMock.anyObject(DBObject.class), EasyMock.anyObject(DBObject.class), - EasyMock.anyObject(DBObject.class), EasyMock.anyObject(String.class))).andReturn(results1) - .once(); - EasyMock.expect( - mockNodeCollection.group(EasyMock.anyObject(DBObject.class), EasyMock.anyObject(DBObject.class), - EasyMock.anyObject(DBObject.class), EasyMock.anyObject(String.class))).andReturn(results2) - .once(); - EasyMock.replay(mockNodeCollection); - - CommitMongo firstCommit = new CommitMongo(); - firstCommit.setAffectedPaths(Arrays.asList(new String[] { "/", "/a", "/a/b", "/a/c" })); - firstCommit.setRevisionId(1L); + @Test + public void getNodesDepthUnlimited() throws Exception { + SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); + String firstRevisionId = scenario.create(); + String secondRevisionId = scenario.update_A_and_add_D_and_E(); - CommitMongo secondCommit = new CommitMongo(); - secondCommit.setAffectedPaths(Arrays.asList(new String[] { "/a", "/a/d", "/a/b/e" })); - secondCommit.setRevisionId(2L); + GetNodesCommandMongo command = new GetNodesCommandMongo(mongoConnection, "/", firstRevisionId, -1); + Node actual = command.execute(); + Node expected = NodeBuilder.build( + String.format("{ \"/#%1$s\" : { \"a#%1$s\" : { \"int\" : 1 , \"b#%1$s\" : { \"string\" : \"foo\" } , \"c#%1$s\" : { \"bool\" : true } } } }", + firstRevisionId)); + NodeAssert.assertDeepEquals(expected, actual); - DBCursor mockDbCursor = EasyMock.createMock(DBCursor.class); - EasyMock.expect(mockDbCursor.sort(EasyMock.anyObject(DBObject.class))).andReturn(mockDbCursor); - EasyMock.expect(mockDbCursor.limit(EasyMock.anyInt())).andReturn(mockDbCursor); - EasyMock.expect(mockDbCursor.hasNext()).andReturn(true).once(); - EasyMock.expect(mockDbCursor.next()).andReturn(firstCommit).once(); - EasyMock.expect(mockDbCursor.hasNext()).andReturn(true).once(); - EasyMock.expect(mockDbCursor.next()).andReturn(secondCommit).once(); - EasyMock.expect(mockDbCursor.hasNext()).andReturn(false).once(); - EasyMock.replay(mockDbCursor); + command = new GetNodesCommandMongo(mongoConnection, "/", secondRevisionId, -1); + actual = command.execute(); + expected = NodeBuilder.build( + String.format("{ \"/#%1$s\" : { \"a#%2$s\" : { \"int\" : 1 , \"double\" : 0.123 , \"b#%2$s\" : { \"string\" : \"foo\" , \"e#%2$s\" : { \"array\" : [ 123, null, 123.456, \"for:bar\", true ] } } , \"c#%1$s\" : { \"bool\" : true }, \"d#%2$s\" : { \"null\" : null } } } }", + firstRevisionId, secondRevisionId)); + NodeAssert.assertDeepEquals(expected, actual); + } - DBCollection mockCommitCollection = EasyMock.createMock(DBCollection.class); - EasyMock.expect(mockCommitCollection.find(EasyMock.anyObject(DBObject.class))).andReturn(mockDbCursor); - EasyMock.replay(mockCommitCollection); + @Test + public void getNodesAfterDeletion() throws Exception { + SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); + String revisionId = scenario.create(); + revisionId = scenario.delete_A(); - MongoConnection mockConnection = EasyMock.createMock(MongoConnection.class); - EasyMock.expect(mockConnection.getNodeCollection()).andReturn(mockNodeCollection).times(2); - EasyMock.expect(mockConnection.getCommitCollection()).andReturn(mockCommitCollection); - EasyMock.replay(mockConnection); + GetNodesCommandMongo command = new GetNodesCommandMongo(mongoConnection, "/", revisionId, -1); + Node actual = command.execute(); + Node expected = NodeBuilder.build(String.format("{ \"/#%1$s\" : {} }", revisionId)); - return mockConnection; + NodeAssert.assertDeepEquals(expected, actual); } - private MongoConnection createStaleNodeScenario(Node expected, String stalePath) { - BasicDBList results1 = new BasicDBList(); - BasicDBList results2 = new BasicDBList(); - - Set expectedNodeMongos = NodeMongo.fromNodes(expected.getDescendants(true)); - for (NodeMongo nodeMongo : expectedNodeMongos) { - BasicDBObject groupDbObject = new BasicDBObject(); - groupDbObject.put("result", nodeMongo); - results2.add(groupDbObject); - - if (nodeMongo.getPath().equals(stalePath)) { - NodeMongo nodeMongoStale = new NodeMongo(); - nodeMongoStale.putAll(nodeMongo.toMap()); - nodeMongoStale.setRevisionId(1L); - } + @Test + public void getNodesInvalidRevisionId() throws Exception { + SimpleNodeScenario scenario = new SimpleNodeScenario(mongoConnection); + scenario.create(); - results1.add(groupDbObject); + GetNodesCommandMongo command = new GetNodesCommandMongo(mongoConnection, "/", String.valueOf(Long.MAX_VALUE), -1); + try { + command.execute(); + fail("Exception expected"); + } catch (Exception expected) { } - - DBCollection mockNodeCollection = EasyMock.createMock(DBCollection.class); - EasyMock.expect( - mockNodeCollection.group(EasyMock.anyObject(DBObject.class), EasyMock.anyObject(DBObject.class), - EasyMock.anyObject(DBObject.class), EasyMock.anyObject(String.class))).andReturn(results1) - .once(); - EasyMock.expect( - mockNodeCollection.group(EasyMock.anyObject(DBObject.class), EasyMock.anyObject(DBObject.class), - EasyMock.anyObject(DBObject.class), EasyMock.anyObject(String.class))).andReturn(results2) - .once(); - EasyMock.replay(mockNodeCollection); - - CommitMongo firstCommit = new CommitMongo(); - firstCommit.setAffectedPaths(Arrays.asList(new String[] { "/", "/a", "/a/b", "/a/c" })); - firstCommit.setRevisionId(1L); - - CommitMongo secondCommit = new CommitMongo(); - secondCommit.setAffectedPaths(Arrays.asList(new String[] { "/a", "/a/d", "/a/b/e" })); - secondCommit.setRevisionId(2L); - - DBCursor mockDbCursor = EasyMock.createMock(DBCursor.class); - EasyMock.expect(mockDbCursor.sort(EasyMock.anyObject(DBObject.class))).andReturn(mockDbCursor); - EasyMock.expect(mockDbCursor.limit(EasyMock.anyInt())).andReturn(mockDbCursor); - EasyMock.expect(mockDbCursor.hasNext()).andReturn(true).once(); - EasyMock.expect(mockDbCursor.next()).andReturn(firstCommit).once(); - EasyMock.expect(mockDbCursor.hasNext()).andReturn(true).once(); - EasyMock.expect(mockDbCursor.next()).andReturn(secondCommit).once(); - EasyMock.expect(mockDbCursor.hasNext()).andReturn(false).once(); - EasyMock.replay(mockDbCursor); - - DBCollection mockCommitCollection = EasyMock.createMock(DBCollection.class); - EasyMock.expect(mockCommitCollection.find(EasyMock.anyObject(DBObject.class))).andReturn(mockDbCursor); - EasyMock.replay(mockCommitCollection); - - MongoConnection mockConnection = EasyMock.createMock(MongoConnection.class); - EasyMock.expect(mockConnection.getNodeCollection()).andReturn(mockNodeCollection).times(2); - EasyMock.expect(mockConnection.getCommitCollection()).andReturn(mockCommitCollection); - EasyMock.replay(mockConnection); - - return mockConnection; } } Index: oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java =================================================================== --- oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java (revision 1389420) +++ oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java (working copy) @@ -297,7 +297,7 @@ @Test public void snapshotIsolation() { - final int NUM_COMMITS = 1000; + final int NUM_COMMITS = 100; String[] revs = new String[NUM_COMMITS]; @@ -1025,16 +1025,21 @@ } @Test - public void testBlobs() { - // test with small blobs - testBlobs(1234); - // test with medium sized blobs - testBlobs(1234567); - // test with large blobs - testBlobs(32 * 1024 * 1024); + public void testSmallBlob() { + testBlobs(1234, 8 * 1024); + } + + @Test + public void testMediumBlob() { + testBlobs(1234567, 8 * 1024); } - private void testBlobs(int size) { + @Test + public void testLargeBlob() { + testBlobs(32 * 1024 * 1024, 1024 * 1024); + } + + private void testBlobs(int size, int bufferSize) { // write data TestInputStream in = new TestInputStream(size); String id = mk.write(in); @@ -1054,7 +1059,8 @@ // verify data InputStream in1 = new TestInputStream(size); - InputStream in2 = new BufferedInputStream(new MicroKernelInputStream(mk, id)); + InputStream in2 = new BufferedInputStream( + new MicroKernelInputStream(mk, id), bufferSize); try { while (true) { int x = in1.read(); Index: oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/util/MongoUtil.java =================================================================== --- oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/util/MongoUtil.java (revision 1389420) +++ oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/util/MongoUtil.java (working copy) @@ -35,6 +35,10 @@ @SuppressWarnings("javadoc") public class MongoUtil { + public static final String INITIAL_COMMIT_MESSAGE = "This is an autogenerated initial commit"; + public static final String INITIAL_COMMIT_PATH = ""; + public static final String INITIAL_COMMIT_DIFF = "+/ : {}"; + public static void clearCommitCollection(MongoConnection mongoConnection) { DBCollection commitCollection = mongoConnection.getCommitCollection(); commitCollection.drop(); @@ -66,9 +70,9 @@ CommitMongo commit = new CommitMongo(); commit.setAffectedPaths(Arrays.asList(new String[] { "/" })); commit.setBaseRevId(0L); - commit.setDiff("+/ : {}"); - commit.setMessage("This is an autogenerated initial commit"); - commit.setPath(""); + commit.setDiff(INITIAL_COMMIT_DIFF); + commit.setMessage(INITIAL_COMMIT_MESSAGE); + commit.setPath(INITIAL_COMMIT_PATH); commit.setRevisionId(0L); commitCollection.insert(commit); } Index: oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/model/NodeMongo.java =================================================================== --- oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/model/NodeMongo.java (revision 1389420) +++ oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/model/NodeMongo.java (working copy) @@ -255,16 +255,16 @@ public String toString() { StringBuilder sb = new StringBuilder(); sb.append(super.toString()); - sb.append(" internal props: "); - sb.append("AddedChildren = "); + sb.deleteCharAt(sb.length() - 1); + sb.append(", addedChildren : "); sb.append(addedChildren); - sb.append(", RemovedChildren = "); + sb.append(", removedChildren : "); sb.append(removedChildren); - sb.append(", AddedProps = "); + sb.append(", addedProps : "); sb.append(addedProps); - sb.append(", RemovedProps = "); + sb.append(", removedProps : "); sb.append(removedProps); - + sb.append(" }"); return sb.toString(); } } Index: oak-mongomk/pom.xml =================================================================== --- oak-mongomk/pom.xml (revision 1389420) +++ oak-mongomk/pom.xml (working copy) @@ -26,7 +26,8 @@ org.apache.jackrabbit oak-parent - 0.5-SNAPSHOT + 0.6-SNAPSHOT + ../oak-parent/pom.xml oak-mongomk @@ -50,9 +51,9 @@ - log4j - log4j - 1.2.16 + org.slf4j + slf4j-api + 1.6.4 @@ -79,10 +80,10 @@ test - org.easymock - easymock - 3.1 - test + ch.qos.logback + logback-classic + 1.0.1 + test Index: oak-mongomk-test/pom.xml =================================================================== --- oak-mongomk-test/pom.xml (revision 1389420) +++ oak-mongomk-test/pom.xml (working copy) @@ -26,44 +26,31 @@ org.apache.jackrabbit oak-parent - 0.5-SNAPSHOT + 0.6-SNAPSHOT + ../oak-parent/pom.xml oak-mongomk-test + Oak Mongo MicroKernel Test - - org.apache.jackrabbit - oak-mongomk-api - ${project.version} - - - org.apache.jackrabbit - oak-mongomk-impl - ${project.version} - + + org.apache.jackrabbit oak-mongomk ${project.version} test - - org.json - json - 20090211 - - - junit - junit - test - + + org.apache.jackrabbit oak-it-mk ${project.version} test + Index: oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/query/QueryUtils.java =================================================================== --- oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/query/QueryUtils.java (revision 1389420) +++ oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/query/QueryUtils.java (working copy) @@ -22,7 +22,8 @@ import java.util.Map; import org.apache.jackrabbit.mongomk.model.NodeMongo; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.mongodb.DBCursor; @@ -33,7 +34,7 @@ */ public class QueryUtils { - private static final Logger LOG = Logger.getLogger(QueryUtils.class); + private static final Logger LOG = LoggerFactory.getLogger(QueryUtils.class); /** * Reads nodes from the given {@link DBCursor} and add them to the returned list if their revision id is contained