Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add autoware_node_death_monitor package for monitoring node crashes #1786

Draft
wants to merge 1 commit into
base: tier4/main
Choose a base branch
from

Conversation

kyoichi-sugahara
Copy link

@kyoichi-sugahara kyoichi-sugahara commented Feb 7, 2025

Description

Draft PR mainly for reviewing changes

以下READMEに追記しますが、一旦ここにメモらせてください。

  • MRM を publish していないですが、l4_toolkit に実装する際には MRM の publish を追加する予定なのでそこはスルーしていただけると 🙇
  • この node が動いていることを保証するのはこの node から heartbeat topic を publish して、 topic_state_monitor から監視する想定です。

Related links

Parent Issue:

  • Link

How was this PR tested?

psim で以下の動作確認を実施済み

  • rtc_interface を kill すると MRM で停止できないが、このノードで検知できることを確認
  • rviz を kill しても ignore できることを確認

Notes for reviewers

None.

Interface changes

None.

Effects on system behavior

None.

Copy link

@TakaHoribe TakaHoribe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

実装の細かい部分は他の方に任せますが、ハイレベルな設計で気になったポイントを書きます。

・launch.logって必ず書き込まれるんだっけ?その保証をしておきたい。
・これってノードが死んだらDiagでエラーだす実装を追加する、で良いですよね?
・ファイルが見つからなかったときに、初回でエラーが出るだけなので「node_death_monitorが立ち上がっているからOKだと思っていたらファイル見れてなかった、実はノード死んでた」ケースがありそう。起動して10秒経ってもファイル見つからない場合は、それ自体でDiagエラー出した方が良い。

それ以外、全般的な方針は問題/違和感ありません。

cmake_minimum_required(VERSION 3.14)
project(autoware_node_death_monitor)

find_package(autoware_cmake REQUIRED)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how about node_alive_monitor or process_alive_monitor?

@@ -0,0 +1,73 @@
# autoware_node_death_monitor

This package provides a monitoring node that detects ROS 2 node crashes by analyzing `launch.log` files, rather than subscribing to `/rosout` logs.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

launch.logにメッセージが出力されることって保証されてましたっけ?もしyesならREADMEに「ROS2の仕組みとして必ずlounch.logに出力される」とか、もしくは「ooオプションがONになっていることを確認すること」とかを記載したい。

std::streampos last_valid_pos = static_cast<std::streampos>(last_file_pos_);

size_t iteration = 0;
while (true) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

while(true)はNG, while(rclcpp::ok)みたいなの無かったっけ。

@kyoichi-sugahara
Copy link
Author

@TakaHoribe

launch.logって必ず書き込まれるんだっけ?その保証をしておきたい。

書き込まれることは保証されている認識ですが、どこに書き込まれるかは環境設定に依存しているので運用側とのコミュニケーションが必要と思っている点です。
平松さんが letterbox で同じことをやっているので、上記の疑問点はクリアにしておきます。

これってノードが死んだらDiagでエラーだす実装を追加する、で良いですよね?

です。

ファイルが見つからなかったときに、初回でエラーが出るだけなので「node_death_monitorが立ち上がっているからOKだと思っていたらファイル見れてなかった、実はノード死んでた」ケースがありそう。起動して10秒経ってもファイル見つからない場合は、それ自体でDiagエラー出した方が良い。

これは heartbeat topic を出して topic_state_monitor から確認する予定です。(異常系開発の議事録側には書いてたのですが、こちらに書いてないことで誤解招いてしまっているので、READMEに追記します 🙇

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants