You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2018/07/19 11:56:18 UTC

svn commit: r1836266 - in /jackrabbit/oak/trunk/oak-store-document/src: main/java/org/apache/jackrabbit/oak/plugins/document/ main/java/org/apache/jackrabbit/oak/plugins/document/mongo/ main/java/org/apache/jackrabbit/oak/plugins/document/mongo/replica...

Author: mreutegg
Date: Thu Jul 19 11:56:18 2018
New Revision: 1836266

URL: http://svn.apache.org/viewvc?rev=1836266&view=rev
Log:
OAK-7644: Remove strategy to optimize secondary reads

Added:
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReplicaSetStatus.java
      - copied, changed from r1836265, jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/replica/ReplicaSetStatus.java
    jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReplicaSetStatusTest.java
      - copied, changed from r1836265, jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/replica/ReplicaSetStatusTest.java
Removed:
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionListener.java
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/replica/
    jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/replica/
Modified:
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentNodeStoreBuilderBase.java
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LeaseCheckDocumentStoreWrapper.java
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java
    jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CountingDocumentStore.java
    jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreWrapper.java
    jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReadPreferenceIT.java

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java?rev=1836266&r1=1836265&r2=1836266&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java Thu Jul 19 11:56:18 2018
@@ -1010,10 +1010,6 @@ public final class NodeDocument extends
             }
         }
 
-        if (store instanceof RevisionListener) {
-            ((RevisionListener) store).updateAccessedRevision(lastRevision, nodeStore.getClusterId());
-        }
-
         return new DocumentNodeState(nodeStore, path, readRevision, props, hasChildren(), lastRevision);
     }
 

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentNodeStoreBuilderBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentNodeStoreBuilderBase.java?rev=1836266&r1=1836265&r2=1836266&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentNodeStoreBuilderBase.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentNodeStoreBuilderBase.java Thu Jul 19 11:56:18 2018
@@ -50,7 +50,6 @@ public abstract class MongoDocumentNodeS
 
     private static final Logger LOG = LoggerFactory.getLogger(MongoDocumentNodeStoreBuilder.class);
 
-    private String mongoUri;
     private boolean socketKeepAlive = true;
     private MongoStatus mongoStatus;
     private long maxReplicationLagMillis = TimeUnit.HOURS.toMillis(6);
@@ -73,8 +72,6 @@ public abstract class MongoDocumentNodeS
     public T setMongoDB(@NotNull String uri,
                         @NotNull String name,
                         int blobCacheSizeMB) {
-        this.mongoUri = uri;
-
         CompositeServerMonitorListener serverMonitorListener = new CompositeServerMonitorListener();
         MongoClientOptions.Builder options = MongoConnection.getDefaultBuilder();
         options.addServerMonitorListener(serverMonitorListener);
@@ -217,16 +214,6 @@ public abstract class MongoDocumentNodeS
     }
 
     /**
-     * Returns the Mongo URI used in the {@link #setMongoDB(String, String, int)} method.
-     *
-     * @return the Mongo URI or null if the {@link #setMongoDB(String, String, int)} method hasn't
-     * been called.
-     */
-    String getMongoUri() {
-        return mongoUri;
-    }
-
-    /**
      * Returns the status of the Mongo server configured in the {@link #setMongoDB(String, String, int)} method.
      *
      * @return the status or null if the {@link #setMongoDB(String, String, int)} method hasn't

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java?rev=1836266&r1=1836265&r2=1836266&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java Thu Jul 19 11:56:18 2018
@@ -59,8 +59,6 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.document.JournalEntry;
 import org.apache.jackrabbit.oak.plugins.document.NodeDocument;
 import org.apache.jackrabbit.oak.plugins.document.Revision;
-import org.apache.jackrabbit.oak.plugins.document.RevisionListener;
-import org.apache.jackrabbit.oak.plugins.document.RevisionVector;
 import org.apache.jackrabbit.oak.plugins.document.StableRevisionComparator;
 import org.apache.jackrabbit.oak.plugins.document.UpdateOp;
 import org.apache.jackrabbit.oak.plugins.document.UpdateOp.Condition;
@@ -71,8 +69,6 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.document.cache.CacheInvalidationStats;
 import org.apache.jackrabbit.oak.plugins.document.cache.ModificationStamp;
 import org.apache.jackrabbit.oak.plugins.document.cache.NodeDocumentCache;
-import org.apache.jackrabbit.oak.plugins.document.mongo.replica.LocalChanges;
-import org.apache.jackrabbit.oak.plugins.document.mongo.replica.ReplicaSetInfo;
 import org.apache.jackrabbit.oak.plugins.document.locks.NodeDocumentLocks;
 import org.apache.jackrabbit.oak.plugins.document.locks.StripedNodeDocumentLocks;
 import org.apache.jackrabbit.oak.plugins.document.util.Utils;
@@ -126,7 +122,7 @@ import static org.apache.jackrabbit.oak.
 /**
  * A document store that uses MongoDB as the backend.
  */
-public class MongoDocumentStore implements DocumentStore, RevisionListener {
+public class MongoDocumentStore implements DocumentStore {
 
     private static final Logger LOG = LoggerFactory.getLogger(MongoDocumentStore.class);
     private static final PerfLogger PERFLOG = new PerfLogger(
@@ -160,12 +156,6 @@ public class MongoDocumentStore implemen
 
     private Clock clock = Clock.SIMPLE;
 
-    private ReplicaSetInfo replicaInfo;
-
-    private RevisionVector mostRecentAccessedRevisions;
-
-    LocalChanges localChanges;
-
     private final long maxReplicationLagMillis;
 
     /**
@@ -197,24 +187,6 @@ public class MongoDocumentStore implemen
             Long.getLong("oak.mongo.maxQueryTimeMS", TimeUnit.MINUTES.toMillis(1));
 
     /**
-     * How often in milliseconds the MongoDocumentStore should estimate the
-     * replication lag.
-     * <p>
-     * Default is 60'000 (one minute).
-     */
-    private long estimationPullFrequencyMS =
-            Long.getLong("oak.mongo.estimationPullFrequencyMS", TimeUnit.SECONDS.toMillis(5));
-
-    /**
-     * Fallback to the old secondary-routing strategy. Setting this to true
-     * disables the optimisation introduced in the OAK-3865.
-     * <p>
-     * Default is false.
-     */
-    private boolean fallbackSecondaryStrategy =
-            Boolean.getBoolean("oak.mongo.fallbackSecondaryStrategy");
-
-    /**
      * The number of documents to put into one bulk update.
      * <p>
      * Default is 30.
@@ -288,15 +260,6 @@ public class MongoDocumentStore implemen
 
         maxReplicationLagMillis = builder.getMaxReplicationLagMillis();
 
-        if (fallbackSecondaryStrategy) {
-            replicaInfo = null;
-            localChanges = null;
-        } else {
-            replicaInfo = new ReplicaSetInfo(clock, client, dbName, builder.getMongoUri(), estimationPullFrequencyMS, maxReplicationLagMillis, builder.getExecutor());
-            Thread replicaInfoThread = new Thread(replicaInfo, "MongoDocumentStore replica set info provider");
-            replicaInfoThread.setDaemon(true);
-            replicaInfoThread.start();
-        }
         useClientSession = !builder.isClientSessionDisabled()
                 && Boolean.parseBoolean(System.getProperty("oak.mongo.clientSession", "true"));
 
@@ -582,7 +545,7 @@ public class MongoDocumentStore implemen
         boolean isSlaveOk = false;
         boolean docFound = true;
         try {
-            ReadPreference readPreference = getMongoReadPreference(collection, null, key, docReadPref);
+            ReadPreference readPreference = getMongoReadPreference(collection, null, docReadPref);
             MongoCollection<BasicDBObject> dbCollection = getDBCollection(collection, readPreference);
 
             if(readPreference.isSlaveOk()){
@@ -716,7 +679,7 @@ public class MongoDocumentStore implemen
         }
         try {
             ReadPreference readPreference =
-                    getMongoReadPreference(collection, parentId, null, getDefaultReadPreference(collection));
+                    getMongoReadPreference(collection, parentId, getDefaultReadPreference(collection));
 
             if(readPreference.isSlaveOk()){
                 isSlaveOk = true;
@@ -1008,7 +971,6 @@ public class MongoDocumentStore implemen
                 if (collection == Collection.NODES) {
                     NodeDocument newDoc = (NodeDocument) applyChanges(collection, oldDoc, updateOp);
                     nodesCache.put(newDoc);
-                    updateLocalChanges(newDoc);
                 }
                 oldDoc.seal();
             } else if (upsert) {
@@ -1016,7 +978,6 @@ public class MongoDocumentStore implemen
                     NodeDocument doc = (NodeDocument) collection.newDocument(this);
                     UpdateUtils.applyChanges(doc, updateOp);
                     nodesCache.putIfAbsent(doc);
-                    updateLocalChanges(doc);
                 }
             } else {
                 // updateOp without conditions and not an upsert
@@ -1188,10 +1149,6 @@ public class MongoDocumentStore implemen
                     }
                 }
 
-                for (NodeDocument doc : docsToCache) {
-                    updateLocalChanges(doc);
-                }
-
                 nodesCache.putNonConflictingDocs(tracker, docsToCache);
             }
             oldDocs.keySet().removeAll(bulkResult.failedUpdates);
@@ -1374,7 +1331,6 @@ public class MongoDocumentStore implemen
                 if (collection == Collection.NODES) {
                     for (T doc : docs) {
                         nodesCache.putIfAbsent((NodeDocument) doc);
-                        updateLocalChanges((NodeDocument) doc);
                     }
                 }
                 insertSuccess = true;
@@ -1425,11 +1381,10 @@ public class MongoDocumentStore implemen
         return modCounts;
     }
 
-    DocumentReadPreference getReadPreference(int maxCacheAge){
-        long lag = fallbackSecondaryStrategy ? maxReplicationLagMillis : replicaInfo.getLag();
+    DocumentReadPreference getReadPreference(int maxCacheAge) {
         if (withClientSession()) {
             return DocumentReadPreference.PREFER_SECONDARY;
-        } else if(maxCacheAge >= 0 && maxCacheAge < lag) {
+        } else if(maxCacheAge >= 0 && maxCacheAge < maxReplicationLagMillis) {
             return DocumentReadPreference.PRIMARY;
         } else if(maxCacheAge == Integer.MAX_VALUE){
             return DocumentReadPreference.PREFER_SECONDARY;
@@ -1450,7 +1405,6 @@ public class MongoDocumentStore implemen
 
     <T extends Document> ReadPreference getMongoReadPreference(@NotNull Collection<T> collection,
                                                                @Nullable String parentId,
-                                                               @Nullable String documentId,
                                                                @NotNull DocumentReadPreference preference) {
         switch(preference){
             case PRIMARY:
@@ -1472,7 +1426,7 @@ public class MongoDocumentStore implemen
                 boolean secondarySafe;
                 if (withClientSession() && secondariesWithinAcceptableLag()) {
                     secondarySafe = true;
-                } else if (fallbackSecondaryStrategy) {
+                } else {
                    // This is not quite accurate, because ancestors
                     // are updated in a background thread (_lastRev). We
                     // will need to revise this for low maxReplicationLagMillis
@@ -1487,14 +1441,6 @@ public class MongoDocumentStore implemen
                         NodeDocument cachedDoc = nodesCache.getIfPresent(parentId);
                         secondarySafe = cachedDoc != null && !cachedDoc.hasBeenModifiedSince(replicationSafeLimit);
                     }
-                } else if (localChanges != null) {
-                    secondarySafe = true;
-                    secondarySafe &= collection == Collection.NODES;
-                    secondarySafe &= documentId == null || !localChanges.mayContain(documentId);
-                    secondarySafe &= parentId == null || !localChanges.mayContainChildrenOf(parentId);
-                    secondarySafe &= mostRecentAccessedRevisions == null || replicaInfo.isMoreRecentThan(mostRecentAccessedRevisions);
-                } else { // localChanges not initialized yet
-                    secondarySafe = false;
                 }
 
                 ReadPreference readPreference;
@@ -1591,9 +1537,6 @@ public class MongoDocumentStore implemen
 
     @Override
     public void dispose() {
-        if (replicaInfo != null) {
-            replicaInfo.stop();
-        }
         client.close();
         try {
             nodesCache.close();
@@ -1806,14 +1749,6 @@ public class MongoDocumentStore implemen
         this.stats = stats;
     }
 
-    void setReplicaInfo(ReplicaSetInfo replicaInfo) {
-        if (this.replicaInfo != null) {
-            this.replicaInfo.stop();
-        }
-        this.replicaInfo = replicaInfo;
-        this.replicaInfo.addListener(localChanges);
-    }
-
     @Override
     public long determineServerTimeDifferenceMillis() {
         // the assumption is that the network delay from this instance
@@ -1865,30 +1800,6 @@ public class MongoDocumentStore implemen
         return 0;
     }
 
-    @Override
-    public synchronized void updateAccessedRevision(RevisionVector revisions, int clusterId) {
-        if (localChanges == null && replicaInfo != null) {
-            localChanges = new LocalChanges(clusterId);
-            replicaInfo.addListener(localChanges);
-        }
-
-        RevisionVector previousValue = mostRecentAccessedRevisions;
-        if (mostRecentAccessedRevisions == null) {
-            mostRecentAccessedRevisions = revisions;
-        } else {
-            mostRecentAccessedRevisions = mostRecentAccessedRevisions.pmax(revisions);
-        }
-        if (LOG.isDebugEnabled() && !mostRecentAccessedRevisions.equals(previousValue)) {
-            LOG.debug("Most recent accessed revisions: {}", mostRecentAccessedRevisions);
-        }
-    }
-
-    private void updateLocalChanges(NodeDocument doc) {
-        if (localChanges != null) {
-            localChanges.add(doc.getId(), Revision.getCurrentTimestamp());
-        }
-    }
-
     private <T extends Document> DocumentStoreException handleException(Throwable ex,
                                                                         Collection<T> collection,
                                                                         Iterable<String> ids) {

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java?rev=1836266&r1=1836265&r2=1836266&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java Thu Jul 19 11:56:18 2018
@@ -32,7 +32,6 @@ import com.mongodb.event.ServerHeartbeat
 import com.mongodb.event.ServerMonitorListener;
 import com.mongodb.session.ClientSession;
 
-import org.apache.jackrabbit.oak.plugins.document.mongo.replica.ReplicaSetStatus;
 import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

Copied: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReplicaSetStatus.java (from r1836265, jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/replica/ReplicaSetStatus.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReplicaSetStatus.java?p2=jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReplicaSetStatus.java&p1=jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/replica/ReplicaSetStatus.java&r1=1836265&r2=1836266&rev=1836266&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/replica/ReplicaSetStatus.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReplicaSetStatus.java Thu Jul 19 11:56:18 2018
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.jackrabbit.oak.plugins.document.mongo.replica;
+package org.apache.jackrabbit.oak.plugins.document.mongo;
 
 import java.util.Collection;
 import java.util.Date;

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LeaseCheckDocumentStoreWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LeaseCheckDocumentStoreWrapper.java?rev=1836266&r1=1836265&r2=1836266&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LeaseCheckDocumentStoreWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LeaseCheckDocumentStoreWrapper.java Thu Jul 19 11:56:18 2018
@@ -27,8 +27,6 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.document.Document;
 import org.apache.jackrabbit.oak.plugins.document.DocumentStore;
 import org.apache.jackrabbit.oak.plugins.document.DocumentStoreException;
-import org.apache.jackrabbit.oak.plugins.document.RevisionListener;
-import org.apache.jackrabbit.oak.plugins.document.RevisionVector;
 import org.apache.jackrabbit.oak.plugins.document.UpdateOp;
 import org.apache.jackrabbit.oak.plugins.document.cache.CacheInvalidationStats;
 import org.jetbrains.annotations.NotNull;
@@ -39,7 +37,7 @@ import org.jetbrains.annotations.NotNull
  * <p>
  * @see "https://issues.apache.org/jira/browse/OAK-2739 for more details"
  */
-public final class LeaseCheckDocumentStoreWrapper implements DocumentStore, RevisionListener {
+public final class LeaseCheckDocumentStoreWrapper implements DocumentStore {
 
     private final DocumentStore delegate;
     private final ClusterNodeInfo clusterNodeInfo;
@@ -212,12 +210,4 @@ public final class LeaseCheckDocumentSto
         performLeaseCheck();
         return delegate.determineServerTimeDifferenceMillis();
     }
-
-    @Override
-    public void updateAccessedRevision(RevisionVector revision, int currentClusterId) {
-        if (delegate instanceof RevisionListener) {
-            ((RevisionListener) delegate).updateAccessedRevision(revision, currentClusterId);
-        }
-    }
-
 }

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java?rev=1836266&r1=1836265&r2=1836266&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java Thu Jul 19 11:56:18 2018
@@ -26,8 +26,6 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.document.Document;
 import org.apache.jackrabbit.oak.plugins.document.DocumentStore;
 import org.apache.jackrabbit.oak.plugins.document.DocumentStoreException;
-import org.apache.jackrabbit.oak.plugins.document.RevisionListener;
-import org.apache.jackrabbit.oak.plugins.document.RevisionVector;
 import org.apache.jackrabbit.oak.plugins.document.UpdateOp;
 import org.apache.jackrabbit.oak.plugins.document.cache.CacheInvalidationStats;
 import org.jetbrains.annotations.NotNull;
@@ -37,7 +35,7 @@ import org.slf4j.LoggerFactory;
 /**
  * Implements a <code>DocumentStore</code> wrapper and logs all calls.
  */
-public class LoggingDocumentStoreWrapper implements DocumentStore, RevisionListener {
+public class LoggingDocumentStoreWrapper implements DocumentStore {
 
     private static final Logger LOG = LoggerFactory.getLogger(LoggingDocumentStoreWrapper.class);
 
@@ -416,12 +414,4 @@ public class LoggingDocumentStoreWrapper
         }
         LOG.info(out);
     }
-
-    @Override
-    public void updateAccessedRevision(RevisionVector revision, int currentClusterId) {
-        logMethod("updateAccessedRevision", revision);
-        if (store instanceof RevisionListener) {
-            ((RevisionListener) store).updateAccessedRevision(revision, currentClusterId);
-        }
-    }
 }

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java?rev=1836266&r1=1836265&r2=1836266&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java Thu Jul 19 11:56:18 2018
@@ -24,8 +24,6 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.document.Document;
 import org.apache.jackrabbit.oak.plugins.document.DocumentStore;
 import org.apache.jackrabbit.oak.plugins.document.DocumentStoreException;
-import org.apache.jackrabbit.oak.plugins.document.RevisionListener;
-import org.apache.jackrabbit.oak.plugins.document.RevisionVector;
 import org.apache.jackrabbit.oak.plugins.document.UpdateOp;
 import org.apache.jackrabbit.oak.plugins.document.cache.CacheInvalidationStats;
 import org.jetbrains.annotations.NotNull;
@@ -34,7 +32,7 @@ import org.jetbrains.annotations.NotNull
  * Implements a <code>DocumentStore</code> wrapper which synchronizes on all
  * methods.
  */
-public class SynchronizingDocumentStoreWrapper implements DocumentStore, RevisionListener {
+public class SynchronizingDocumentStoreWrapper implements DocumentStore {
 
     final DocumentStore store;
 
@@ -159,11 +157,4 @@ public class SynchronizingDocumentStoreW
     public synchronized Map<String, String> getStats() {
         return store.getStats();
     }
-
-    @Override
-    public synchronized void updateAccessedRevision(RevisionVector revision, int currentClusterId) {
-        if (store instanceof RevisionListener) {
-            ((RevisionListener) store).updateAccessedRevision(revision, currentClusterId);
-        }
-    }
 }

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java?rev=1836266&r1=1836265&r2=1836266&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java Thu Jul 19 11:56:18 2018
@@ -30,8 +30,6 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.document.Document;
 import org.apache.jackrabbit.oak.plugins.document.DocumentStore;
 import org.apache.jackrabbit.oak.plugins.document.DocumentStoreException;
-import org.apache.jackrabbit.oak.plugins.document.RevisionListener;
-import org.apache.jackrabbit.oak.plugins.document.RevisionVector;
 import org.apache.jackrabbit.oak.plugins.document.UpdateOp;
 import org.apache.jackrabbit.oak.plugins.document.cache.CacheInvalidationStats;
 import org.jetbrains.annotations.NotNull;
@@ -41,7 +39,7 @@ import org.jetbrains.annotations.Nullabl
  * A DocumentStore wrapper that can be used to log and also time DocumentStore
  * calls.
  */
-public class TimingDocumentStoreWrapper implements DocumentStore, RevisionListener {
+public class TimingDocumentStoreWrapper implements DocumentStore {
 
     private static final boolean DEBUG = Boolean.parseBoolean(System.getProperty("base.debug", "true"));
     private static final AtomicInteger NEXT_ID = new AtomicInteger();
@@ -406,19 +404,6 @@ public class TimingDocumentStoreWrapper
         }
     }
 
-    @Override
-    public void updateAccessedRevision(RevisionVector revision, int currentClusterId) {
-        try {
-            long start = now();
-            if (base instanceof RevisionListener) {
-                ((RevisionListener) base).updateAccessedRevision(revision, currentClusterId);
-            }
-            updateAndLogTimes("updateAccessedRevision", start, 0, 0);
-        } catch (Exception e) {
-            throw convert(e);
-        }
-   }
-
     private void logCommonCall(long start, String key) {
         int time = (int) (System.currentTimeMillis() - start);
         if (time <= 0) {

Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CountingDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CountingDocumentStore.java?rev=1836266&r1=1836265&r2=1836266&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CountingDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CountingDocumentStore.java Thu Jul 19 11:56:18 2018
@@ -24,7 +24,7 @@ import org.apache.jackrabbit.oak.cache.C
 import org.apache.jackrabbit.oak.plugins.document.cache.CacheInvalidationStats;
 import org.jetbrains.annotations.NotNull;
 
-public class CountingDocumentStore implements DocumentStore, RevisionListener {
+public class CountingDocumentStore implements DocumentStore {
 
     private DocumentStore delegate;
 
@@ -233,11 +233,4 @@ public class CountingDocumentStore imple
     public long determineServerTimeDifferenceMillis() {
         return delegate.determineServerTimeDifferenceMillis();
     }
-
-    @Override
-    public void updateAccessedRevision(RevisionVector revision, int currentClusterId) {
-        if (delegate instanceof RevisionListener) {
-            ((RevisionListener) delegate).updateAccessedRevision(revision, currentClusterId);
-        }
-    }
 }

Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreWrapper.java?rev=1836266&r1=1836265&r2=1836266&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreWrapper.java Thu Jul 19 11:56:18 2018
@@ -27,7 +27,7 @@ import org.jetbrains.annotations.NotNull
  * A DocumentStore implementation which wraps another store and delegates all
  * calls to it.
  */
-public class DocumentStoreWrapper implements DocumentStore, RevisionListener {
+public class DocumentStoreWrapper implements DocumentStore {
 
     protected final DocumentStore store;
 
@@ -169,11 +169,4 @@ public class DocumentStoreWrapper implem
     public long determineServerTimeDifferenceMillis() {
         return store.determineServerTimeDifferenceMillis();
     }
-
-    @Override
-    public void updateAccessedRevision(RevisionVector revision, int currentClusterId) {
-        if (store instanceof RevisionListener) {
-            ((RevisionListener) store).updateAccessedRevision(revision, currentClusterId);
-        }
-    }
 }

Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReadPreferenceIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReadPreferenceIT.java?rev=1836266&r1=1836265&r2=1836266&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReadPreferenceIT.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReadPreferenceIT.java Thu Jul 19 11:56:18 2018
@@ -23,27 +23,18 @@ import com.mongodb.ReadPreference;
 
 import org.apache.jackrabbit.oak.plugins.document.AbstractMongoConnectionTest;
 import org.apache.jackrabbit.oak.plugins.document.DocumentMK;
-import org.apache.jackrabbit.oak.plugins.document.DocumentNodeState;
 import org.apache.jackrabbit.oak.plugins.document.LeaseCheckMode;
 import org.apache.jackrabbit.oak.plugins.document.MongoUtils;
-import org.apache.jackrabbit.oak.plugins.document.Revision;
-import org.apache.jackrabbit.oak.plugins.document.RevisionVector;
-import org.apache.jackrabbit.oak.plugins.document.mongo.replica.ReplicaSetInfo;
-import org.apache.jackrabbit.oak.plugins.document.mongo.replica.ReplicaSetInfoMock;
 import org.apache.jackrabbit.oak.plugins.document.util.MongoConnection;
-import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
-import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
-import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
-import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.apache.jackrabbit.oak.stats.Clock;
 import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
 
 import static org.apache.jackrabbit.oak.plugins.document.Collection.NODES;
 import static org.apache.jackrabbit.oak.plugins.document.Collection.SETTINGS;
 import static org.apache.jackrabbit.oak.plugins.document.mongo.MongoDocumentStore.DocumentReadPreference;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 public class ReadPreferenceIT extends AbstractMongoConnectionTest {
@@ -54,20 +45,14 @@ public class ReadPreferenceIT extends Ab
 
     private Clock clock;
 
-    private ReplicaSetInfoMock replica;
-
-    private ReplicaSetInfoMock.RevisionBuilder primary;
-
-    private ReplicaSetInfoMock.RevisionBuilder secondary;
-
     @Override
-    public void setUpConnection() throws Exception {
+    public void setUpConnection() {
         clock = new Clock.Virtual();
         setRevisionClock(clock);
         setClusterNodeInfoClock(clock);
         mongoConnection = connectionFactory.getConnection();
+        assertNotNull(mongoConnection);
         MongoUtils.dropCollections(mongoConnection.getDBName());
-        replica = ReplicaSetInfoMock.create(clock);
         mk = new DocumentMK.Builder()
                 .clock(clock)
                 .setClusterId(1)
@@ -88,15 +73,6 @@ public class ReadPreferenceIT extends Ab
                 .open();
     }
 
-    @Before
-    public void createReplicaSet() {
-        replica = ReplicaSetInfoMock.create(clock);
-
-        primary = replica.addInstance(ReplicaSetInfo.MemberState.PRIMARY, "p1");
-        secondary = replica.addInstance(ReplicaSetInfo.MemberState.SECONDARY, "s1");
-        mongoDS.setReplicaInfo(replica);
-    }
-
     @After
     public void tearDown() {
         // reset readWrite mode before shutting down
@@ -105,131 +81,37 @@ public class ReadPreferenceIT extends Ab
     }
 
     @Test
-    public void testPreferenceConversion() throws Exception{
-        primary.addRevisions(200);
-        secondary.addRevisions(0);
-        replica.updateRevisions();
-        clock.waitUntil(500);
-        assertEquals(300, replica.getLag());
-
-        //For cacheAge < replicationLag result should be primary
-        assertEquals(DocumentReadPreference.PRIMARY, mongoDS.getReadPreference(0));
-        assertEquals(DocumentReadPreference.PRIMARY,
-                mongoDS.getReadPreference((int) (replica.getLag() - 100)));
-
-        //For Integer.MAX_VALUE it should be secondary as caller intends that value is stable
-        assertEquals(DocumentReadPreference.PREFER_SECONDARY,
-                mongoDS.getReadPreference(Integer.MAX_VALUE));
-
-        //For all other cases depends on age
-        assertEquals(DocumentReadPreference.PREFER_SECONDARY_IF_OLD_ENOUGH,
-                mongoDS.getReadPreference(-1));
-        assertEquals(DocumentReadPreference.PREFER_SECONDARY_IF_OLD_ENOUGH,
-                mongoDS.getReadPreference((int) (replica.getLag() + 100)));
-    }
-
-    @Test
-    public void testMongoReadPreferencesDefault() throws Exception{
+    public void testMongoReadPreferencesDefault() {
         // start with read preference set to primary
         mongoDS.setReadWriteMode(rwMode(ReadPreference.primary()));
 
         assertEquals(ReadPreference.primary(),
-                mongoDS.getMongoReadPreference(NODES,"foo", null, DocumentReadPreference.PRIMARY));
+                mongoDS.getMongoReadPreference(NODES,"foo", DocumentReadPreference.PRIMARY));
 
         assertEquals(ReadPreference.primaryPreferred(),
-                mongoDS.getMongoReadPreference(NODES,"foo", null, DocumentReadPreference.PREFER_PRIMARY));
+                mongoDS.getMongoReadPreference(NODES,"foo", DocumentReadPreference.PREFER_PRIMARY));
 
         //By default Mongo read preference is primary
         assertEquals(ReadPreference.primary(),
-                mongoDS.getMongoReadPreference(NODES,"foo", null, DocumentReadPreference.PREFER_SECONDARY));
+                mongoDS.getMongoReadPreference(NODES,"foo", DocumentReadPreference.PREFER_SECONDARY));
 
         //Change the default and assert again
         mongoDS.setReadWriteMode(rwMode(ReadPreference.secondary()));
         assertEquals(ReadPreference.secondary(),
-                mongoDS.getMongoReadPreference(NODES,"foo", null, DocumentReadPreference.PREFER_SECONDARY));
+                mongoDS.getMongoReadPreference(NODES,"foo", DocumentReadPreference.PREFER_SECONDARY));
 
         //for case where parent age cannot be determined the preference should be primary
         assertEquals(ReadPreference.primary(),
-                mongoDS.getMongoReadPreference(NODES,"foo", null, DocumentReadPreference.PREFER_SECONDARY_IF_OLD_ENOUGH));
+                mongoDS.getMongoReadPreference(NODES,"foo", DocumentReadPreference.PREFER_SECONDARY_IF_OLD_ENOUGH));
 
         //For collection other than NODES always primary
         assertEquals(ReadPreference.primary(),
-                mongoDS.getMongoReadPreference(SETTINGS,"foo", null, DocumentReadPreference.PREFER_SECONDARY_IF_OLD_ENOUGH));
-
-    }
-
-    @Test
-    public void testMongoReadPreferences() throws Exception {
-        ReadPreference testPref = ReadPreference.secondary();
-        mongoDS.setReadWriteMode(rwMode(testPref));
-
-        NodeStore extNodeStore = mk2.getNodeStore();
-        NodeBuilder b1 = extNodeStore.getRoot().builder();
-        b1.child("x").child("y").setProperty("xyz", "123");
-        extNodeStore.merge(b1, EmptyHook.INSTANCE, CommitInfo.EMPTY);
-
-        // wait until the change is visible
-        NodeStore nodeStore = mk.getNodeStore();
-        while (true) {
-            if (nodeStore.getRoot().hasChildNode("x")) {
-                break;
-            } else {
-                Thread.sleep(100);
-            }
-        }
-
-        // the change hasn't been replicated yet, primary must be used
-        assertEquals(ReadPreference.primary(),
-                mongoDS.getMongoReadPreference(NODES, null, "/x/y", DocumentReadPreference.PREFER_SECONDARY_IF_OLD_ENOUGH));
-
-        // make the secondary up-to-date
-        DocumentNodeState ns = (DocumentNodeState) nodeStore.getRoot().getChildNode("x").getChildNode("y");
-        RevisionVector lastSeenRev = ns.getLastRevision().update(new Revision(Revision.getCurrentTimestamp(), 0, 1)); // add revision for the local cluster node
-
-        primary.set(lastSeenRev);
-        secondary.set(lastSeenRev);
-        replica.updateRevisions();
-
-        // change has been replicated by now, it's fine to use secondary
-        assertEquals(testPref,
-                mongoDS.getMongoReadPreference(NODES, null, "/x/y", DocumentReadPreference.PREFER_SECONDARY_IF_OLD_ENOUGH));
-    }
-
-    @Test
-    public void testMongoReadPreferencesForLocalChanges() throws Exception {
-        //Change the default
-        ReadPreference testPref = ReadPreference.secondary();
-        mongoDS.setReadWriteMode(rwMode(testPref));
-
-        NodeStore nodeStore = mk.getNodeStore();
-        NodeBuilder b1 = nodeStore.getRoot().builder();
-        b1.child("x").child("y");
-        nodeStore.merge(b1, EmptyHook.INSTANCE, CommitInfo.EMPTY);
-
-        mongoDS.invalidateCache();
-
-        // the local change hasn't been replicated yet, primary must be used
-        assertEquals(ReadPreference.primary(),
-                mongoDS.getMongoReadPreference(NODES, null, "/x/y", DocumentReadPreference.PREFER_SECONDARY_IF_OLD_ENOUGH));
+                mongoDS.getMongoReadPreference(SETTINGS,"foo", DocumentReadPreference.PREFER_SECONDARY_IF_OLD_ENOUGH));
 
-        // make the secondary up-to-date
-        long now = Revision.getCurrentTimestamp();
-        primary.addRevision(now, 0, 1, false);
-        primary.addRevision(now, 0, 2, false);
-        secondary.addRevision(now, 0, 1, false);
-        secondary.addRevision(now, 0, 2, false);
-        replica.updateRevisions();
-
-        // local change has been replicated by now, it's fine to use secondary
-        for (int i = 0; i < 400; i++) {
-            assertEquals(testPref,
-                    mongoDS.getMongoReadPreference(NODES, null, "/x/y", DocumentReadPreference.PREFER_SECONDARY_IF_OLD_ENOUGH));
-            Thread.sleep(5);
-        }
     }
 
     @Test
-    public void testReadWriteMode() throws Exception{
+    public void testReadWriteMode() {
         mongoDS.setReadWriteMode(rwMode(ReadPreference.primary()));
         assertEquals(ReadPreference.primary(), mongoDS.getConfiguredReadPreference(NODES));
 

Copied: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReplicaSetStatusTest.java (from r1836265, jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/replica/ReplicaSetStatusTest.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReplicaSetStatusTest.java?p2=jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReplicaSetStatusTest.java&p1=jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/replica/ReplicaSetStatusTest.java&r1=1836265&r2=1836266&rev=1836266&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/replica/ReplicaSetStatusTest.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/ReplicaSetStatusTest.java Thu Jul 19 11:56:18 2018
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.jackrabbit.oak.plugins.document.mongo.replica;
+package org.apache.jackrabbit.oak.plugins.document.mongo;
 
 import java.util.Arrays;
 import java.util.List;