报错是这么冒出来的。Qdrant 1.12.1,把旧集群的 snapshot 恢复到新实例,接口报 Collection docs already exists,新实例上确实先建过一个同名空集合,一条数据都没有。

中间走过弯路,把「快照文件版本与目标实例不一致」当成主因,改完现象没变。

排查方向其实有限,先把可能性排一排。目标实例已有同名 collection,恢复不会覆盖。另一种情况是恢复接口的 priority 用默认值,遇到冲突直接失败。

还有一种情况,请求发到了错误节点,集群里另一个副本仍持有旧集合。

动手时先列出目标实例上的集合

curl -s localhost:6333/collections | jq -r '.result.collections[].name'

然后删掉空集合再恢复

curl -X DELETE localhost:6333/collections/docs

上传快照并指定覆盖优先级

curl -X POST 'localhost:6333/collections/docs/snapshots/upload?priority=snapshot' -F snapshot=@docs.snapshot

剩下的就是核对恢复后的点数

curl -s localhost:6333/collections/docs | jq '.result.points_count'

这台环境是别人交接的,不少默认值被动过,只能一项项核。

怎么算真的好了,看的是同一批现象。恢复后 points_count 与源集群一致,抽三条 id 能查到原始 payload。

提醒一点。快照恢复对同名集合是失败语义,先删后恢复比调参数省事。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189