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;