1

CI/CD パイプラインが失敗するバグの修正に取り組んでいます。統合テスト中に、ローカル データベース インスタンスを起動します。これを行うために、いくつかの mariadb ラッパーを使用して Java コードベースから起動しています。

このプロセスは (潜在的に) 完了するまでに長い時間がかかる可能性があり、テストがタイムアウトする原因となります。この場合、20 秒以内にインストールできず、再試行する必要がある場合にプロセスを強制終了する機能を追加しました。

この部分は機能しているようです。

プロセスを破壊しようとすると、奇妙なビットが発生します。ブロックが解除されるまでランダムに 2 ~ 3 分かかるようです。これは、上記の問題と同じ理由で問題があります。

基盤となるライブラリを調査したところ、ExecuteWatchdog を使用してプロセスを管理しているようです。ブロックしているコードは次のとおりです。

watchDog.destroyProcess();
// this part usually returns nearly instantly

try {
  // this part can take minutes...
  resultHandler.waitFor();
} catch (InterruptedException e) {
  throw handleInterruptedException(e);
}

これに加えて、Mac/Linux では異なる動作があります。のようなresultHandler.waitFor(1000) // Wait with 1000ms timeout before just exitingことをすると、Macbook では問題なく動作しますが、Linux では次のようなエラーが表示されます。java.io.FileNotFoundException: {{executable}} (Text file busy)

これに関するアイデアはありますか?

watchDog.destroyProcess私はいくつかの調査を行いましたが、SIGKILL の代わりに SIGTERM を送信しているようです。Processしかし、代わりに KILL を送信するためにオブジェクトを取得するためのフックはありません。

ありがとう。

4

1 に答える 1