【发布时间】:2021-02-15 07:08:50
【问题描述】:
我们遇到了一个问题,即已删除的文档重新出现在我们的 Couchbase 服务器上。
我们有一个在 CBL 上创建文档的场景。这些文档同步到服务器。用户意识到发生了错误并将文档标记为不正确。然后,管理员可以在服务器上查看所有标记的文档并将它们从服务器中删除。同步网关已设置为仅同步这些类型的文档,即一旦在服务器上对这些文档进行了编辑,更改就不会同步回 CBL。
这是发生的过程:
- 文档在 CBL 上创建,TTL 为 15 天并同步到同步
- 文档在 CBL 上更新并同步到同步网关。
- 文档已从 Couchbase 服务器存储桶中删除,并带有 DELETE N1QL 查询。
- 从获取的存储桶中删除文档后 过几天又随机添加了。
- 仅适用于 仍在设备上,即不早于 15 天的 TTL,添加 回到桶里。
我们尝试将元数据清除间隔增加到 15 天以上,但这并没有解决问题。
有没有人有任何建议或可能知道这里可能存在什么问题?
- Couchbase Server Community Edition 6.5.1 build 6299
- 同步网关 2.7.3
- Couchbase Lite Android 2.8.1
提前致谢!
PS:这是我们的同步网关配置与同步功能:
"log": [
"*"
],
"adminInterface": "0.0.0.0:4985",
"interface": "0.0.0.0:4984",
"databases": {
"prod": {
"server": "http://localhost:8091",
"bucket": "prod_bukcet",
"username": "sync_gateway",
"password": "XXX",
"enable_shared_bucket_access": true,
"import_docs": "continuous",
"use_views": true,
"users": {
"user_X": {
"password": "XXX",
"admin_channels": ["*"],
"disabled": false
}
},
"sync":`
function sync(doc, oldDoc) {
/* sanity check */
// check if document was removed from server or via SDK
// In this case, just return
if (isRemoved()) {
return;
}
//Only sync down documents that are created on the server
if (doc.deviceDoc == true) {
channel("server");
} else {
if (doc.siteId) {
channel(doc.siteId);
} else {
channel("devices");
}
}
// This is when document is removed via SDK or directly on server
function isRemoved() {
return (isDelete() && oldDoc == null);
}
function isDelete() {
return (doc._deleted == true);
}
}`,
}
}
}
【问题讨论】:
标签: couchbase couchbase-lite couchbase-sync-gateway