From eec39523967f8041daed48f0b3c53a24aa9cdcc3 Mon Sep 17 00:00:00 2001 From: "slav.babanin" Date: Mon, 2 Mar 2026 16:26:58 -0800 Subject: [PATCH 1/2] Remove unused OperationContextBinding test wrappers - Delete OperationContextBinding and AsyncOperationContextBinding classes to eliminate code missed during CSOT refactoring - Remove unused ClusterFixture overloads (getBinding(TimeoutSettings), getBinding(OperationContext), getAsyncBinding(OperationContext), createNewOperationContext) to simplify the test API - Simplify binding factory methods to return ClusterBinding/AsyncClusterBinding directly instead of wrapping them in order to remove unnecessary indirection - Add applySessionContext to ReadOperation executeSync overloads to restore SessionContext application that was silently lost JAVA-6118 --- .../com/mongodb/ClusterFixture.java | 49 ++---- .../binding/AsyncOperationContextBinding.java | 143 ------------------ .../binding/OperationContextBinding.java | 117 -------------- .../FindOperationSpecification.groovy | 4 +- 4 files changed, 11 insertions(+), 302 deletions(-) delete mode 100644 driver-core/src/test/functional/com/mongodb/internal/binding/AsyncOperationContextBinding.java delete mode 100644 driver-core/src/test/functional/com/mongodb/internal/binding/OperationContextBinding.java diff --git a/driver-core/src/test/functional/com/mongodb/ClusterFixture.java b/driver-core/src/test/functional/com/mongodb/ClusterFixture.java index 1a5bead6207..a9190f32bc2 100644 --- a/driver-core/src/test/functional/com/mongodb/ClusterFixture.java +++ b/driver-core/src/test/functional/com/mongodb/ClusterFixture.java @@ -36,12 +36,10 @@ import com.mongodb.internal.async.SingleResultCallback; import com.mongodb.internal.binding.AsyncClusterBinding; import com.mongodb.internal.binding.AsyncConnectionSource; -import com.mongodb.internal.binding.AsyncOperationContextBinding; import com.mongodb.internal.binding.AsyncReadBinding; import com.mongodb.internal.binding.AsyncReadWriteBinding; import com.mongodb.internal.binding.AsyncSingleConnectionBinding; import com.mongodb.internal.binding.ClusterBinding; -import com.mongodb.internal.binding.OperationContextBinding; import com.mongodb.internal.binding.ReadWriteBinding; import com.mongodb.internal.binding.ReferenceCounted; import com.mongodb.internal.binding.SimpleSessionContext; @@ -113,6 +111,7 @@ * Helper class for the acceptance tests. Used primarily by DatabaseTestCase and FunctionalSpecification. This fixture allows Test * super-classes to share functionality whilst minimising duplication. */ +//NOTE: Split the commits between automatic refactoring changes (e.g methods renaming) and manual changes (e.g. adding new methods) to make it easier to review the changes. public final class ClusterFixture { public static final String DEFAULT_URI = "mongodb://localhost:27017"; public static final String MONGODB_URI_SYSTEM_PROPERTY_NAME = "org.mongodb.test.uri"; @@ -373,33 +372,18 @@ public static ReadWriteBinding getBinding(final Cluster cluster) { return new ClusterBinding(cluster, ReadPreference.primary()); } - public static ReadWriteBinding getBinding(final TimeoutSettings timeoutSettings) { - return getBinding(getCluster(), ReadPreference.primary(), createNewOperationContext(timeoutSettings)); - } - - public static ReadWriteBinding getBinding(final OperationContext operationContext) { - return getBinding(getCluster(), ReadPreference.primary(), operationContext); - } - public static ReadWriteBinding getBinding(final ReadPreference readPreference) { - return getBinding(getCluster(), readPreference, OPERATION_CONTEXT); - } - - public static OperationContext createNewOperationContext(final TimeoutSettings timeoutSettings) { - return OPERATION_CONTEXT.withTimeoutContext(new TimeoutContext(timeoutSettings)); + return getBinding(getCluster(), readPreference); } private static ReadWriteBinding getBinding(final Cluster cluster, - final ReadPreference readPreference, - final OperationContext operationContext) { + final ReadPreference readPreference) { if (!BINDING_MAP.containsKey(readPreference)) { ReadWriteBinding binding = new ClusterBinding(cluster, readPreference); BINDING_MAP.put(readPreference, binding); SESSION_CONTEXT_MAP.put(readPreference, new SimpleSessionContext()); } - ReadWriteBinding readWriteBinding = BINDING_MAP.get(readPreference); - return new OperationContextBinding(readWriteBinding, - operationContext.withSessionContext(SESSION_CONTEXT_MAP.get(readPreference))); + return BINDING_MAP.get(readPreference); } public static SingleConnectionBinding getSingleConnectionBinding() { @@ -419,33 +403,18 @@ public static AsyncReadWriteBinding getAsyncBinding(final Cluster cluster) { } public static AsyncReadWriteBinding getAsyncBinding() { - return getAsyncBinding(getAsyncCluster(), ReadPreference.primary(), OPERATION_CONTEXT); - } - - public static AsyncReadWriteBinding getAsyncBinding(final TimeoutSettings timeoutSettings) { - return getAsyncBinding(createNewOperationContext(timeoutSettings)); - } - - public static AsyncReadWriteBinding getAsyncBinding(final OperationContext operationContext) { - return getAsyncBinding(getAsyncCluster(), ReadPreference.primary(), operationContext); - } - - public static AsyncReadWriteBinding getAsyncBinding(final ReadPreference readPreference) { - return getAsyncBinding(getAsyncCluster(), readPreference, OPERATION_CONTEXT); + return getAsyncBinding(getAsyncCluster(), ReadPreference.primary()); } public static AsyncReadWriteBinding getAsyncBinding( final Cluster cluster, - final ReadPreference readPreference, - final OperationContext operationContext) { + final ReadPreference readPreference) { if (!ASYNC_BINDING_MAP.containsKey(readPreference)) { AsyncReadWriteBinding binding = new AsyncClusterBinding(cluster, readPreference); ASYNC_BINDING_MAP.put(readPreference, binding); ASYNC_SESSION_CONTEXT_MAP.put(readPreference, new SimpleSessionContext()); } - AsyncReadWriteBinding readWriteBinding = ASYNC_BINDING_MAP.get(readPreference); - return new AsyncOperationContextBinding(readWriteBinding, - operationContext.withSessionContext(ASYNC_SESSION_CONTEXT_MAP.get(readPreference))); + return ASYNC_BINDING_MAP.get(readPreference); } public static synchronized Cluster getCluster() { @@ -713,12 +682,12 @@ public static T executeSync(final ReadOperation op) { @SuppressWarnings("overloads") public static T executeSync(final ReadOperation op, final ReadWriteBinding binding) { - return op.execute(binding, OPERATION_CONTEXT); + return op.execute(binding, applySessionContext(OPERATION_CONTEXT, binding.getReadPreference())); } @SuppressWarnings("overloads") public static T executeSync(final ReadOperation op, final ReadWriteBinding binding, final OperationContext operationContext) { - return op.execute(binding, operationContext); + return op.execute(binding, applySessionContext(operationContext, binding.getReadPreference())); } @SuppressWarnings("overloads") diff --git a/driver-core/src/test/functional/com/mongodb/internal/binding/AsyncOperationContextBinding.java b/driver-core/src/test/functional/com/mongodb/internal/binding/AsyncOperationContextBinding.java deleted file mode 100644 index 0a891b55a88..00000000000 --- a/driver-core/src/test/functional/com/mongodb/internal/binding/AsyncOperationContextBinding.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright 2008-present MongoDB, Inc. - * - * Licensed 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 com.mongodb.internal.binding; - -import com.mongodb.ReadPreference; -import com.mongodb.connection.ServerDescription; -import com.mongodb.internal.async.SingleResultCallback; -import com.mongodb.internal.connection.AsyncConnection; -import com.mongodb.internal.connection.OperationContext; - -import static org.bson.assertions.Assertions.notNull; - -public final class AsyncOperationContextBinding implements AsyncReadWriteBinding { - - private final AsyncReadWriteBinding wrapped; - private final OperationContext operationContext; - - public AsyncOperationContextBinding(final AsyncReadWriteBinding wrapped, final OperationContext operationContext) { - this.wrapped = notNull("wrapped", wrapped); - this.operationContext = notNull("operationContext", operationContext); - } - - @Override - public ReadPreference getReadPreference() { - return wrapped.getReadPreference(); - } - - @Override - public void getWriteConnectionSource(final OperationContext operationContext, - final SingleResultCallback callback) { - wrapped.getWriteConnectionSource(operationContext, (result, t) -> { - if (t != null) { - callback.onResult(null, t); - } else { - callback.onResult(new SessionBindingAsyncConnectionSource(result), null); - } - }); - } - - - @Override - public void getReadConnectionSource(final OperationContext operationContext, - final SingleResultCallback callback) { - wrapped.getReadConnectionSource(operationContext, (result, t) -> { - if (t != null) { - callback.onResult(null, t); - } else { - callback.onResult(new SessionBindingAsyncConnectionSource(result), null); - } - }); - } - - - @Override - public void getReadConnectionSource(final int minWireVersion, final ReadPreference fallbackReadPreference, - final OperationContext operationContext, - final SingleResultCallback callback) { - wrapped.getReadConnectionSource(minWireVersion, fallbackReadPreference, operationContext, (result, t) -> { - if (t != null) { - callback.onResult(null, t); - } else { - callback.onResult(new SessionBindingAsyncConnectionSource(result), null); - } - }); - } - - public OperationContext getOperationContext() { - return operationContext; - } - - @Override - public int getCount() { - return wrapped.getCount(); - } - - @Override - public AsyncReadWriteBinding retain() { - wrapped.retain(); - return this; - } - - @Override - public int release() { - return wrapped.release(); - } - - private class SessionBindingAsyncConnectionSource implements AsyncConnectionSource { - private final AsyncConnectionSource wrapped; - - SessionBindingAsyncConnectionSource(final AsyncConnectionSource wrapped) { - this.wrapped = wrapped; - } - - @Override - public ServerDescription getServerDescription() { - return wrapped.getServerDescription(); - } - - @Override - public ReadPreference getReadPreference() { - return wrapped.getReadPreference(); - } - - @Override - public void getConnection(final OperationContext operationContext, final SingleResultCallback callback) { - wrapped.getConnection(operationContext, callback); - } - - @Override - public int getCount() { - return wrapped.getCount(); - } - - @Override - public AsyncConnectionSource retain() { - wrapped.retain(); - return this; - } - - @Override - public int release() { - return wrapped.release(); - } - } - - public AsyncReadWriteBinding getWrapped() { - return wrapped; - } -} diff --git a/driver-core/src/test/functional/com/mongodb/internal/binding/OperationContextBinding.java b/driver-core/src/test/functional/com/mongodb/internal/binding/OperationContextBinding.java deleted file mode 100644 index 3428db4f82e..00000000000 --- a/driver-core/src/test/functional/com/mongodb/internal/binding/OperationContextBinding.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2008-present MongoDB, Inc. - * - * Licensed 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 com.mongodb.internal.binding; - -import com.mongodb.ReadPreference; -import com.mongodb.connection.ServerDescription; -import com.mongodb.internal.connection.Connection; -import com.mongodb.internal.connection.OperationContext; - -import static org.bson.assertions.Assertions.notNull; - -public class OperationContextBinding implements ReadWriteBinding { - private final ReadWriteBinding wrapped; - private final OperationContext operationContext; - - public OperationContextBinding(final ReadWriteBinding wrapped, final OperationContext operationContext) { - this.wrapped = notNull("wrapped", wrapped); - this.operationContext = notNull("operationContext", operationContext); - } - - @Override - public ReadPreference getReadPreference() { - return wrapped.getReadPreference(); - } - - @Override - public int getCount() { - return wrapped.getCount(); - } - - @Override - public ReadWriteBinding retain() { - wrapped.retain(); - return this; - } - - @Override - public int release() { - return wrapped.release(); - } - - @Override - public ConnectionSource getReadConnectionSource(final OperationContext operationContext) { - return new SessionBindingConnectionSource(wrapped.getReadConnectionSource(operationContext)); - } - - @Override - public ConnectionSource getReadConnectionSource(final int minWireVersion, final ReadPreference fallbackReadPreference, final OperationContext operationContext) { - return new SessionBindingConnectionSource(wrapped.getReadConnectionSource(minWireVersion, fallbackReadPreference, operationContext)); - } - - public OperationContext getOperationContext() { - return operationContext; - } - - @Override - public ConnectionSource getWriteConnectionSource(final OperationContext operationContext) { - return new SessionBindingConnectionSource(wrapped.getWriteConnectionSource(operationContext)); - } - - private class SessionBindingConnectionSource implements ConnectionSource { - private ConnectionSource wrapped; - - SessionBindingConnectionSource(final ConnectionSource wrapped) { - this.wrapped = wrapped; - } - - @Override - public ServerDescription getServerDescription() { - return wrapped.getServerDescription(); - } - - @Override - public ReadPreference getReadPreference() { - return wrapped.getReadPreference(); - } - - @Override - public Connection getConnection(final OperationContext operationContext) { - return wrapped.getConnection(operationContext); - } - - @Override - public ConnectionSource retain() { - wrapped = wrapped.retain(); - return this; - } - - @Override - public int getCount() { - return wrapped.getCount(); - } - - @Override - public int release() { - return wrapped.release(); - } - } - - public ReadWriteBinding getWrapped() { - return wrapped; - } -} diff --git a/driver-core/src/test/functional/com/mongodb/internal/operation/FindOperationSpecification.groovy b/driver-core/src/test/functional/com/mongodb/internal/operation/FindOperationSpecification.groovy index 5eb707201d5..261e036621a 100644 --- a/driver-core/src/test/functional/com/mongodb/internal/operation/FindOperationSpecification.groovy +++ b/driver-core/src/test/functional/com/mongodb/internal/operation/FindOperationSpecification.groovy @@ -655,9 +655,9 @@ class FindOperationSpecification extends OperationFunctionalSpecification { when: def cursor; if (async) { - cursor = execute(operation, ClusterFixture.getAsyncBinding(operationContext), operationContext) + cursor = execute(operation, ClusterFixture.getAsyncBinding(), operationContext) } else { - cursor = execute(operation, ClusterFixture.getBinding(operationContext), operationContext) + cursor = execute(operation, getBinding(), operationContext) } then: From 8a46431700541b9ff8436b112b47d49152ad5001 Mon Sep 17 00:00:00 2001 From: Viacheslav Babanin Date: Wed, 4 Mar 2026 13:12:00 -0800 Subject: [PATCH 2/2] Remove Note. --- driver-core/src/test/functional/com/mongodb/ClusterFixture.java | 1 - 1 file changed, 1 deletion(-) diff --git a/driver-core/src/test/functional/com/mongodb/ClusterFixture.java b/driver-core/src/test/functional/com/mongodb/ClusterFixture.java index a9190f32bc2..80c09a5cf01 100644 --- a/driver-core/src/test/functional/com/mongodb/ClusterFixture.java +++ b/driver-core/src/test/functional/com/mongodb/ClusterFixture.java @@ -111,7 +111,6 @@ * Helper class for the acceptance tests. Used primarily by DatabaseTestCase and FunctionalSpecification. This fixture allows Test * super-classes to share functionality whilst minimising duplication. */ -//NOTE: Split the commits between automatic refactoring changes (e.g methods renaming) and manual changes (e.g. adding new methods) to make it easier to review the changes. public final class ClusterFixture { public static final String DEFAULT_URI = "mongodb://localhost:27017"; public static final String MONGODB_URI_SYSTEM_PROPERTY_NAME = "org.mongodb.test.uri";