- CIで時々opensearchへのアクセスに失敗してテストが失敗していた
- (ちゃんと調べたわけではないけど)opensearchの起動が終わるより前にアクセスしにいって失敗している風
Faraday::ConnectionFailed: end of file reached
- opensearchコンテナ、毎回Dockerfileからビルドをしているので時間がかかっていた
- そこで
docker compose -f docker-compose.ci.yml up -d --build
のようにして、ビルドしてからupするようにした
- が、これでもまだ失敗する
- 次の手として vishnubob/wait-for-it: Pure bash script to test and wait on the availability of a TCP host and port を利用して、9200番ポートが空くまで待つようにした
- が、これでもまだ失敗する
- opensearchのログを見ると、9200番ポートを開けてからまだ少し何かをしているので、そのタイミングでアクセスしてしまっている模様
- 結局↓のようなメソッドを定義して、テスト起動時のopensearchへのアクセスでエラーが起きたら時間を空けてリトライするようにしたところ解決した
def retry_on_error(times: 3)
try = 0
begin
try += 1
yield
rescue Faraday::ConnectionFailed
sleep 5
retry if try < times
raise
end
end