-
Notifications
You must be signed in to change notification settings - Fork 436
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
Add get_non_local_subscription_count
to PublisherBase
#2338
base: rolling
Are you sure you want to change the base?
Add get_non_local_subscription_count
to PublisherBase
#2338
Conversation
Signed-off-by: JLBuenoLopez-eProsima <[email protected]>
Signed-off-by: JLBuenoLopez-eProsima <[email protected]>
get_non_local_subscription_count
to PublisherBase
Can we add a couple of unit-tests? |
@@ -133,6 +133,12 @@ class PublisherBase : public std::enable_shared_from_this<PublisherBase> | |||
size_t | |||
get_subscription_count() const; | |||
|
|||
/// Get non local subscription count |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this means that Not in the same context
for the ROS 2 user (precisely for DDS-RTPS, GUID prefix is not the same), that would be nicer to add the description explains?
if (RCL_RET_OK != status) { | ||
rclcpp::exceptions::throw_from_rcl_error( | ||
status, | ||
"failed to get get non local subscription count"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"failed to get get non local subscription count"); | |
"failed to get non local subscription count"); |
@MiguelCompany Friendly ping. Would you be willing to address @fujitatomoya's feedback? |
I've been testing the new feature enabled by:
This not only fixes the "double delivery" issue (local subscription receiving intra & inter process message), but also reduces CPU at startup and destruction of subscriptions. When creating a subscription, there is a short time gap in which the intra-process subscription has not yet been created, so messages come through inter-process (serialization/deserialization/etc) causing high CPU utillization. This is particularly noticeable for |
Correction about my statement above:
This PR doesn't fix the double delivery issue. It does avoid getting inter-process messages at creation/destruction of subscriptions. Is there anything missing to avoid the double delivery issue @MiguelCompany ? Or is that a separate effort?
|
Adds a method in
PublisherBase
that returns the number of matched subscriptions that are not in the same context as the publisher.It also makes inter-process publishing depend on this new method.
Depends on ros2/rcl#1111
Part of #2202
full repos file here