Author: chetanm
Date: Wed Nov 16 09:23:46 2016
New Revision: 1769949

URL: http://svn.apache.org/viewvc?rev=1769949&view=rev
Log:
OAK-5113 - Avoid dispatching changes for checkpoint related changes

Fix in segment-tar and re-enable the test.

Modified:
    
jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/spi/state/CheckpointTest.java
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java

Modified: 
jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/spi/state/CheckpointTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/spi/state/CheckpointTest.java?rev=1769949&r1=1769948&r2=1769949&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/spi/state/CheckpointTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-it/src/test/java/org/apache/jackrabbit/oak/spi/state/CheckpointTest.java
 Wed Nov 16 09:23:46 2016
@@ -91,7 +91,6 @@ public class CheckpointTest extends OakB
         assertEquals(props, store.checkpointInfo(cp));
     }
 
-    @Ignore("OAK-5113")
     @Test
     public void noContentChangeForCheckpoints() throws Exception{
         final AtomicInteger invocationCount = new AtomicInteger();

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java?rev=1769949&r1=1769948&r2=1769949&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java
 Wed Nov 16 09:23:46 2016
@@ -234,7 +234,7 @@ public class SegmentNodeStore implements
             } finally {
                 // Explicitly give up reference to the previous root state
                 // otherwise they would block cleanup. See OAK-3347
-                refreshHead();
+                refreshHead(true);
                 commitSemaphore.release();
             }
         }
@@ -244,12 +244,15 @@ public class SegmentNodeStore implements
     /**
      * Refreshes the head state. Should only be called while holding a
      * permit from the {@link #commitSemaphore}.
+     * @param dispatchChanges if set to true the changes would also be 
dispatched
      */
-    private void refreshHead() {
+    private void refreshHead(boolean dispatchChanges) {
         SegmentNodeState state = reader.readHeadState(revisions);
         if (!state.getRecordId().equals(head.get().getRecordId())) {
             head.set(state);
-            contentChanged(state.getChildNode(ROOT), null);
+            if (dispatchChanges) {
+                contentChanged(state.getChildNode(ROOT), null);
+            }
         }
     }
 
@@ -265,7 +268,7 @@ public class SegmentNodeStore implements
     public NodeState getRoot() {
         if (commitSemaphore.tryAcquire()) {
             try {
-                refreshHead();
+                refreshHead(true);
             } finally {
                 commitSemaphore.release();
             }
@@ -392,7 +395,7 @@ public class SegmentNodeStore implements
         public Boolean call() {
             long now = System.currentTimeMillis();
 
-            refreshHead();
+            refreshHead(true);
 
             SegmentNodeState state = head.get();
             SegmentNodeBuilder builder = state.builder();
@@ -423,7 +426,7 @@ public class SegmentNodeStore implements
 
             SegmentNodeState newState = builder.getNodeState();
             if (revisions.setHead(state.getRecordId(), 
newState.getRecordId())) {
-                refreshHead();
+                refreshHead(false);
                 return true;
             } else {
                 return false;
@@ -480,7 +483,7 @@ public class SegmentNodeStore implements
         for (int i = 0; i < 5; i++) {
             if (commitSemaphore.tryAcquire()) {
                 try {
-                    refreshHead();
+                    refreshHead(true);
 
                     SegmentNodeState state = head.get();
                     SegmentNodeBuilder builder = state.builder();
@@ -491,7 +494,7 @@ public class SegmentNodeStore implements
                         cp.remove();
                         SegmentNodeState newState = builder.getNodeState();
                         if (revisions.setHead(state.getRecordId(), 
newState.getRecordId())) {
-                            refreshHead();
+                            refreshHead(false);
                             return true;
                         }
                     }
@@ -530,11 +533,11 @@ public class SegmentNodeStore implements
         }
 
         private boolean setHead(SegmentNodeState before, SegmentNodeState 
after) {
-            refreshHead();
+            refreshHead(true);
             if (revisions.setHead(before.getRecordId(), after.getRecordId())) {
                 head.set(after);
                 contentChanged(after.getChildNode(ROOT), info);
-                refreshHead();
+                refreshHead(true);
                 return true;
             } else {
                 return false;
@@ -569,7 +572,7 @@ public class SegmentNodeStore implements
             for (long backoff = 1; backoff < maximumBackoff; backoff *= 2) {
                 long start = System.nanoTime();
 
-                refreshHead();
+                refreshHead(true);
                 SegmentNodeState state = head.get();
                 if (state.hasProperty("token")
                         && state.getLong("timeout") >= currentTimeMillis()) {


Reply via email to