如何解决Couchbase Java SDK 因 BUCKET_NOT_AVAILABLE 超时
我正在执行 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_NOT_AVAILABLE。这是完整的消息:
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 方法会立即返回,并继续在后台打开存储桶。因此,您执行的第一个操作 - 此处为 lookupIn - 需要等待该资源打开完成才能继续。访问 Couchbase 存储分区的时间似乎比平时稍长,并且您超时了。
我建议在打开一个bucket后使用Bucket::waitUntilReady方法,阻塞直到资源打开完成:
bucket = cluster.bucket("my_bucket")
bucket.waitUntilReady(Duration.ofMinutes(1));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。