Index: oak-parent/pom.xml =================================================================== --- oak-parent/pom.xml (revision 1845136) +++ oak-parent/pom.xml (working copy) @@ -53,7 +53,7 @@ SegmentMK 4.7.1 5.5.5 - 3.6.4 + 3.8.2 1.7.25 1.7.25 1.2.3 Index: oak-store-document/pom.xml =================================================================== --- oak-store-document/pom.xml (revision 1845136) +++ oak-store-document/pom.xml (working copy) @@ -40,7 +40,7 @@ ${guava.osgi.import}, - com.mongodb*;version="[3.6, 4)";resolution:=optional, + com.mongodb*;version="[3.8, 4)";resolution:=optional, * Index: oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java =================================================================== --- oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java (revision 1845136) +++ oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java (working copy) @@ -88,6 +88,7 @@ import com.mongodb.bulk.BulkWriteError; import com.mongodb.bulk.BulkWriteResult; import com.mongodb.bulk.BulkWriteUpsert; +import com.mongodb.client.ClientSession; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; @@ -101,7 +102,6 @@ import com.mongodb.client.model.WriteModel; import com.mongodb.client.result.DeleteResult; import com.mongodb.client.result.UpdateResult; -import com.mongodb.session.ClientSession; import static com.google.common.base.Predicates.in; import static com.google.common.base.Predicates.not; @@ -1864,9 +1864,9 @@ MongoCollection c = nodes.withReadPreference(ReadPreference.primary()); long count; if (session != null) { - count = c.count(session); + count = c.countDocuments(session); } else { - count = c.count(); + count = c.countDocuments(); } return count; }); Index: oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoSessionFactory.java =================================================================== --- oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoSessionFactory.java (revision 1845136) +++ oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoSessionFactory.java (working copy) @@ -18,11 +18,13 @@ import com.mongodb.ClientSessionOptions; import com.mongodb.MongoClient; -import com.mongodb.session.ClientSession; +import com.mongodb.TransactionOptions; +import com.mongodb.client.ClientSession; import com.mongodb.session.ServerSession; import org.bson.BsonDocument; import org.bson.BsonTimestamp; +import org.jetbrains.annotations.NotNull; /** * Factory for {@link ClientSession}s. @@ -101,6 +103,42 @@ } @Override + public boolean hasActiveTransaction() { + return session.hasActiveTransaction(); + } + + @Override + public boolean notifyMessageSent() { + return session.notifyMessageSent(); + } + + @NotNull + @Override + public TransactionOptions getTransactionOptions() { + return session.getTransactionOptions(); + } + + @Override + public void startTransaction() { + session.startTransaction(); + } + + @Override + public void startTransaction(@NotNull TransactionOptions options) { + session.startTransaction(options); + } + + @Override + public void commitTransaction() { + session.commitTransaction(); + } + + @Override + public void abortTransaction() { + session.abortTransaction(); + } + + @Override public void close() { synchronized (this) { session.advanceClusterTime(clusterTime); Index: oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoVersionGCSupport.java =================================================================== --- oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoVersionGCSupport.java (revision 1845136) +++ oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoVersionGCSupport.java (working copy) @@ -107,7 +107,7 @@ @Override public long getDeletedOnceCount() { Bson query = Filters.eq(DELETED_ONCE, Boolean.TRUE); - return getNodeCollection().count(query); + return getNodeCollection().countDocuments(query); } @Override Index: oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoTestCollection.java =================================================================== --- oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoTestCollection.java (revision 1845136) +++ oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoTestCollection.java (working copy) @@ -27,6 +27,7 @@ import com.mongodb.bulk.BulkWriteResult; import com.mongodb.client.AggregateIterable; import com.mongodb.client.ChangeStreamIterable; +import com.mongodb.client.ClientSession; import com.mongodb.client.DistinctIterable; import com.mongodb.client.FindIterable; import com.mongodb.client.ListIndexesIterable; @@ -37,6 +38,7 @@ import com.mongodb.client.model.CreateIndexOptions; import com.mongodb.client.model.DeleteOptions; import com.mongodb.client.model.DropIndexOptions; +import com.mongodb.client.model.EstimatedDocumentCountOptions; import com.mongodb.client.model.FindOneAndDeleteOptions; import com.mongodb.client.model.FindOneAndReplaceOptions; import com.mongodb.client.model.FindOneAndUpdateOptions; @@ -45,11 +47,11 @@ import com.mongodb.client.model.InsertManyOptions; import com.mongodb.client.model.InsertOneOptions; import com.mongodb.client.model.RenameCollectionOptions; +import com.mongodb.client.model.ReplaceOptions; import com.mongodb.client.model.UpdateOptions; import com.mongodb.client.model.WriteModel; import com.mongodb.client.result.DeleteResult; import com.mongodb.client.result.UpdateResult; -import com.mongodb.session.ClientSession; import org.bson.Document; import org.bson.codecs.configuration.CodecRegistry; @@ -179,6 +181,40 @@ return collection.count(clientSession, filter, options); } + @Override + public long countDocuments() { + return collection.countDocuments(); + } + + @Override + public long countDocuments(@NotNull Bson filter) { + return collection.countDocuments(filter); + } + + @Override + public long countDocuments(@NotNull Bson filter, + @NotNull CountOptions options) { + return collection.countDocuments(filter, options); + } + + @Override + public long countDocuments(@NotNull ClientSession clientSession) { + return collection.countDocuments(clientSession); + } + + @Override + public long countDocuments(@NotNull ClientSession clientSession, + @NotNull Bson filter) { + return collection.countDocuments(clientSession, filter); + } + + @Override + public long countDocuments(@NotNull ClientSession clientSession, + @NotNull Bson filter, + @NotNull CountOptions options) { + return collection.countDocuments(clientSession, filter, options); + } + @NotNull @Override public DistinctIterable distinct(@NotNull String fieldName, @@ -211,6 +247,16 @@ return collection.distinct(clientSession, fieldName, filter, tResultClass); } + @Override + public long estimatedDocumentCount() { + return collection.estimatedDocumentCount(); + } + + @Override + public long estimatedDocumentCount(@NotNull EstimatedDocumentCountOptions options) { + return collection.estimatedDocumentCount(options); + } + @NotNull @Override public FindIterable find() { @@ -610,6 +656,29 @@ @NotNull @Override + public UpdateResult replaceOne(@NotNull Bson filter, + @NotNull TDocument replacement, + @NotNull ReplaceOptions replaceOptions) { + maybeThrowExceptionBeforeUpdate(); + UpdateResult result = collection.replaceOne(filter, replacement, replaceOptions); + maybeThrowExceptionAfterUpdate(); + return result; + } + + @NotNull + @Override + public UpdateResult replaceOne(@NotNull ClientSession clientSession, + @NotNull Bson filter, + @NotNull TDocument replacement, + @NotNull ReplaceOptions replaceOptions) { + maybeThrowExceptionBeforeUpdate(); + UpdateResult result = collection.replaceOne(clientSession, filter, replacement, replaceOptions); + maybeThrowExceptionAfterUpdate(); + return result; + } + + @NotNull + @Override public UpdateResult updateOne(@NotNull Bson filter, @NotNull Bson update) { maybeThrowExceptionBeforeUpdate(); UpdateResult result = collection.updateOne(filter, update); Index: oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoTestDatabase.java =================================================================== --- oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoTestDatabase.java (revision 1845136) +++ oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoTestDatabase.java (working copy) @@ -22,6 +22,8 @@ import com.mongodb.ReadConcern; import com.mongodb.ReadPreference; import com.mongodb.WriteConcern; +import com.mongodb.client.ChangeStreamIterable; +import com.mongodb.client.ClientSession; import com.mongodb.client.ListCollectionsIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; @@ -28,7 +30,6 @@ import com.mongodb.client.MongoIterable; import com.mongodb.client.model.CreateCollectionOptions; import com.mongodb.client.model.CreateViewOptions; -import com.mongodb.session.ClientSession; import org.bson.Document; import org.bson.codecs.configuration.CodecRegistry; @@ -283,4 +284,57 @@ @NotNull CreateViewOptions createViewOptions) { db.createView(clientSession, viewName, viewOn, pipeline, createViewOptions); } + + @NotNull + @Override + public ChangeStreamIterable watch() { + return db.watch(); + } + + @NotNull + @Override + public ChangeStreamIterable watch(@NotNull Class tResultClass) { + return db.watch(tResultClass); + } + + @NotNull + @Override + public ChangeStreamIterable watch(@NotNull List pipeline) { + return db.watch(pipeline); + } + + @NotNull + @Override + public ChangeStreamIterable watch(@NotNull List pipeline, + @NotNull Class tResultClass) { + return db.watch(pipeline, tResultClass); + } + + @NotNull + @Override + public ChangeStreamIterable watch(@NotNull ClientSession clientSession) { + return db.watch(clientSession); + } + + @NotNull + @Override + public ChangeStreamIterable watch(@NotNull ClientSession clientSession, + @NotNull Class tResultClass) { + return db.watch(clientSession, tResultClass); + } + + @NotNull + @Override + public ChangeStreamIterable watch(@NotNull ClientSession clientSession, + @NotNull List pipeline) { + return db.watch(clientSession, pipeline); + } + + @NotNull + @Override + public ChangeStreamIterable watch(@NotNull ClientSession clientSession, + @NotNull List pipeline, + @NotNull Class tResultClass) { + return db.watch(clientSession, pipeline, tResultClass); + } }