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

A 0 value for connectionTimeout causes a 0 maxWaitTime

    • Type: Icon: Bug Bug
    • Resolution: Done
    • Priority: Icon: Major - P3 Major - P3
    • 3.0.0
    • Affects Version/s: 2.12.5
    • Component/s: Connection Management

      If a 0 connection timeout is defined, it will causes an exception.

      MongoClientOptions.Builder options = MongoClientOptions.builder();
      options.connectTimeout(0);
      MongoClientURI mongoClientURI = new MongoClientURI("mongodb://127.0.0.1:27017", options);
      MongoClient mongoClient = new MongoClient(mongoClientURI);
      DB db = mongoClient.getDB("test");
      DBCollection collection = db.getCollection("test");
      System.out.println(collection.findOne());
      
      Exception in thread "main" com.mongodb.MongoTimeoutException: Timed out after 0 ms while waiting to connect. Client view of cluster state is {type=Unknown, servers=[{address=localhost:27017, type=Unknown, state=Connecting}]
          at com.mongodb.BaseCluster.getDescription(BaseCluster.java:128)
          at com.mongodb.DBTCPConnector.getClusterDescription(DBTCPConnector.java:393)
          at com.mongodb.DBTCPConnector.getType(DBTCPConnector.java:565)
          at com.mongodb.DBTCPConnector.isMongosConnection(DBTCPConnector.java:367)
          at com.mongodb.Mongo.isMongosConnection(Mongo.java:645)
          at com.mongodb.DBCollection.findOne(DBCollection.java:865)
          at com.mongodb.DBCollection.findOne(DBCollection.java:843)
          at com.mongodb.DBCollection.findOne(DBCollection.java:789)
          at com.mongodb.DBCollection.findOne(DBCollection.java:778)
          at MongoTest.main(MongoTest.java:27)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:606)
          at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
      

      That behaviour doesn't match the driver documentation.

      I believe the following is one of the things on 2.12 that causes the behaviour because is obtaining the maximum wait time choosing the minimal value including the connectTimeOut.

      https://github.com/mongodb/mongo-java-driver/blob/r2.12.5/src/main/com/mongodb/DBTCPConnector.java#L396

            Assignee:
            Unassigned Unassigned
            Reporter:
            ricardo.lorenzo Ricardo Lorenzo
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: