设置ignore_unavailable=false时,关闭的Elasticsearch索引快照成功异常咨询
问题描述
根据Elasticsearch 8.2的Create snapshot API文档说明:
ignore_unavailable(可选,布尔值)如果为false,当indices中存在缺失或已关闭的数据流或索引时,快照创建会失败。
但实际操作中,已关闭索引index_1000_6_1后,设置"ignore_unavailable":"false"创建快照却成功返回accepted: true,与文档描述不符。
操作步骤:
- 关闭索引:
POST https://someuri:9200/index_1000_6_1/_close
响应:
{ "acknowledged": true, "shards_acknowledged": true, "indices": { "index_1000_6_1": { "closed": true } } }
- 创建快照:
PUT https://someuri:9200/_snapshot/my_backup/snap_test
请求体:
{ "indices":"index_1000_6_1", "wait_for_completion":"true", "ignore_unavailable":"false" }
响应:
{ "accepted": true }
原因分析
你忽略了include_closed_indices参数的默认行为:
- Elasticsearch 8.2中,
include_closed_indices是创建快照时的可选参数,默认值为true。 - 当该参数为true时,关闭的索引会被视为「可快照的有效索引」,并不会触发
ignore_unavailable=false的失败条件——只有当索引不存在,或者在include_closed_indices=false的前提下索引被关闭时,才会被判定为「不可用」,进而导致快照创建失败。
验证方法
如果想要触发文档中描述的失败场景,需要在创建快照时显式设置include_closed_indices=false:
PUT https://someuri:9200/_snapshot/my_backup/snap_test
请求体:
{ "indices":"index_1000_6_1", "wait_for_completion":"true", "ignore_unavailable": false, "include_closed_indices": false }
此时请求会失败,符合文档描述的预期。
另外还有一个细节:你请求体中ignore_unavailable的值是字符串"false",而非标准JSON布尔值false。虽然Elasticsearch通常会自动转换字符串类型的布尔值,但建议使用标准格式,避免潜在的解析问题。
内容的提问来源于stack exchange,提问作者Amir M
相关产品推荐
相关产品推荐

