Uploaded image for project: 'Java Driver'
  1. Java Driver
  2. JAVA-929

write to replicaset fails after failover

    • Type: Icon: Bug Bug
    • Resolution: Done
    • Priority: Icon: Critical - P2 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
      

            Assignee:
            Unassigned Unassigned
            Reporter:
            gomil gomil
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: