报错是这么冒出来的。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。
提醒一点。快照恢复对同名集合是失败语义,先删后恢复比调参数省事。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
