CIでopensearchコンテナの起動を待つ

  • 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