Author: chetanm
Date: Thu Feb 23 16:09:23 2017
New Revision: 1784165
URL: http://svn.apache.org/viewvc?rev=1784165&view=rev
Log:
OAK-5788 - Perform update of single node in one remote call if possible
Refactor the testcase
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java?rev=1784165&r1=1784164&r2=1784165&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
Thu Feb 23 16:09:23 2017
@@ -2890,47 +2890,54 @@ public class DocumentNodeStoreTest {
@Ignore("OAK-5788")
@Test
public void commitRootSameAsModifiedPath() throws Exception{
- final AtomicInteger count = new AtomicInteger();
- DocumentStore ds = new MemoryDocumentStore(){
- @Override
- public <T extends Document> T createOrUpdate(Collection<T>
collection, UpdateOp update) {
- incrementCounter(collection);
- return super.createOrUpdate(collection, update);
- }
-
- @Override
- public <T extends Document> List<T> createOrUpdate(Collection<T>
collection, List<UpdateOp> updateOps) {
- if (updateOps.size() != 1) { //For size == 1 previous method
gets called internally which inflates the count
- incrementCounter(collection);
- }
- return super.createOrUpdate(collection, updateOps);
- }
-
- @Override
- public <T extends Document> T findAndUpdate(Collection<T>
collection, UpdateOp update) {
- incrementCounter(collection);
- return super.findAndUpdate(collection, update);
- }
-
- private <T extends Document> void incrementCounter(Collection<T>
collection) {
- if (collection == Collection.NODES) {
- count.incrementAndGet();
- }
- }
- };
+ WriteCountingStore ws = new WriteCountingStore();
- DocumentNodeStore ns =
builderProvider.newBuilder().setAsyncDelay(0).setDocumentStore(ds).getNodeStore();
+ DocumentNodeStore ns =
builderProvider.newBuilder().setAsyncDelay(0).setDocumentStore(ws).getNodeStore();
NodeBuilder builder = ns.getRoot().builder();
builder.child("a").child("b");
merge(ns, builder);
- count.set(0);
+ ws.reset();
builder = ns.getRoot().builder();
builder.child("a").child("b").setProperty("foo", "bar");
merge(ns, builder);
- assertEquals(1, count.get());
+ assertEquals(1, ws.count);
+ }
+
+ private static class WriteCountingStore extends MemoryDocumentStore {
+ int count;
+
+ @Override
+ public <T extends Document> T createOrUpdate(Collection<T> collection,
UpdateOp update) {
+ incrementCounter(collection);
+ return super.createOrUpdate(collection, update);
+ }
+
+ @Override
+ public <T extends Document> List<T> createOrUpdate(Collection<T>
collection, List<UpdateOp> updateOps) {
+ if (updateOps.size() != 1) { //For size == 1 previous method gets
called internally which inflates the count
+ incrementCounter(collection);
+ }
+ return super.createOrUpdate(collection, updateOps);
+ }
+
+ @Override
+ public <T extends Document> T findAndUpdate(Collection<T> collection,
UpdateOp update) {
+ incrementCounter(collection);
+ return super.findAndUpdate(collection, update);
+ }
+
+ public void reset(){
+ count = 0;
+ }
+
+ private <T extends Document> void incrementCounter(Collection<T>
collection) {
+ if (collection == Collection.NODES) {
+ count++;
+ }
+ }
}
private static class TestException extends RuntimeException {