-
Type: Bug
-
Resolution: Done
-
Priority: Critical - P2
-
None
-
Affects Version/s: 2.11.1, 2.11.2
-
Component/s: Connection Management
-
Labels:None
-
Environment:MongoDB V2.0.6 on x86_64 GNU/Linux
Setup: ReplicaSet with two nodes (node30, node31)
I use the java-driver (V2.11.2) with the constructor below (via Spring-Data's MongoFactoryBean)
new public Mongo( List<ServerAddress> seeds , MongoOptions options )
If the master (node30) goes down, all further write-attempts fail:
Aug 16, 2013 11:52:30 AM com.mongodb.ConnectionStatus$UpdatableNode update WARNING: Server seen down: /10.150.20.30:27000 - java.io.IOException - message: Connection refused: connect
I analyzed the driver (class ReplicaSetStatus)
- the old master (node30) is as expected no longer in "acceptableMembers"
- the old secondary (node31) is now marked as master, but the old master (node30) is also marked as master
- the method to find the actual master uses variable "all" instead of "acceptableMembers" and returns the old (dead) master (node30)
I fixed it locally (used "acceptableMembers" instead of "all" in findMaster() ) and it worked fine for the first failover.
BUT ... if node30 comes up again and node31 goes down I get another errormessage and then again the same error (-message) as above
Aug 16, 2013 12:30:20 PM com.mongodb.DBPortPool gotError WARNING: emptying DBPortPool to /10.150.20.30:27000 b/c of error java.io.EOFException at org.bson.io.Bits.readFully(Bits.java:48) at org.bson.io.Bits.readFully(Bits.java:33) at org.bson.io.Bits.readFully(Bits.java:28) at com.mongodb.Response.<init>(Response.java:40) at com.mongodb.DBPort.go(DBPort.java:142) at com.mongodb.DBPort.go(DBPort.java:106) at com.mongodb.DBPort.findOne(DBPort.java:162) at com.mongodb.DBPort.runCommand(DBPort.java:170) at com.mongodb.DBTCPConnector._checkWriteError(DBTCPConnector.java:100) at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:142) at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:115) at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:248) at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:204) at com.mongodb.DBCollection.insert(DBCollection.java:148) at com.mongodb.DBCollection.insert(DBCollection.java:91) at com.mongodb.DBCollection.save(DBCollection.java:810) at org.springframework.data.mongodb.core.MongoTemplate$10.doInCollection(MongoTemplate.java:884) at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:388) at org.springframework.data.mongodb.core.MongoTemplate.saveDBObject(MongoTemplate.java:879) at org.springframework.data.mongodb.core.MongoTemplate.doSave(MongoTemplate.java:819) at org.springframework.data.mongodb.core.MongoTemplate.save(MongoTemplate.java:756) at org.springframework.data.mongodb.core.MongoTemplate.save(MongoTemplate.java:744)
Aug 16, 2013 12:32:32 PM com.mongodb.ConnectionStatus$UpdatableNode update WARNING: Server seen down: /10.150.20.31:27000 - java.io.IOException - message: Connection refused: connect