【发布时间】:2018-05-04 06:47:26
【问题描述】:
我们在 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 响应,但是当 Tire 在创建索引之前执行 HEAD 请求以查看索引是否存在时,它仍然返回 200 而不是 404。这随机发生,大多数情况下它可以正常工作,但在测试套件中的某些时候它会失败。
我尝试在删除和创建操作之间等待黄色状态,但没有成功。所以我的问题是,删除索引操作是否以某种方式异步? (在 ES 文档上找不到任何关于此的内容)。有什么方法可以等待索引被删除? (因为黄色状态不起作用)。
编辑:感谢@PinnyM 的澄清。所以所有的操作都通过HTTP API are indeed asynchronous。那么剩下的问题是,我怎样才能等待索引被删除才能重新创建呢?
【问题讨论】:
-
所有对 ES 的 HTTP 操作都是异步的,见elasticsearch.org/guide/en/elasticsearch/reference/current/…
-
@PinnyM 谢谢!编辑了问题
标签: ruby-on-rails ruby elasticsearch tire