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

Unable to access cluster with driver

    • Type: Icon: Task Task
    • Resolution: Works as Designed
    • Priority: Icon: Minor - P4 Minor - P4
    • None
    • Affects Version/s: 3.4.2
    • Component/s: None
    • None
    • Environment:
      Windows
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      Hello,

      I am trying to connect to my cluster with java driver. However I am not able.
      I was using 3.0.x version and I migrated to 3.4.2 to have compatiblity with mongodb 3.4

      For information:

      • MongoDB server version: 3.4.6
      • Driver version: 3.4.2

      I always get the same error:

      Caused by: org.springframework.dao.DataAccessResourceFailureException: Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=cluster0-shard-00-01-b7hgq.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadException: Prematurely reached end of stream}}, {address=cluster0-shard-00-02-b7hgq.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadException: Prematurely reached end of stream}}, {address=cluster0-shard-00-00-b7hgq.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadException: Prematurely reached end of stream}}]; nested exception is com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=cluster0-shard-00-01-b7hgq.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadException: Prematurely reached end of stream}}, {address=cluster0-shard-00-02-b7hgq.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadException: Prematurely reached end of stream}}, {address=cluster0-shard-00-00-b7hgq.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadException: Prematurely reached end of stream}}]
      	at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:77) ~[spring-data-mongodb-1.9.6.RELEASE.jar:na]
      	at org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:2118) ~[spring-data-mongodb-1.9.6.RELEASE.jar:na]
      	at org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1908) ~[spring-data-mongodb-1.9.6.RELEASE.jar:na]
      	at org.springframework.data.mongodb.core.MongoTemplate.doFindOne(MongoTemplate.java:1716) ~[spring-data-mongodb-1.9.6.RELEASE.jar:na]
      	at org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:586) ~[spring-data-mongodb-1.9.6.RELEASE.jar:na]
      	at org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:581) ~[spring-data-mongodb-1.9.6.RELEASE.jar:na]
      	at com.handyou.context.HYProjectContext.getStringParameter(HYProjectContext.java:48) ~[commons-0.0-SNAPSHOT.jar:na]
      	at com.handyou.auth.PostProcessesFilter.addOrigin(PostProcessesFilter.java:110) ~[connect-impl-0.0-SNAPSHOT.jar:na]
      	at com.handyou.auth.PostProcessesFilter.renewTokenIfNeeded(PostProcessesFilter.java:102) ~[connect-impl-0.0-SNAPSHOT.jar:na]
      	at com.handyou.auth.PostProcessesFilter.filter(PostProcessesFilter.java:57) ~[connect-impl-0.0-SNAPSHOT.jar:na]
      	at com.handyou.auth.PostProcessesFilter$$FastClassBySpringCGLIB$$8d597cba.invoke(<generated>) ~[connect-impl-0.0-SNAPSHOT.jar:na]
      	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-4.2.3.RELEASE.jar:4.2.3.RELEASE]
      	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:718) ~[spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE]
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE]
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133) ~[spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE]
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121) ~[spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE]
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE]
      	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:654) ~[spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE]
      	at com.handyou.auth.PostProcessesFilter$$EnhancerBySpringCGLIB$$6dcb9187.filter(<generated>) ~[connect-impl-0.0-SNAPSHOT.jar:na]
      	at org.apache.cxf.jaxrs.utils.JAXRSUtils.runContainerResponseFilters(JAXRSUtils.java:1679) ~[cxf-rt-frontend-jaxrs-3.0.7.jar:3.0.7]
      	at org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.serializeMessage(JAXRSOutInterceptor.java:170) ~[cxf-rt-frontend-jaxrs-3.0.7.jar:3.0.7]
      	... 40 common frames omitted
      Caused by: com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=cluster0-shard-00-01-b7hgq.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadException: Prematurely reached end of stream}}, {address=cluster0-shard-00-02-b7hgq.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadException: Prematurely reached end of stream}}, {address=cluster0-shard-00-00-b7hgq.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadException: Prematurely reached end of stream}}]
      	at com.mongodb.connection.BaseCluster.createTimeoutException(BaseCluster.java:377) ~[mongo-java-driver-3.4.2.jar:na]
      	at com.mongodb.connection.BaseCluster.selectServer(BaseCluster.java:104) ~[mongo-java-driver-3.4.2.jar:na]
      	at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<init>(ClusterBinding.java:75) ~[mongo-java-driver-3.4.2.jar:na]
      	at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<init>(ClusterBinding.java:71) ~[mongo-java-driver-3.4.2.jar:na]
      	at com.mongodb.binding.ClusterBinding.getReadConnectionSource(ClusterBinding.java:63) ~[mongo-java-driver-3.4.2.jar:na]
      	at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:402) ~[mongo-java-driver-3.4.2.jar:na]
      	at com.mongodb.operation.FindOperation.execute(FindOperation.java:510) ~[mongo-java-driver-3.4.2.jar:na]
      	at com.mongodb.operation.FindOperation.execute(FindOperation.java:81) ~[mongo-java-driver-3.4.2.jar:na]
      	at com.mongodb.Mongo.execute(Mongo.java:836) ~[mongo-java-driver-3.4.2.jar:na]
      	at com.mongodb.Mongo$2.execute(Mongo.java:823) ~[mongo-java-driver-3.4.2.jar:na]
      	at com.mongodb.DBCursor.initializeCursor(DBCursor.java:870) ~[mongo-java-driver-3.4.2.jar:na]
      	at com.mongodb.DBCursor.hasNext(DBCursor.java:142) ~[mongo-java-driver-3.4.2.jar:na]
      	at com.mongodb.DBCursor.one(DBCursor.java:679) ~[mongo-java-driver-3.4.2.jar:na]
      	at com.mongodb.DBCollection.findOne(DBCollection.java:833) ~[mongo-java-driver-3.4.2.jar:na]
      	at com.mongodb.DBCollection.findOne(DBCollection.java:796) ~[mongo-java-driver-3.4.2.jar:na]
      	at com.mongodb.DBCollection.findOne(DBCollection.java:743) ~[mongo-java-driver-3.4.2.jar:na]
      	at org.springframework.data.mongodb.core.MongoTemplate$FindOneCallback.doInCollection(MongoTemplate.java:2169) ~[spring-data-mongodb-1.9.6.RELEASE.jar:na]
      	at org.springframework.data.mongodb.core.MongoTemplate$FindOneCallback.doInCollection(MongoTemplate.java:2153) ~[spring-data-mongodb-1.9.6.RELEASE.jar:na]
      	at org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1905) ~[spring-data-mongodb-1.9.6.RELEASE.jar:na]
      	... 58 common frames omitted
      

      Here is what I am using to get the client:

      public MongoDbFactory mongoDbFactory() throws Exception {
      		if(mongoClient == null){
      			
      			List<ServerAddress> seeds = new ArrayList<>();
      			seeds.add(new ServerAddress("cluster0-shard-00-00-b7hgq.mongodb.net", 27017));
      			seeds.add(new ServerAddress("cluster0-shard-00-01-b7hgq.mongodb.net", 27017));
      			seeds.add(new ServerAddress("cluster0-shard-00-02-b7hgq.mongodb.net", 27017));
      			List<MongoCredential> credentialsList = new ArrayList<>();
      			credentialsList.add(MongoCredential.createCredential(USER, HYDB, PASSWORD.toCharArray()));
      			
      			mongoClient = new MongoClient(seeds, credentialsList);
      		}
      		return new SimpleMongoDbFactory(mongoClient, HYDB);
      	}
      

      And the accessor:

      public String getStringParameter(String parameterName) {
      
      		// query to search user
      		Query searchUserQuery = new Query(Criteria.where("name").is(parameterName));
      
      		// find the saved user again.
      		Configuration configuration = mongoAccess.getOperation().findOne(searchUserQuery, Configuration.class);
      
      		return configuration.getValue();
      	}
      

      When I try to do in local:

      public MongoDbFactory mongoDbFactory() throws Exception {
      		if(mongoClient == null){
      			mongoClient = new MongoClient();
      		}
      		//mongoClient.close();
      		return new SimpleMongoDbFactory(mongoClient, HYDB);
      	}
      

      It is supposed to do it with 127.0.0.1 and I am getting no issues.

      The connection information are correct as I am able to connect to cluster with mongoshell

      Last thing I tried with the solution proposed here and I am getting another issue:

      So basically I am doing:

      String url = "mongodb://<USER_WITH_DASH>:<PASSWORD_WITHOUT_SPECIAL_CHAR>@cluster0-shard-00-00-b7hgq.mongodb.net:27017,mongodb://<USER_WITH_DASH>:<PASSWORD_WITHOUT_SPECIAL_CHAR>@cluster0-shard-00-01-b7hgq.mongodb.net:27017,mongodb://<USER_WITH_DASH>:<PASSWORD_WITHOUT_SPECIAL_CHAR>@cluster0-shard-00-02-b7hgq.mongodb.net:27017/admin?ssl=true&replicaSet=cluster0-shard-0&authSource=admin";
      
      MongoClientURI uri = new MongoClientURI(url);
      MongoClient mongoClient = new MongoClient(uri);
      

      As user as a dash I tried with "-" or "%2D" but always getting same error:

      java.lang.IllegalArgumentException: The connection string contains invalid user information. If the username or password contains a colon (:) or an at-sign (@) then it must be urlencoded
      

      Can someone helps me as I am totally blocked for my preproduction tests...

      Thanks in advance

      Regards

            Assignee:
            Unassigned Unassigned
            Reporter:
            geoffrey.muselli@gmail.com Geoffrey Muselli
            None
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: