This is similar to tracking messages from publisher to subscription (publication to callback). We want to be able to track a request from the publication/send on the client side to the take & callback on the service side, and similarly for responses.
Some tracepoints already exist:
rcl_service_init
rclcpp_service_callback_added
rcl_client_init
And the following tracepoints are also used for services with AnyServiceCallback:
rclcpp_callback_register
callback_start/callback_end
The following tracepoints are missing:
Request send
Request take
Response send
Response take
To track a request/response from end to end, we would ideally use a combination of the client GID + sequence number. With pubs/subs, the publisher GID read from the publisher's side does not match the publisher GID on the subscription's side. However, this may work with clients/services, because the client GID value is sent as-is alongside the request/response; we do not have to rely on the underlying DDS implementation, which could be faulty (https://github.com/ros2/rmw_cyclonedds/issues/377).
Add tests in test_tracetools, and update the design document.
This is similar to tracking messages from publisher to subscription (publication to callback). We want to be able to track a request from the publication/send on the client side to the take & callback on the service side, and similarly for responses.
Some tracepoints already exist:
rcl_service_init
rclcpp_service_callback_added
rcl_client_init
And the following tracepoints are also used for services with
AnyServiceCallback
:rclcpp_callback_register
callback_start
/callback_end
The following tracepoints are missing:
To track a request/response from end to end, we would ideally use a combination of the client GID + sequence number. With pubs/subs, the publisher GID read from the publisher's side does not match the publisher GID on the subscription's side. However, this may work with clients/services, because the client GID value is sent as-is alongside the request/response; we do not have to rely on the underlying DDS implementation, which could be faulty (https://github.com/ros2/rmw_cyclonedds/issues/377).
Add tests in
test_tracetools
, and update the design document.