diff --git a/src/main/java/com/mongodb/spark/sql/connector/connection/DefaultMongoClientFactory.java b/src/main/java/com/mongodb/spark/sql/connector/connection/DefaultMongoClientFactory.java index eecb37e3..1a9da9c4 100644 --- a/src/main/java/com/mongodb/spark/sql/connector/connection/DefaultMongoClientFactory.java +++ b/src/main/java/com/mongodb/spark/sql/connector/connection/DefaultMongoClientFactory.java @@ -58,12 +58,12 @@ public boolean equals(final Object o) { return false; } final DefaultMongoClientFactory that = (DefaultMongoClientFactory) o; - return config.equals(that.config); + return config.getConnectionString().equals(that.config.getConnectionString()); } @Override public int hashCode() { - return Objects.hash(config); + return Objects.hash(config.getConnectionString()); } private static MongoDriverInformation generateMongoDriverInformation(final String configType) { diff --git a/src/test/java/com/mongodb/spark/sql/connector/connection/MongoClientCacheTest.java b/src/test/java/com/mongodb/spark/sql/connector/connection/MongoClientCacheTest.java index a19cbe65..5f5e5242 100644 --- a/src/test/java/com/mongodb/spark/sql/connector/connection/MongoClientCacheTest.java +++ b/src/test/java/com/mongodb/spark/sql/connector/connection/MongoClientCacheTest.java @@ -21,7 +21,6 @@ import static com.mongodb.spark.sql.connector.config.MongoConfig.DATABASE_NAME_CONFIG; import static com.mongodb.spark.sql.connector.config.MongoConfig.PREFIX; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertSame; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -29,9 +28,9 @@ import com.mongodb.client.MongoClient; import com.mongodb.spark.sql.connector.config.MongoConfig; +import com.mongodb.spark.sql.connector.config.ReadConfig; import java.util.HashMap; import java.util.Map; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -113,7 +112,7 @@ void factoriesWithEqualWriteConfigsCreateNotSameClientsThroughCache() { } @Test - void factoriesWithEqualReadWriteConfigsCreateNotSameClientsThroughCache() { + void factoriesWithEqualReadWriteConfigsCreateSameClientsThroughCache() { MongoConfig config1 = MongoConfig.readConfig(CONFIG_MAP); MongoConfig config2 = MongoConfig.writeConfig(CONFIG_MAP); DefaultMongoClientFactory factory1 = new DefaultMongoClientFactory(config1); @@ -123,11 +122,10 @@ void factoriesWithEqualReadWriteConfigsCreateNotSameClientsThroughCache() { MongoClient client1 = mongoClientCache.acquire(factory1); MongoClient client2 = mongoClientCache.acquire(factory2); - assertNotSame(client1, client2); + assertSame(client1, client2); } @Test - @Disabled("fixed in https://github.com/mongodb/mongo-spark/pull/112") void factoriesWithSameSimpleConfigCreateSameClientsThroughCache() { MongoConfig config = MongoConfig.createConfig(CONFIG_MAP); DefaultMongoClientFactory factory1 = new DefaultMongoClientFactory(config); @@ -141,7 +139,6 @@ void factoriesWithSameSimpleConfigCreateSameClientsThroughCache() { } @Test - @Disabled("fixed in https://github.com/mongodb/mongo-spark/pull/112") void factoriesWithEqualSimpleConfigsCreateSameClientsThroughCache() { MongoConfig config1 = MongoConfig.createConfig(CONFIG_MAP); MongoConfig config2 = MongoConfig.createConfig(CONFIG_MAP); @@ -155,6 +152,22 @@ void factoriesWithEqualSimpleConfigsCreateSameClientsThroughCache() { assertSame(client1, client2); } + @Test + void factoriesWithDifferentAggregationPipelinesCreateSameClientsThroughCache() { + MongoConfig config1 = MongoConfig.createConfig(CONFIG_MAP); + Map<String, String> configMap2 = new HashMap<>(CONFIG_MAP); + configMap2.put(ReadConfig.AGGREGATION_PIPELINE_CONFIG, "{ foo: \"bar\" }"); + MongoConfig config2 = MongoConfig.createConfig(configMap2); + DefaultMongoClientFactory factory1 = new DefaultMongoClientFactory(config1); + DefaultMongoClientFactory factory2 = new DefaultMongoClientFactory(config2); + MongoClientCache mongoClientCache = new MongoClientCache(0, 0, 100); + + MongoClient client1 = mongoClientCache.acquire(factory1); + MongoClient client2 = mongoClientCache.acquire(factory2); + + assertSame(client1, client2); + } + @Test void testKeepAliveReuseOfClient() { MongoClientCache mongoClientCache = new MongoClientCache(500, 0, 200);