我们在 Rails 应用程序上使用 ElasticSearch 和 Tire gem。对于我们的集成测试,我们在每个示例之前删除并重新创建索引,类似于
Foo.index.delete
Foo.create_elasticsearch_index
其中Foo
包括Tire::Model::Persistence
. 但是当我们在 CI 上运行我们的测试套件时,我们开始时不时地出现缺少索引的错误。我继续并启用了调试,然后我在日志中发现了以下内容:
# 2013-10-04 09:25:05:839 [DELETE] ("test_index")
#
curl -X DELETE http://some-server:9200/test_index
# 2013-10-04 09:25:05:840 [200]
#
# {
# "ok": true,
# "acknowledged": true
# }
# 2013-10-04 09:25:05:852 [HEAD] ("test_index")
#
curl -I "http://some-server:9200/test_index"
# 2013-10-04 09:25:05:852 [200]
如您所见,我得到了 DELETE 请求的 200 ok 响应,但是当 Tyre 在创建索引之前执行 HEAD 请求以查看索引是否存在时,它仍然返回 200 而不是 404。这是随机发生的,大多数情况下它工作正常的时间,但在测试套件中的某个时候它会失败。
我尝试在删除和创建操作之间等待黄色状态,但它不起作用。所以我的问题是,删除索引操作是否以某种方式异步?(在 ES 文档上找不到任何关于此的内容)。有什么方法可以等待索引被删除?(因为黄色状态不起作用)。
编辑:感谢@PinnyM 的澄清。所以通过 HTTP API的所有操作确实是异步的。所以剩下的问题是,我怎样才能等待索引被删除,以便我可以再次创建它?