Java Client - get/put - how to know which cluster node is contacted


#1

Our application connects to Couchbase 3.0 cluster with 6 nodes.
We are getting below timeout exception frequently in production, but the issue is not there in development or load test environment. We presume this could be due to connectivity issues to any one of the cluster node (we are not sure ! ).

Is there a way to know while connecting to which cluster node exception is coming?

  • java-client 2.1.4 jar is used
  • couchbase-server 3.0.1 community version

Exception:

2016-03-31 11:19:23 ERROR : - java.lang.RuntimeException: java.util.concurrent.TimeoutException
at com.couchbase.client.java.util.Blocking.blockForSingle(Blocking.java:93)
at com.couchbase.client.java.CouchbaseBucket.get(CouchbaseBucket.java:120)
at com.couchbase.client.java.CouchbaseBucket.get(CouchbaseBucket.java:115)
at com.his.farebroker.interfaces.couchbase.BlacklistProductBucket.getElementFromBucket(BlacklistProductBucket.java:98)
at com.his.farebroker.interfaces.couchbase.FBCouchbaseBucketFactory.getElementFromBucket(FBCouchbaseBucketFactory.java:87)
at com.his.farebroker.cache.common.CouchbaseHelper.getElementFromBucket(CouchbaseHelper.java:40)
at com.his.farebroker.cache.common.CouchbaseHelper$$FastClassByCGLIB$$1c211194.invoke()
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:617)
at com.his.farebroker.cache.common.CouchbaseHelper$$EnhancerByCGLIB$$9e1bf753.getElementFromBucket()
at com.his.farebroker.cache.common.CacheHelper.getElementFromBlackListCache(CacheHelper.java:388)
at com.his.farebroker.cache.blacklist.BlacklistReqResCache.getBlacklistedSegmentVOFromCache(BlacklistReqResCache.java:73)
at com.his.farebroker.businessrules.applyrule.service.impl.BusinessRuleApplicationServiceImpl.chkIsAnySegmntBlklstdInCache(BusinessRuleApplicationServiceImpl.java:32711)
at com.his.farebroker.businessrules.applyrule.service.impl.BusinessRuleApplicationServiceImpl.applyBusinessRuleInBatch(BusinessRuleApplicationServiceImpl.java:40234)
at com.his.farebroker.businessrules.applyrule.service.impl.BusinessRuleApplicationServiceImpl.access$000(BusinessRuleApplicationServiceImpl.java:220)
at com.his.farebroker.businessrules.applyrule.service.impl.BusinessRuleApplicationServiceImpl$1.call(BusinessRuleApplicationServiceImpl.java:1587)
at com.his.farebroker.businessrules.applyrule.service.impl.BusinessRuleApplicationServiceImpl$1.call(BusinessRuleApplicationServiceImpl.java:1584)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.util.concurrent.TimeoutException
… 22 more


#2

If you can find out one document key that times out, there’s a CLI tool that will let you know which node a specific key is attached to.

This is called cbc (quick install doc here), and the cbc hash command more specifically.

Something like:

cbc hash TheKey -U couchbase://10.0.0.31

That would output, among other things, the server IP/hostname where that particular key is hosted in the cluster.