Author: chetanm
Date: Wed Nov 16 09:23:34 2016
New Revision: 1769948

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

Fix in segment

Modified:
    
jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java

Modified: 
jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java?rev=1769948&r1=1769947&r2=1769948&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
 Wed Nov 16 09:23:34 2016
@@ -238,7 +238,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();
             }
         }
@@ -249,11 +249,13 @@ public class SegmentNodeStore implements
      * Refreshes the head state. Should only be called while holding a
      * permit from the {@link #commitSemaphore}.
      */
-    private void refreshHead() {
+    private void refreshHead(boolean dispatchChanges) {
         SegmentNodeState state = store.getHead();
         if (!state.getRecordId().equals(head.get().getRecordId())) {
             head.set(state);
-            changeDispatcher.contentChanged(state.getChildNode(ROOT), null);
+            if (dispatchChanges) {
+                changeDispatcher.contentChanged(state.getChildNode(ROOT), 
null);
+            }
         }
     }
 
@@ -268,7 +270,7 @@ public class SegmentNodeStore implements
     public NodeState getRoot() {
         if (commitSemaphore.tryAcquire()) {
             try {
-                refreshHead();
+                refreshHead(true);
             } finally {
                 commitSemaphore.release();
             }
@@ -281,7 +283,7 @@ public class SegmentNodeStore implements
     public NodeState getSuperRoot() {
         if (commitSemaphore.tryAcquire()) {
             try {
-                refreshHead();
+                refreshHead(true);
             } finally {
                 commitSemaphore.release();
             }
@@ -415,7 +417,7 @@ public class SegmentNodeStore implements
         public Boolean call() {
             long now = System.currentTimeMillis();
 
-            refreshHead();
+            refreshHead(true);
 
             SegmentNodeState state = head.get();
             SegmentNodeBuilder builder = state.builder();
@@ -446,7 +448,7 @@ public class SegmentNodeStore implements
 
             SegmentNodeState newState = builder.getNodeState();
             if (store.setHead(state, newState)) {
-                refreshHead();
+                refreshHead(false);
                 return true;
             } else {
                 return false;
@@ -508,7 +510,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();
@@ -519,7 +521,7 @@ public class SegmentNodeStore implements
                         cp.remove();
                         SegmentNodeState newState = builder.getNodeState();
                         if (store.setHead(state, newState)) {
-                            refreshHead();
+                            refreshHead(false);
                             return true;
                         }
                     }
@@ -558,11 +560,11 @@ public class SegmentNodeStore implements
         }
 
         private boolean setHead(SegmentNodeState before, SegmentNodeState 
after) {
-            refreshHead();
+            refreshHead(true);
             if (store.setHead(before, after)) {
                 head.set(after);
                 changeDispatcher.contentChanged(after.getChildNode(ROOT), 
info);
-                refreshHead();
+                refreshHead(true);
                 return true;
             } else {
                 return false;
@@ -597,7 +599,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