From dee030705573af1d22994db43cd3fb666cdea749 Mon Sep 17 00:00:00 2001 From: Mark Pollack Date: Tue, 13 Sep 2011 12:13:05 -0400 Subject: [PATCH] DATADOC-269 - XML configuration for replica sets is not working --- .../data/mongodb/core/MongoFactoryBean.java | 36 ++++++++----------- .../config/MongoNamespaceReplicaSetTests.java | 28 ++++++++++++--- .../MongoNamespaceReplicaSetTests-context.xml | 2 +- 3 files changed, 39 insertions(+), 27 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoFactoryBean.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoFactoryBean.java index e70304865..627a67e59 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoFactoryBean.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoFactoryBean.java @@ -90,31 +90,23 @@ public class MongoFactoryBean implements FactoryBean, PersistenceExceptio Mongo mongo; - if (host == null) { + ServerAddress defaultOptions = new ServerAddress(); - logger.debug("Property host not specified. Using default configuration"); - mongo = new Mongo(); - - } else { - - ServerAddress defaultOptions = new ServerAddress(); - - if (mongoOptions == null) { - mongoOptions = new MongoOptions(); - } + if (mongoOptions == null) { + mongoOptions = new MongoOptions(); + } - if (replicaPair != null) { - if (replicaPair.size() < 2) { - throw new CannotGetMongoDbConnectionException("A replica pair must have two server entries"); - } - mongo = new Mongo(replicaPair.get(0), replicaPair.get(1), mongoOptions); - } else if (replicaSetSeeds != null) { - mongo = new Mongo(replicaSetSeeds, mongoOptions); - } else { - String mongoHost = host != null ? host : defaultOptions.getHost(); - mongo = port != null ? new Mongo(new ServerAddress(mongoHost, port), mongoOptions) : new Mongo(mongoHost, - mongoOptions); + if (replicaPair != null) { + if (replicaPair.size() < 2) { + throw new CannotGetMongoDbConnectionException("A replica pair must have two server entries"); } + mongo = new Mongo(replicaPair.get(0), replicaPair.get(1), mongoOptions); + } else if (replicaSetSeeds != null) { + mongo = new Mongo(replicaSetSeeds, mongoOptions); + } else { + String mongoHost = host != null ? host : defaultOptions.getHost(); + mongo = port != null ? new Mongo(new ServerAddress(mongoHost, port), mongoOptions) : new Mongo(mongoHost, + mongoOptions); } if (writeConcern != null) { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoNamespaceReplicaSetTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoNamespaceReplicaSetTests.java index 2d3dc9d0c..53cbe0d65 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoNamespaceReplicaSetTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoNamespaceReplicaSetTests.java @@ -20,14 +20,18 @@ import static org.junit.Assert.*; import java.util.List; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.data.mongodb.core.MongoFactoryBean; +import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import com.mongodb.CommandResult; +import com.mongodb.Mongo; import com.mongodb.ServerAddress; @RunWith(SpringJUnit4ClassRunner.class) @@ -38,7 +42,7 @@ public class MongoNamespaceReplicaSetTests extends NamespaceTestSupport { private ApplicationContext ctx; @Test - public void testMongoWithReplicaSets() throws Exception { + public void testParsingMongoWithReplicaSets() throws Exception { assertTrue(ctx.containsBean("replicaSetMongo")); MongoFactoryBean mfb = (MongoFactoryBean) ctx.getBean("&replicaSetMongo"); @@ -46,11 +50,27 @@ public class MongoNamespaceReplicaSetTests extends NamespaceTestSupport { assertNotNull(replicaSetSeeds); assertEquals("127.0.0.1", replicaSetSeeds.get(0).getHost()); - assertEquals(27017, replicaSetSeeds.get(0).getPort()); + assertEquals(10001, replicaSetSeeds.get(0).getPort()); assertEquals("localhost", replicaSetSeeds.get(1).getHost()); - assertEquals(27018, replicaSetSeeds.get(1).getPort()); + assertEquals(10002, replicaSetSeeds.get(1).getPort()); - // TODO test infrastructure to have replica sets + } + + @Test + @Ignore("CI infrastructure does not yet support replica sets") + public void testMongoWithReplicaSets() { + Mongo mongo = ctx.getBean(Mongo.class); + assertEquals(2, mongo.getAllAddress().size()); + List servers = mongo.getAllAddress(); + assertEquals("127.0.0.1", servers.get(0).getHost()); + assertEquals("localhost", servers.get(1).getHost()); + assertEquals(10001, servers.get(0).getPort()); + assertEquals(10002, servers.get(1).getPort()); + + MongoTemplate template = new MongoTemplate(mongo, "admin"); + CommandResult result = template.executeCommand("{replSetGetStatus : 1}"); + assertEquals("blort", result.getString("set")); + } } diff --git a/spring-data-mongodb/src/test/resources/org/springframework/data/mongodb/config/MongoNamespaceReplicaSetTests-context.xml b/spring-data-mongodb/src/test/resources/org/springframework/data/mongodb/config/MongoNamespaceReplicaSetTests-context.xml index 4e5c2159c..5b7dc7df6 100644 --- a/spring-data-mongodb/src/test/resources/org/springframework/data/mongodb/config/MongoNamespaceReplicaSetTests-context.xml +++ b/spring-data-mongodb/src/test/resources/org/springframework/data/mongodb/config/MongoNamespaceReplicaSetTests-context.xml @@ -7,7 +7,7 @@ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> - +