[JAVA-1038] MongoException when connecting to a pool of mongos with a majority of them down Created: 05/Nov/13  Updated: 05/Nov/13  Resolved: 05/Nov/13

Status: Closed
Project: Java Driver
Component/s: Cluster Management
Affects Version/s: 2.11.3
Fix Version/s: None

Type: Improvement Priority: Major - P3
Reporter: Gui Forget Assignee: Unassigned
Resolution: Duplicate Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Duplicate
duplicates JAVA-996 2.12: Make driver more proactive abou... Closed

 Description   

I'm initializing the Mongo instance (Java object) with the following options:
2013-10-24 21:30:35,906 [http-8080-exec-6] INFO Mongo{authority=MongoAuthority{type=Set, serverAddresses=[localhost/127.0.0.1:27027, HOST1/10.149.12.79:27027, HOST2/10.154.149.70:27027, HOST3/10.158.33.16:27027], credentials={credentials={}}}, options=MongoOptions{description='null', connectionsPerHost=40, threadsAllowedToBlockForConnectionMultiplier=5, maxWaitTime=10000, connectTimeout=10000, socketTimeout=30000, socketKeepAlive=false, autoConnectRetry=false, maxAutoConnectRetryTime=0, slaveOk=false, readPreference=secondaryPreferred : { "tags" : [

{ "aws-az" : "us-east-1e"}

]}, dbDecoderFactory=DefaultDBDecoder.DefaultFactory, dbEncoderFactory=DefaultDBEncoder.DefaultFactory, safe=false, w=0, wtimeout=0, fsync=false, j=false, socketFactory=javax.net.DefaultSocketFactory@20c66135, cursorFinalizerEnabled=true, writeConcern=WriteConcern

{ "getlasterror" : 1}

/ (Continue Inserting on Errors? false), alwaysUseMBeans=false}}

HOST1, HOST2 and HOST3 are dead when I start due to a bad config. And I get the following error:
com.mongodb.MongoException: can't find a master
at com.mongodb.DBTCPConnector.checkMaster(DBTCPConnector.java:517)
at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:134)
at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:115)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:248)

If I start with the following options:
2013-10-24 21:43:13,608 [http-8080-exec-19] INFO Mongo{authority=MongoAuthority{type=Set, serverAddresses=[localhost/127.0.0.1:27027], credentials={credentials={}}}, options=MongoOptions{description='null', connectionsPerHost=40, threadsAllowedToBlockForConnectionMultiplier=5, maxWaitTime=10000, connectTimeout=10000, socketTimeout=30000, socketKeepAlive=false, autoConnectRetry=false, maxAutoConnectRetryTime=0, slaveOk=false, readPreference=secondaryPreferred : { "tags" : [

{ "aws-az" : "us-east-1e"}

]}, dbDecoderFactory=DefaultDBDecoder.DefaultFactory, dbEncoderFactory=DefaultDBEncoder.DefaultFactory, safe=false, w=0, wtimeout=0, fsync=false, j=false, socketFactory=javax.net.DefaultSocketFactory@2cc29d3d, cursorFinalizerEnabled=true, writeConcern=WriteConcern

{ "getlasterror" : 1}

/ (Continue Inserting on Errors? false), alwaysUseMBeans=false}}

Then it starts fine. It's as if it ignored the localhost entry in the first case. I can reproduce this at will.



 Comments   
Comment by Jeffrey Yemin [ 05/Nov/13 ]

Closing as duplicate of JAVA-996

Comment by Jeffrey Yemin [ 05/Nov/13 ]

Hi Gui,

I can reproduce this at will too. This is a design flaw, and it will be fixed in the next release. As a workaround, try setting this system property to a much lower value than the default of 20,000 milliseconds, perhaps to 1000 milliseconds.

com.mongodb.updaterConnectTimeoutMS=1000

With this setting, It will take 1000 ms to try to connect to each of HOST1, HOST2, and HOST3, before settling on localhost.

Generated at Thu Feb 08 08:53:40 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.