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

MongoDB Java Client gets stuck after new PRIMARY is elected

    • Type: Icon: Improvement Improvement
    • Resolution: Done
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: 3.0.2
    • Component/s: Cluster Management
    • None

      I'm trying to test a fail-over scenario with MongoDB Java Client:

      • connect to replica set with 3 nodes (1 primary + 2 secondary)
      • kill the primary
      • new primary node is elected
      • (expected) driver continues to work after failing over

      Actual:

      • MongoDB java client tries to Rediscovering type of existing primary, gets Exception in monitor thread while connecting to server nosql-x64-node-2:27017 and gets stuck:
        20:19:52,352  INFO cluster:71 - Cluster created with settings {hosts=[nosql-x64-node-1:27017], mode=MULTIPLE, requiredClusterType=REPLICA_SET, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500, requiredReplicaSetName='rs1'}
        20:19:52,353  INFO cluster:71 - Adding discovered server nosql-x64-node-1:27017 to client view of cluster
        20:19:52,483  INFO cluster:71 - No server chosen by PrimaryServerSelector from cluster description ClusterDescription{type=REPLICA_SET, connectionMode=MULTIPLE, all=[ServerDescription{address=nosql-x64-node-1:27017, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out
        20:19:52,487  INFO connection:71 - Opened connection [connectionId{localValue:1, serverValue:125}] to nosql-x64-node-1:27017
        20:19:52,493  INFO cluster:71 - Monitor thread successfully connected to server with description ServerDescription{address=nosql-x64-node-1:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 0, 2]}, minWireVersion=0, maxWireVersion=3, electionId=null, maxDocumentSize=16777216, roundTripTimeNanos=1508516, setName='rs1', canonicalAddress=nosql-x64-node-1:27017, hosts=[nosql-x64-node-3:27017, nosql-x64-node-2:27017, nosql-x64-node-1:27017], passives=[], arbiters=[], primary='nosql-x64-node-2:27017', tagSet=TagSet{[]}}
        20:19:52,496  INFO cluster:71 - Adding discovered server nosql-x64-node-3:27017 to client view of cluster
        20:19:52,499  INFO cluster:71 - Adding discovered server nosql-x64-node-2:27017 to client view of cluster
        20:19:52,505  INFO connection:71 - Opened connection [connectionId{localValue:2, serverValue:169}] to nosql-x64-node-3:27017
        20:19:52,507  INFO connection:71 - Opened connection [connectionId{localValue:3, serverValue:161}] to nosql-x64-node-2:27017
        20:19:52,508  INFO cluster:71 - Monitor thread successfully connected to server with description ServerDescription{address=nosql-x64-node-3:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 0, 2]}, minWireVersion=0, maxWireVersion=3, electionId=null, maxDocumentSize=16777216, roundTripTimeNanos=1761189, setName='rs1', canonicalAddress=nosql-x64-node-3:27017, hosts=[nosql-x64-node-3:27017, nosql-x64-node-2:27017, nosql-x64-node-1:27017], passives=[], arbiters=[], primary='nosql-x64-node-2:27017', tagSet=TagSet{[]}}
        20:19:52,510  INFO cluster:71 - Monitor thread successfully connected to server with description ServerDescription{address=nosql-x64-node-2:27017, type=REPLICA_SET_PRIMARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 0, 2]}, minWireVersion=0, maxWireVersion=3, electionId=55844af54ac7e7537155bd46, maxDocumentSize=16777216, roundTripTimeNanos=1413436, setName='rs1', canonicalAddress=nosql-x64-node-2:27017, hosts=[nosql-x64-node-3:27017, nosql-x64-node-2:27017, nosql-x64-node-1:27017], passives=[], arbiters=[], primary='nosql-x64-node-2:27017', tagSet=TagSet{[]}}
        20:19:52,510  INFO cluster:71 - Discovered replica set primary nosql-x64-node-2:27017
        20:19:52,518  INFO connection:71 - Opened connection [connectionId{localValue:4, serverValue:162}] to nosql-x64-node-2:27017
        ...
        20:21:12,521  INFO cluster:71 - Monitor thread successfully connected to server with description ServerDescription{address=nosql-x64-node-3:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 0, 2]}, minWireVersion=0, maxWireVersion=3, electionId=55844f8645d8c9dd9bbdebfe, maxDocumentSize=16777216, roundTripTimeNanos=1103740, setName='rs1', canonicalAddress=nosql-x64-node-3:27017, hosts=[nosql-x64-node-3:27017, nosql-x64-node-2:27017, nosql-x64-node-1:27017], passives=[], arbiters=[], primary='nosql-x64-node-3:27017', tagSet=TagSet{[]}}
        20:21:13,013  INFO cluster:71 - Monitor thread successfully connected to server with description ServerDescription{address=nosql-x64-node-1:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 0, 2]}, minWireVersion=0, maxWireVersion=3, electionId=null, maxDocumentSize=16777216, roundTripTimeNanos=1120967, setName='rs1', canonicalAddress=nosql-x64-node-1:27017, hosts=[nosql-x64-node-3:27017, nosql-x64-node-2:27017, nosql-x64-node-1:27017], passives=[], arbiters=[], primary='nosql-x64-node-3:27017', tagSet=TagSet{[]}}
        20:21:32,525  INFO cluster:71 - Monitor thread successfully connected to server with description ServerDescription{address=nosql-x64-node-3:27017, type=REPLICA_SET_PRIMARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 0, 2]}, minWireVersion=0, maxWireVersion=3, electionId=55844f8645d8c9dd9bbdebfe, maxDocumentSize=16777216, roundTripTimeNanos=1063299, setName='rs1', canonicalAddress=nosql-x64-node-3:27017, hosts=[nosql-x64-node-3:27017, nosql-x64-node-2:27017, nosql-x64-node-1:27017], passives=[], arbiters=[], primary='nosql-x64-node-3:27017', tagSet=TagSet{[]}}
        20:21:32,526  INFO cluster:71 - Discovered replica set primary nosql-x64-node-3:27017
        20:21:32,527  INFO cluster:71 - Rediscovering type of existing primary nosql-x64-node-2:27017
        20:21:34,814  INFO cluster:76 - Exception in monitor thread while connecting to server nosql-x64-node-2:27017
        com.mongodb.MongoSocketOpenException: Exception opening socket
        	at com.mongodb.connection.SocketStream.open(SocketStream.java:63)
        	at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114)
        	at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127)
        	at java.lang.Thread.run(Thread.java:745)
        Caused by: java.net.NoRouteToHostException: No route to host
        	at java.net.PlainSocketImpl.socketConnect(Native Method)
        	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
        	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
        	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
        	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        	at java.net.Socket.connect(Socket.java:579)
        	at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50)
        	at com.mongodb.connection.SocketStream.open(SocketStream.java:58)
        	... 3 more
        

            Assignee:
            Unassigned Unassigned
            Reporter:
            attila.tokes Attila T?kés
            Votes:
            6 Vote for this issue
            Watchers:
            9 Start watching this issue

              Created:
              Updated:
              Resolved: