Skip to content

Commit 97f52f8

Browse files
committed
Fix AbstractWriteSearchIndexOperation executeAsync releasing connections (#1812)
Update SyncMongoClient to assert connections are released Ensure errors thrown outside of the callback also release the resource in AsyncOperationHelper JAVA-5972
1 parent e25dc83 commit 97f52f8

File tree

36 files changed

+110
-58
lines changed

36 files changed

+110
-58
lines changed

driver-core/src/main/com/mongodb/internal/operation/AbstractWriteSearchIndexOperation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ public void executeAsync(final AsyncWriteBinding binding, final SingleResultCall
6666
writeConcernErrorTransformerAsync(binding.getOperationContext().getTimeoutContext()), (result, commandExecutionError) -> {
6767
try {
6868
swallowOrThrow(commandExecutionError);
69-
callback.onResult(result, null);
69+
cb.onResult(result, null);
7070
} catch (Throwable mongoCommandException) {
71-
callback.onResult(null, mongoCommandException);
71+
cb.onResult(null, mongoCommandException);
7272
}
7373
}
7474
)

driver-core/src/main/com/mongodb/internal/operation/AsyncOperationHelper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,9 @@ static <R, T extends ReferenceCounted> void withAsyncSuppliedResource(final Asyn
138138
AsyncCallbackSupplier<R> curriedFunction = c -> function.apply(resource, c);
139139
curriedFunction.whenComplete(resource::release).get(errorHandlingCallback);
140140
} catch (Exception e) {
141+
if (resource.getCount() > 0) {
142+
resource.release();
143+
}
141144
errorHandlingCallback.onResult(null, e);
142145
}
143146
}

driver-reactive-streams/src/test/functional/com/mongodb/internal/connection/OidcAuthenticationAsyncProseTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class OidcAuthenticationAsyncProseTests extends OidcAuthenticationProseTe
3333

3434
@Override
3535
protected MongoClient createMongoClient(final MongoClientSettings settings) {
36-
return new SyncMongoClient(MongoClients.create(settings));
36+
return new SyncMongoClient(settings);
3737
}
3838

3939
@Test

driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/AbstractClientMetadataProseTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@
2929
class ClientMetadataProseTest extends AbstractClientMetadataProseTest {
3030

3131
protected MongoClient createMongoClient(@Nullable final MongoDriverInformation mongoDriverInformation, final MongoClientSettings mongoClientSettings) {
32-
return new SyncMongoClient(MongoClients.create(mongoClientSettings, mongoDriverInformation));
32+
return new SyncMongoClient(mongoClientSettings, mongoDriverInformation);
3333
}
3434
}

driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/AsyncTransportSettingsTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ void testAsyncTransportSettings() {
4848
.transportSettings(asyncTransportSettings)
4949
.build();
5050

51-
try (MongoClient client = new SyncMongoClient(MongoClients.create(mongoClientSettings))) {
51+
try (MongoClient client = new SyncMongoClient(mongoClientSettings)) {
5252
client.listDatabases().first();
5353
}
5454
verify(executorService, atLeastOnce()).execute(any());
@@ -67,7 +67,7 @@ void testExternalExecutorWasShutDown(final boolean tlsEnabled) throws Interrupte
6767
.transportSettings(asyncTransportSettings)
6868
.build();
6969

70-
try (MongoClient ignored = new SyncMongoClient(MongoClients.create(mongoClientSettings))) {
70+
try (MongoClient ignored = new SyncMongoClient(mongoClientSettings)) {
7171
// ignored
7272
}
7373

driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/AtlasSearchIndexManagementProseTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@
2727
*/
2828
public class AtlasSearchIndexManagementProseTest extends AbstractAtlasSearchIndexManagementProseTest {
2929
protected MongoClient createMongoClient(final MongoClientSettings settings) {
30-
return new SyncMongoClient(MongoClients.create(settings));
30+
return new SyncMongoClient(settings);
3131
}
3232
}

driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/ClientEncryptionDataKeyAndDoubleEncryptionTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public void setUp() {
7373

7474
// Step 1: create unencrypted client
7575
commandListener = new TestCommandListener();
76-
client = new SyncMongoClient(MongoClients.create(getMongoClientSettingsBuilder().addCommandListener(commandListener).build()));
76+
client = new SyncMongoClient(getMongoClientSettingsBuilder().addCommandListener(commandListener));
7777
client.getDatabase("keyvault").getCollection("datakeys").drop();
7878
client.getDatabase("db").getCollection("coll").drop();
7979

@@ -114,12 +114,11 @@ public void setUp() {
114114
}};
115115

116116
String keyVaultNamespace = "keyvault.datakeys";
117-
clientEncrypted = new SyncMongoClient(MongoClients.create(getMongoClientSettingsBuilder()
117+
clientEncrypted = new SyncMongoClient(getMongoClientSettingsBuilder()
118118
.autoEncryptionSettings(AutoEncryptionSettings.builder()
119119
.keyVaultNamespace(keyVaultNamespace)
120120
.kmsProviders(kmsProviders)
121121
.schemaMap(schemaMap)
122-
.build())
123122
.build()));
124123

125124
clientEncryption = ClientEncryptions.create(

driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/ClientEncryptionRewrapManyDataKeyProseTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public class ClientEncryptionRewrapManyDataKeyProseTest extends AbstractClientEn
2828

2929
@Override
3030
protected MongoClient createMongoClient(final MongoClientSettings settings) {
31-
return new SyncMongoClient(MongoClients.create(settings));
31+
return new SyncMongoClient(settings);
3232
}
3333

3434
@Override

driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/ClientEncryptionTextExplicitEncryptionTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
public class ClientEncryptionTextExplicitEncryptionTest extends AbstractClientEncryptionTextExplicitEncryptionTest {
2929
@Override
3030
protected MongoClient createMongoClient(final MongoClientSettings settings) {
31-
return new SyncMongoClient(MongoClients.create(settings));
31+
return new SyncMongoClient(settings);
3232
}
3333

3434
@Override

driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/ClientSideEncryption25LookupProseTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public class ClientSideEncryption25LookupProseTests extends com.mongodb.client.C
2828

2929
@Override
3030
protected MongoClient createMongoClient(final MongoClientSettings settings) {
31-
return new SyncMongoClient(MongoClients.create(settings));
31+
return new SyncMongoClient(settings);
3232
}
3333

3434
@Override

0 commit comments

Comments
 (0)