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

Exception is thrown when replSetReconfig command is sent

    • Type: Icon: Task Task
    • Resolution: Done
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: 2.10.1
    • Component/s: Cluster Management
    • Labels:
      None
    • Environment:
      JDK 1.6 with Ubuntu 12.04

      Hello I am using Mongo Java Driver 2.10.1 and I am trying to reconfigure a replica set configuration by using Mongo Java Driver.

      Initially I have four Mongo servers started up with next configuration:

      {
            "_id" : "rs-test",
            "version" : 1,
             members : [
                 {_id : 0, host : "localhost:27017"},
                 {_id : 1, host : "localhost:27018"},
                 {_id : 2, host : "localhost:27019"},
      	   {_id : 3, host : "localhost:27020"}
             ]
      }
      

      Then I have my test which tries to reconfig this replica set by sending next document:

      {
            "_id" : "rs-test",
            "version" : 2,
             members : [
                 {_id : 0, host : "localhost:27017"},
                 {_id : 1, host : "localhost:27018"},
                 {_id : 2, host : "localhost:27019"},
      	   {_id : 3, host : "localhost:27020", arbiterOnly: true}
             ]
      }
      
      

      And Java code:

      MongoClient mongoClient = new MongoClient("localhost", 27017);
      		
      BasicDBObject basicDBObject = new BasicDBObject();
      basicDBObject.put("replSetReconfig",JSON.parse(DOCUMENT));
      		
      DB db = mongoClient.getDB("admin");
      CommandResult command = db.command(basicDBObject);
      		
      System.out.println(command);
      

      And then next exception is returned:

      emptying DBPortPool to localhost/127.0.0.1:27017 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:124)
      	at com.mongodb.DBPort.call(DBPort.java:74)
      	at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:286)
      	at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:257)
      	at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:310)
      	at com.mongodb.DB.command(DB.java:274)
      	at com.mongodb.DB.command(DB.java:256)
      	at com.mongodb.DB.command(DB.java:313)
      	at com.mongodb.DB.command(DB.java:211)
      	at MyTest.test(MyTest.java:32)
      	at MyTest.main(MyTest.java:40)
      Exception in thread "main" com.mongodb.MongoException$Network: can't call something : localhost/127.0.0.1:27017/admin
      	at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:295)
      	at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:257)
      	at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:310)
      	at com.mongodb.DB.command(DB.java:274)
      	at com.mongodb.DB.command(DB.java:256)
      	at com.mongodb.DB.command(DB.java:313)
      	at com.mongodb.DB.command(DB.java:211)
      	at MyTest.test(MyTest.java:32)
      	at MyTest.main(MyTest.java:40)
      Caused by: 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:124)
      	at com.mongodb.DBPort.call(DBPort.java:74)
      	at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:286)
      	... 8 more
      

      If I go to mongo shell and I type rs.conf() at first time an errno:2 is also shown but then tries to reconnect again and then it works as expected and shows that server with id 3 is hidden. So it seems like command is send successful. Is there any way to avoid that Mongo Driver throws an exception? Maybe me as a user of Mongo Java Driver should implement a recovery function? (basically catching the exception and not propagating it?).

      Also I have tried by registering all servers in MongoClient but same exception is thrown.

      Thank you very much in advance for your help.

            Assignee:
            Unassigned Unassigned
            Reporter:
            asotobu Alex
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: