0

I have spring boot application which runs on the cloud and i use mongo db.

When i check the logs i see that sometimes i got the the socketException.

Here is the logs

In my local machine I couldn't reproduce this exception.

Does anyone have any idea why I got this exception ?

2021-08-10 10:19:53.841||segment-service||INFO ||abe8a9a7-98a6-4262-9e34-29ec935757c9||||||preHandle: request matched: GET - /v1/segments/ 
2021-08-10 10:19:53.845||segment-service||WARN ||||||||Got socket exception on connection [connectionId{localValue:276, serverValue:224177}] to mongo-cluster-mongodb-0.mongo-cluster-mongodb.mongo.svc.cluster.local:27017. All connections to mongo-cluster-mongodb-0.mongo-cluster-mongodb.mongo.svc.cluster.local:27017 will be closed. 
2021-08-10 10:19:53.846||segment-service||INFO ||abe8a9a7-98a6-4262-9e34-29ec935757c9||6066e50c9bda8e4c82380a03||5fe5d5d181c03e6e10109c52||request for /v1/segments/ duration: 5 ms 
2021-08-10 10:19:53.846||segment-service||INFO ||||||||Closed connection [connectionId{localValue:276, serverValue:224177}] to mongo-cluster-mongodb-0.mongo-cluster-mongodb.mongo.svc.cluster.local:27017 because there was a socket exception raised by this connection. 
2021-08-10 10:19:53.851||segment-service||INFO ||||||||Discovered replica set primary mongo-cluster-mongodb-0.mongo-cluster-mongodb.mongo.svc.cluster.local:27017 
2021-08-10 10:19:53.850||segment-service||WARN ||||||||MongoDB health check failed 
org.springframework.data.mongodb.UncategorizedMongoDbException: Exception sending message; nested exception is com.mongodb.MongoSocketWriteException: Exception sending message 
    at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:138) 
    at org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:2902) 
    at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:560) 
    at org.springframework.data.mongodb.core.MongoTemplate.executeCommand(MongoTemplate.java:476)  org.springframework.boot.actuate.health.HealthEndpointSupport.getContribution(HealthEndpointSupport.java:105) 
    at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:83) 
    at org.springframework.boot.actuate.health.HealthEndpointSupport.getHealth(HealthEndpointSupport.java:70) 
    org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$ServletWebOperationAdapter.handle(AbstractWebMvcEndpointHandlerMapping.java:305) 
    at org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(AbstractWebMvcEndpointHandlerMapping.java:388) 
    at sun.reflect.GeneratedMethodAccessor45.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) 
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:747) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367) 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:748) 
Caused by: com.mongodb.MongoSocketWriteException: Exception sending message 
    at com.mongodb.internal.connection.InternalStreamConnection.translateWriteException(InternalStreamConnection.java:551) 
    at com.mongodb.internal.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:433) 
    at com.mongodb.internal.connection.InternalStreamConnection.sendCommandMessage(InternalStreamConnection.java:273) 
    com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:189) 
    at com.mongodb.client.internal.MongoDatabaseImpl.executeCommand(MongoDatabaseImpl.java:186) 
    at com.mongodb.client.internal.MongoDatabaseImpl.runCommand(MongoDatabaseImpl.java:155) 
    at com.mongodb.client.internal.MongoDatabaseImpl.runCommand(MongoDatabaseImpl.java:150) 
    at org.springframework.data.mongodb.core.MongoTemplate.lambda$executeCommand$2(MongoTemplate.java:476) 
    at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:558) 
    ... 75 common frames omitted 
Caused by: java.net.SocketException: Broken pipe (Write failed) 
    at java.net.SocketOutputStream.socketWrite0(Native Method) 
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111) 
    at java.net.SocketOutputStream.write(SocketOutputStream.java:155) 
    at com.mongodb.internal.connection.SocketStream.write(SocketStream.java:99) 
    at com.mongodb.internal.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:430) 
    ... 98 common frames omitted 
2
  • 1
    It shows MongoDB health check failed. You probably want to verify the health of your cluster. If this is a replica set are all nodes up and available? What does rs.status() show? Commented Aug 19, 2021 at 17:56
  • 1
    You can check if the tcp connections to the clusters are active or not. Commented Aug 19, 2021 at 18:05

1 Answer 1

1

Caused by: java.net.SocketException: Broken pipe (Write failed) would imply that that the Java machine tried to write to the network, but the socket was not (possibly no longer?) in a state that could be written.

Check for basic networking problems. If you don't find any try decreasing the TCP keepalive timeout.

If that doesn't work, catch the exception and retry whatever operation this was.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.