Hello,
We have recently upgraded to Java SDK version 3.2.2, And this server is a user facing sever getting a lot of traffic. Our previous sdk version was 2.7.20 , so its a major version jump.
General flow is user request → hits the server → get data from couchbase → process the data → return the response back to the user
When it hits the couchbase sdk I am getting below exception:
Caused by: java.lang.InterruptedException\n\tat java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:347) ~[?:1.8.0_202]\n\tat java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895) ~[?:1.8.0_202]\n\tat com.sony.sie.kamaji.montecarlo.common.couchbase.dao.impl.MotoDocumentDaoImpl.returnResultOrThrow(MotoDocumentDaoImpl.java:174) ~[media-commons-1.0.20211102213059.jar!/:?]\n\t... 21
Its also note worthy that before all the exceptions i also get this
{"thread":"cb-events","logtype":"app","level":"WARN","message":"[com.couchbase.endpoint][UnexpectedEndpointDisconnectedEvent] The remote side disconnected the endpoint unexpectedly {\"circuitBreaker\":\"DISABLED\",\"coreId\":\"0x9b5545b900000001\",\"local\":\"192.168.32.7:42364\",\"remote\":\"10.241.123.141:8093\",\"type\":\"QUERY\"}","timestamp":"2021-11-10T22:18:46.271Z","logger":"com.couchbase.endpoint"}
This server hits a lot of traffic .
Generally interrupted exception happens if something shuts down , is it that the connection to couchbase has shut down . The above warning happens if the server is idle for sometime, But it should reconnect.
I get it in both bucket.async().defaultCollection().query() and bucket.async().defaultCollection().get()
Once i get the completable future for these statements … i do a completableFuture.get() to get the data.
Its also worth to note that RxJava when doing blockForSingle() never encountered this issue. So wonder if the cluster is shutting down suddenly causing this. What could be the solution.
Below is my config of how i am creating the config.
final ClusterEnvironment environment = ClusterEnvironment.builder()
.timeoutConfig(TimeoutConfig.connectTimeout(Duration.ofMillis(timeout))
.kvTimeout(Duration.ofMillis(kvTimeout))
.queryTimeout(Duration.ofMillis(queryTimeout)))
.ioConfig(IoConfig.idleHttpConnectionTimeout(Duration.ofMillis(idleTimeout))
.maxHttpConnections(maxHttpConnections)
.networkResolution(NetworkResolution.AUTO)
.enableTcpKeepAlives(tcpKeepAliveEnabled))
.thresholdLoggingTracerConfig(ThresholdLoggingTracerConfig.builder()
.emitInterval(Duration.ofMillis(logEmitInterval))
.kvThreshold(Duration.ofMillis(logKvThreshold))
.queryThreshold(Duration.ofSeconds(logQueryThreshold)))
.retryStrategy(BestEffortRetryStrategy.INSTANCE)
.meter(MicrometerMeter.wrap(Metrics.globalRegistry))
.build();
ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.ADVANCED);
Please help me with this,
Thank you in advance.