Interrupted exception on completablefuture.get() with couchbase java sdk

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.

@herat_acharya the exception you showed is coming from your implementation - can you provide logs so we can look at what the SDK is doing?

What I’m confused: why do you use the async API when you immediately block? Why not use the blocking API in the first place?

@daschl I saw the sync methods but they are internally using the same thing AsyncUtils.block() and calling cluster.async() or bucket.async() … its not different than what i was doing…
is there a better way to do this in reactive java… rather than blocking the main thread.