Skip to content

fix(action): keep servers responsive and always reply on cancel/get_result - #355

Open
richardw347 wants to merge 1 commit into
ZettaScaleLabs:mainfrom
richardw347:fix/action-server-liveness
Open

richardw347 wants to merge 1 commit into
ZettaScaleLabs:mainfrom
richardw347:fix/action-server-liveness

Conversation

@richardw347

@richardw347 richardw347 commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Spawn get_result / cancel_goal off the driver select! loop. ROS clients hold get_result open for the life of a goal, which previously starved further send_goal and cancel.
  • Always reply on unknown/dropped/expired get_result, GoalHandle drop, and cancel-all / unknown cancel (zero UUID and ERROR_NONE on success).
  • Accepted goals are cancelable; status transitions to CANCELING; FFI cancel uses CDR CancelGoal instead of a raw UUID and empty reply.

ZAction::Result: Default is now required so abort/unknown/expire paths can reply.

Test plan

  • cargo check -p hiroz --tests --features ffi
  • Existing action tests updated (return_code == 0 on successful cancel; TestResult: Default)
  • ros2 action send_goal -f then cancel while the goal is running (must not hang later send_goals)
  • get_result for an unknown UUID returns instead of hanging
  • Dropping an executing handle without succeed/abort/canceled replies Aborted

Independent of the CancelGoal type-hash PR; both are needed for ROS cancel interop.

…esult

ROS clients hold get_result open for the life of a goal, which starved the
driver loop, and several cancel/unknown paths dropped queries with no reply.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant