-
Type:
Task
-
Resolution: Works as Designed
-
Priority:
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