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/05/23 15:56:21 UTC
svn commit: r1832110 [2/2] - in /jackrabbit/oak/trunk: ./ oak-store-document/
oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/
oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/replica/
...
Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/MongoBlobStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/MongoBlobStoreTest.java?rev=1832110&r1=1832109&r2=1832110&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/MongoBlobStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/MongoBlobStoreTest.java Wed May 23 15:56:20 2018
@@ -16,6 +16,9 @@
*/
package org.apache.jackrabbit.oak.plugins.document.blob;
+import com.mongodb.ReadPreference;
+import com.mongodb.client.MongoDatabase;
+
import org.apache.jackrabbit.oak.plugins.document.MongoUtils;
import org.apache.jackrabbit.oak.plugins.document.mongo.MongoBlobStore;
import org.apache.jackrabbit.oak.plugins.document.util.MongoConnection;
@@ -48,7 +51,10 @@ public class MongoBlobStoreTest extends
mongoConnection = MongoUtils.getConnection();
MongoUtils.dropCollections(mongoConnection.getDatabase());
- MongoBlobStore blobStore = new MongoBlobStore(mongoConnection.getDatabase());
+ // Some tests assume read from the primary
+ MongoDatabase db = mongoConnection.getDatabase()
+ .withReadPreference(ReadPreference.primary());
+ MongoBlobStore blobStore = new MongoBlobStore(db);
blobStore.setBlockSize(128);
blobStore.setBlockSizeMin(48);
this.store = blobStore;
Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/cloud/MongoCloudBlobGCTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/cloud/MongoCloudBlobGCTest.java?rev=1832110&r1=1832109&r2=1832110&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/cloud/MongoCloudBlobGCTest.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/cloud/MongoCloudBlobGCTest.java Wed May 23 15:56:20 2018
@@ -19,7 +19,7 @@ package org.apache.jackrabbit.oak.plugin
import org.apache.jackrabbit.oak.plugins.blob.cloud.CloudBlobStore;
import org.apache.jackrabbit.oak.plugins.document.DocumentMK;
import org.apache.jackrabbit.oak.plugins.document.MongoBlobGCTest;
-import org.apache.jackrabbit.oak.plugins.document.MongoUtils;
+import org.apache.jackrabbit.oak.spi.blob.BlobStore;
import org.junit.After;
import org.junit.Assume;
import org.junit.Before;
@@ -30,8 +30,11 @@ import org.junit.BeforeClass;
*
*/
public class MongoCloudBlobGCTest extends MongoBlobGCTest {
+
+ private BlobStore blobStore;
+
@BeforeClass
- public static void setUpBeforeClass() throws Exception {
+ public static void setUpBeforeClass() {
try {
Assume.assumeNotNull(CloudStoreUtils.getBlobStore());
} catch (Exception e) {
@@ -40,20 +43,17 @@ public class MongoCloudBlobGCTest extend
}
@Before
- @Override
- public void setUpConnection() throws Exception {
- mongoConnection = connectionFactory.getConnection();
- MongoUtils.dropCollections(mongoConnection.getDBName());
- mk = new DocumentMK.Builder()
- .setMongoDB(mongoConnection.getMongoClient(), mongoConnection.getDBName())
- .setBlobStore(CloudStoreUtils.getBlobStore()).open();
+ public void setUpBlobStore() throws Exception {
+ blobStore = CloudStoreUtils.getBlobStore();
}
@After
- @Override
- public void tearDownConnection() throws Exception {
+ public void deleteBucket() {
((CloudBlobStore) mk.getNodeStore().getBlobStore()).deleteBucket();
- mk.dispose();
- MongoUtils.dropCollections(connectionFactory.getConnection().getDB());
+ }
+
+ @Override
+ protected DocumentMK.Builder addToBuilder(DocumentMK.Builder mk) {
+ return super.addToBuilder(mk).setBlobStore(blobStore);
}
}
Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/ds/MongoDataStoreBlobGCTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/ds/MongoDataStoreBlobGCTest.java?rev=1832110&r1=1832109&r2=1832110&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/ds/MongoDataStoreBlobGCTest.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/blob/ds/MongoDataStoreBlobGCTest.java Wed May 23 15:56:20 2018
@@ -45,22 +45,16 @@ public class MongoDataStoreBlobGCTest ex
}
}
+ @Override
+ protected DocumentMK.Builder addToBuilder(DocumentMK.Builder mk) {
+ return super.addToBuilder(mk).setBlobStore(blobStore);
+ }
+
@Before
@Override
public void setUpConnection() throws Exception {
startDate = new Date();
- mongoConnection = connectionFactory.getConnection();
- MongoUtils.dropCollections(mongoConnection.getDBName());
blobStore = DataStoreUtils.getBlobStore(folder.newFolder());
- mk = new DocumentMK.Builder().clock(getTestClock())
- .setMongoDB(mongoConnection.getMongoClient(), mongoConnection.getDBName())
- .setBlobStore(blobStore).open();
- }
-
- @After
- @Override
- public void tearDownConnection() throws Exception {
- mk.dispose();
- MongoUtils.dropCollections(connectionFactory.getConnection().getDB());
+ super.setUpConnection();
}
}
Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/CacheInvalidationIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/CacheInvalidationIT.java?rev=1832110&r1=1832109&r2=1832110&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/CacheInvalidationIT.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/CacheInvalidationIT.java Wed May 23 15:56:20 2018
@@ -19,6 +19,8 @@
package org.apache.jackrabbit.oak.plugins.document.mongo;
+import com.mongodb.ReadPreference;
+
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.plugins.document.AbstractMongoConnectionTest;
@@ -195,7 +197,7 @@ public class CacheInvalidationIT extends
private DocumentNodeStore createNS(int clusterId) throws Exception {
MongoConnection mc = connectionFactory.getConnection();
- return new DocumentMK.Builder()
+ DocumentNodeStore ns = new DocumentMK.Builder()
.setMongoDB(mc.getMongoClient(), mc.getDBName())
.setClusterId(clusterId)
//Set delay to 0 so that effect of changes are immediately reflected
@@ -203,6 +205,10 @@ public class CacheInvalidationIT extends
.setBundlingDisabled(true)
.setLeaseCheck(false)
.getNodeStore();
+ // enforce primary read preference, otherwise test fails on a replica
+ // set with a read preference configured to secondary.
+ MongoTestUtils.setReadPreference(ns, ReadPreference.primary());
+ return ns;
}
}
Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/JournalIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/JournalIT.java?rev=1832110&r1=1832109&r2=1832110&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/JournalIT.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/JournalIT.java Wed May 23 15:56:20 2018
@@ -19,6 +19,8 @@ package org.apache.jackrabbit.oak.plugin
import java.util.List;
import java.util.Set;
+import com.mongodb.ReadPreference;
+
import org.apache.jackrabbit.oak.cache.CacheStats;
import org.apache.jackrabbit.oak.plugins.document.AbstractJournalTest;
import org.apache.jackrabbit.oak.plugins.document.DocumentMK;
@@ -210,8 +212,13 @@ public class JournalIT extends AbstractJ
protected DocumentMK createMK(int clusterId, int asyncDelay) {
MongoConnection c = connectionFactory.getConnection();
builder = newDocumentMKBuilder();
- return register(builder.setMongoDB(c.getMongoClient(), c.getDBName())
- .setClusterId(clusterId).setAsyncDelay(asyncDelay).setBundlingDisabled(true).open());
+ DocumentMK mk = builder.setMongoDB(c.getMongoClient(), c.getDBName())
+ .setClusterId(clusterId).setAsyncDelay(asyncDelay)
+ .setBundlingDisabled(true).open();
+ // enforce primary read preference, otherwise test fails on a replica
+ // set with a read preference configured to secondary.
+ MongoTestUtils.setReadPreference(mk.getDocumentStore(), ReadPreference.primary());
+ return register(mk);
}
private static long getCacheElementCount(DocumentStore ds) {
Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentNodeStoreBuilderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentNodeStoreBuilderTest.java?rev=1832110&r1=1832109&r2=1832110&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentNodeStoreBuilderTest.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentNodeStoreBuilderTest.java Wed May 23 15:56:20 2018
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.plugin
import org.junit.Test;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class MongoDocumentNodeStoreBuilderTest {
@@ -27,4 +28,10 @@ public class MongoDocumentNodeStoreBuild
MongoDocumentNodeStoreBuilder builder = new MongoDocumentNodeStoreBuilder();
assertTrue(builder.isSocketKeepAlive());
}
+
+ @Test
+ public void clientSessionDisabled() {
+ MongoDocumentNodeStoreBuilder builder = new MongoDocumentNodeStoreBuilder();
+ assertFalse(builder.isClientSessionDisabled());
+ }
}
Added: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoTestUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoTestUtils.java?rev=1832110&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoTestUtils.java (added)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoTestUtils.java Wed May 23 15:56:20 2018
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.plugins.document.mongo;
+
+import com.mongodb.ReadPreference;
+
+import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
+import org.apache.jackrabbit.oak.plugins.document.DocumentStore;
+
+public final class MongoTestUtils {
+
+ public static void setReadPreference(DocumentNodeStore ns,
+ ReadPreference preference) {
+ setReadPreference(ns.getDocumentStore(), preference);
+ }
+
+ public static void setReadPreference(DocumentStore store,
+ ReadPreference preference) {
+ store.setReadWriteMode("readPreference=" + preference.getName());
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoTestUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
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=1832110&r1=1832109&r2=1832110&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 Wed May 23 15:56:20 2018
@@ -70,6 +70,7 @@ public class ReadPreferenceIT extends Ab
mk = new DocumentMK.Builder()
.clock(clock)
.setClusterId(1)
+ .setClientSessionDisabled(true)
.setMongoDB(mongoConnection.getMongoClient(), mongoConnection.getDBName())
.setLeaseCheck(false)
.open();
@@ -80,6 +81,7 @@ public class ReadPreferenceIT extends Ab
mk2 = new DocumentMK.Builder()
.clock(clock)
.setClusterId(2)
+ .setClientSessionDisabled(true)
.setMongoDB(mongoConnection2.getMongoClient(), mongoConnection2.getDBName())
.setLeaseCheck(false)
.open();
@@ -127,6 +129,9 @@ public class ReadPreferenceIT extends Ab
@Test
public void testMongoReadPreferencesDefault() throws Exception{
+ // start with read preference set to primary
+ mongoDS.setReadWriteMode(rwMode(ReadPreference.primary()));
+
assertEquals(ReadPreference.primary(),
mongoDS.getMongoReadPreference(NODES,"foo", null, DocumentReadPreference.PRIMARY));
@@ -224,6 +229,7 @@ public class ReadPreferenceIT extends Ab
@Test
public void testReadWriteMode() throws Exception{
+ mongoDS.setReadWriteMode(rwMode(ReadPreference.primary()));
assertEquals(ReadPreference.primary(), mongoDS.getConfiguredReadPreference(NODES));
mongoDS.setReadWriteMode("readPreference=secondary&w=2&safe=true&j=true");
Added: 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/replica/ReplicaSetStatusTest.java?rev=1832110&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/replica/ReplicaSetStatusTest.java (added)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/replica/ReplicaSetStatusTest.java Wed May 23 15:56:20 2018
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.plugins.document.mongo.replica;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import com.mongodb.ServerAddress;
+import com.mongodb.connection.ClusterId;
+import com.mongodb.connection.ConnectionDescription;
+import com.mongodb.connection.ServerId;
+import com.mongodb.event.ServerHeartbeatSucceededEvent;
+
+import org.bson.BsonArray;
+import org.bson.BsonDateTime;
+import org.bson.BsonDocument;
+import org.bson.BsonString;
+import org.bson.BsonValue;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class ReplicaSetStatusTest {
+
+ private List<ServerAddress> hosts = Arrays.asList(
+ new ServerAddress("localhost", 27017),
+ new ServerAddress("localhost", 27018),
+ new ServerAddress("localhost", 27019)
+ );
+
+ private List<BsonValue> hostValues = hosts.stream()
+ .map(sa -> new BsonString(sa.toString()))
+ .collect(Collectors.toList());
+
+ private List<ConnectionDescription> connections = Arrays.asList(
+ new ConnectionDescription(new ServerId(new ClusterId(), hosts.get(0))),
+ new ConnectionDescription(new ServerId(new ClusterId(), hosts.get(1))),
+ new ConnectionDescription(new ServerId(new ClusterId(), hosts.get(2)))
+ );
+
+ @Test
+ public void estimateLag() {
+ ReplicaSetStatus status = new ReplicaSetStatus();
+ assertEquals(ReplicaSetStatus.UNKNOWN_LAG, status.getLagEstimate());
+ status.serverHeartbeatSucceeded(newEvent(0, 0, 1000));
+ assertEquals(ReplicaSetStatus.UNKNOWN_LAG, status.getLagEstimate());
+ status.serverHeartbeatSucceeded(newEvent(1, 0, 800));
+ assertEquals(ReplicaSetStatus.UNKNOWN_LAG, status.getLagEstimate());
+ status.serverHeartbeatSucceeded(newEvent(2, 50, 1000));
+ // lastWrite difference: 200
+ // localTime difference: 50
+ // lag estimate: max(0, 200 - 50) = 150
+ // avg lag estimate: avg(150, 0, 0) = 50
+ assertEquals(50, status.getLagEstimate());
+
+ status.serverHeartbeatSucceeded(newEvent(0, 5000, 4800));
+ // lastWrite difference: 4000
+ // localTime difference: 5000
+ // lag estimate: max(0, 4000 - 5000) = 0
+ // avg lag estimate: avg(0, 150, 0) = 50
+ assertEquals(50, status.getLagEstimate());
+
+ status.serverHeartbeatSucceeded(newEvent(1, 5050, 2000));
+ // lastWrite difference: 3800
+ // localTime difference: 5000
+ // lag estimate: max(0, 3800 - 5000) = 0
+ // avg lag estimate: avg(0, 0, 150) = 50
+ assertEquals(50, status.getLagEstimate());
+
+ status.serverHeartbeatSucceeded(newEvent(2, 5150, 5000));
+ // lastWrite difference: 3000
+ // localTime difference: 150
+ // lag estimate: max(0, 3000 - 150) = 2850
+ // avg lag estimate: avg(2850, 0, 0) = 950
+ assertEquals(950, status.getLagEstimate());
+
+ status.serverHeartbeatSucceeded(newEvent(0, 10010, 9000));
+ // lastWrite difference: 7000
+ // localTime difference: 4960
+ // lag estimate: max(0, 7000 - 4960) = 2040
+ // avg lag estimate: avg(2040, 2850, 0) = 1630
+ assertEquals(1630, status.getLagEstimate());
+
+ }
+
+ private ServerHeartbeatSucceededEvent newEvent(int connectionIndex, long localTime, long lastWriteDate) {
+ ConnectionDescription description = connections.get(connectionIndex);
+ BsonDocument reply = new BsonDocument("localTime", new BsonDateTime(localTime));
+ reply.put("hosts", new BsonArray(hostValues));
+ BsonDocument lastWrite = new BsonDocument("lastWriteDate", new BsonDateTime(lastWriteDate));
+ reply.put("lastWrite", lastWrite);
+ return new ServerHeartbeatSucceededEvent(description.getConnectionId(), reply, 0);
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/replica/ReplicaSetStatusTest.java
------------------------------------------------------------------------------
svn:eol-style = native