Couchbase Java SDK超时,BUCKET\u不可用

Couchbase Java SDK超时,BUCKET\u不可用,couchbase,couchbase-java-api,Couchbase,Couchbase Java Api,我正在执行Couchbase Java SDK 3.0.9的查找操作,如下所示: // Set up bucket = cluster.bucket("my_bucket") collection = bucket.defaultCollection() // Look up operation val specs = listOf(LookupInSpecStandard.get("hash")) collection.lookupIn(id, spec

我正在执行Couchbase Java SDK 3.0.9的查找操作,如下所示:

// Set up
bucket = cluster.bucket("my_bucket")
collection = bucket.defaultCollection()
// Look up operation
val specs = listOf(LookupInSpecStandard.get("hash"))
collection.lookupIn(id, specs)
我得到的错误是BUCKET\u不可用。以下是完整的信息:

com.couchbase.client.core.error.UnambiguousTimeoutException: SubdocGetRequest, Reason: TIMEOUT {"cancelled":true,"completed":true,"coreId":"0xdb7f8e4800000003","idempotent":true,"reason":"TIMEOUT","requestId":608806,"requestType":"SubdocGetRequest","retried":39,"retryReasons":["BUCKET_NOT_AVAILABLE"],"service":{"bucket":"export","collection":"_default","documentId":"export:main","opaque":"0xcfefb","scope":"_default","type":"kv"},"timeoutMs":15000,"timings":{"totalMicros":15008977}}
奇怪的是,这段代码已经好几个月没有被触动了,而且查找是突然发生的。CB集群工作正常。它的版本是 企业版6.5.1构建6299


你知道哪里出了问题吗?

请注意,在Couchbase Java SDK 3.x中,Cluster::bucket方法立即返回,并继续在后台打开一个bucket。因此,您执行的第一个操作—此处的查找—需要等待资源打开完成,然后才能继续。看起来访问Couchbase bucket的时间比平常长了一点,您得到了一个超时

我建议在打开Bucket后使用Bucket::waitUntilReady方法阻止,直到资源打开完成:

bucket = cluster.bucket("my_bucket")
bucket.waitUntilReady(Duration.ofMinutes(1));

水桶的名字其实不是“我的水桶”,是吗?bucket名称中不允许使用空格。另外,错误是“无法upsert”,但在您提供的代码示例中,我没有看到upsert操作。你遗漏了那个部分吗?不,日志记录是错误的,因为我们在实际插入之前进行查找。我会编辑的。我通过重新创建桶中使用的索引来解决这个问题。然而,我仍在调查这是什么时候发生的。也许当我在一秒钟内发送太多db请求时,它会超时。@TeodorDimitrov您已经能够解决这个问题了吗?我与.NET客户端有完全相同的问题。代码已经好几个星期没有更改了。bucket是打开的,因为在此之前许多操作都成功了。我的猜测是,由于更高的流量,它与此消息中断。在我们缩放CB服务器后,错误不再显示。