Author: adulceanu
Date: Thu May  4 08:34:40 2017
New Revision: 1793751

URL: http://svn.apache.org/viewvc?rev=1793751&view=rev
Log:
OAK-6138 - Remove addObserver method from Scheduler API

Modified:
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/Scheduler.java

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=1793751&r1=1793750&r2=1793751&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
 Thu May  4 08:34:40 2017
@@ -177,7 +177,11 @@ public class SegmentNodeStore implements
 
     @Override
     public Closeable addObserver(Observer observer) {
-        return scheduler.addObserver(observer);
+        if (scheduler instanceof Observable) {
+            return ((Observable) scheduler).addObserver(observer);
+        }
+        
+        return () -> {};
     }
 
     @Override @Nonnull

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java?rev=1793751&r1=1793750&r2=1793751&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/LockBasedScheduler.java
 Thu May  4 08:34:40 2017
@@ -42,6 +42,7 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.SegmentReader;
 import org.apache.jackrabbit.oak.spi.commit.ChangeDispatcher;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
+import org.apache.jackrabbit.oak.spi.commit.Observable;
 import org.apache.jackrabbit.oak.spi.commit.Observer;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -50,14 +51,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class LockBasedScheduler implements Scheduler {
-    private static final Closeable NOOP = new Closeable() {
-
-        @Override
-        public void close() {
-            // This method was intentionally left blank.
-        }
-
-    };
 
     public static class LockBasedSchedulerBuilder {
         @Nonnull
@@ -97,7 +90,11 @@ public class LockBasedScheduler implemen
 
         @Nonnull
         public LockBasedScheduler build() {
-            return new LockBasedScheduler(this);
+            if (dispatchChanges) {
+                return new ObservableLockBasedScheduler(this);
+            } else {
+                return new LockBasedScheduler(this);
+            }
         }
 
     }
@@ -135,9 +132,7 @@ public class LockBasedScheduler implemen
     @Nonnull
     private final Revisions revisions;
 
-    private final AtomicReference<SegmentNodeState> head;
-
-    private final ChangeDispatcher changeDispatcher;
+    protected final AtomicReference<SegmentNodeState> head;
 
     private final SegmentNodeStoreStats stats;
 
@@ -149,24 +144,11 @@ public class LockBasedScheduler implemen
         this.reader = builder.reader;
         this.revisions = builder.revisions;
         this.head = new 
AtomicReference<SegmentNodeState>(reader.readHeadState(revisions));
-        if (builder.dispatchChanges) {
-            this.changeDispatcher = new 
ChangeDispatcher(head.get().getChildNode(ROOT));
-        } else {
-            this.changeDispatcher = null;
-        }
 
         this.stats = new SegmentNodeStoreStats(builder.statsProvider);
     }
 
     @Override
-    public Closeable addObserver(Observer observer) {
-        if (changeDispatcher != null) {
-            return changeDispatcher.addObserver(observer);
-        }
-        return NOOP;
-    }
-
-    @Override
     public NodeState getHeadNodeState() {
         if (commitSemaphore.tryAcquire()) {
             try {
@@ -195,10 +177,8 @@ public class LockBasedScheduler implemen
         }
     }
 
-    private void contentChanged(NodeState root, CommitInfo info) {
-        if (changeDispatcher != null) {
-            changeDispatcher.contentChanged(root, info);
-        }
+    protected void contentChanged(NodeState root, CommitInfo info) {
+        // do nothing without a change dispatcher
     }
 
     @Override
@@ -319,6 +299,25 @@ public class LockBasedScheduler implemen
         return false;
     }
 
+    private static class ObservableLockBasedScheduler extends 
LockBasedScheduler implements Observable {
+        private final ChangeDispatcher changeDispatcher;
+        
+        public ObservableLockBasedScheduler(LockBasedSchedulerBuilder builder) 
{
+            super(builder);
+            this.changeDispatcher = new 
ChangeDispatcher(head.get().getChildNode(ROOT));
+        }
+
+        @Override
+        protected void contentChanged(NodeState root, CommitInfo info) {
+            changeDispatcher.contentChanged(root, info);
+        }
+        
+        @Override
+        public Closeable addObserver(Observer observer) {
+            return changeDispatcher.addObserver(observer);
+        }
+    }
+
     private final class CPCreator implements Callable<Boolean> {
 
         private final String name;

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/Scheduler.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/Scheduler.java?rev=1793751&r1=1793750&r2=1793751&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/Scheduler.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/scheduler/Scheduler.java
 Thu May  4 08:34:40 2017
@@ -17,13 +17,11 @@
 
 package org.apache.jackrabbit.oak.segment.scheduler;
 
-import java.io.Closeable;
 import java.util.Map;
 
 import javax.annotation.Nonnull;
 
 import org.apache.jackrabbit.oak.api.CommitFailedException;
-import org.apache.jackrabbit.oak.spi.commit.Observer;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
 /**
@@ -90,13 +88,4 @@ public interface Scheduler {
      * @return the latest state.
      */
     NodeState getHeadNodeState();
-    
-    /**
-     * Register a new {@code Observer}. Clients need to call {@link 
Closeable#close()} 
-     * to stop getting notifications on the registered observer and to free up 
any resources
-     * associated with the registration.
-     * 
-     * @return a {@code Closeable} instance.
-     */
-    Closeable addObserver(Observer observer); 
 }
\ No newline at end of file


Reply via email to