-
Notifications
You must be signed in to change notification settings - Fork 92
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
Update service/client construction/destruction API return codes. #247
Conversation
Signed-off-by: Michel Hidalgo <michel@ekumenlabs.com>
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.
LGTM
// before proceeding to outright ignore given QoS policies, sanity check them | ||
dds_qos_t * qos; | ||
if ((qos = dds_create_qos()) == nullptr) { | ||
if ((qos = create_readwrite_qos(qos_policies, false)) == nullptr) { | ||
goto fail_qos; | ||
} | ||
dds_reset_qos(qos); |
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.
can you explain this?
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 also don't understand this, but then I also don't understand what the QoS policies are doing here in the first place:
- best-effort, keep-last or a lifespan are fundamentally broken because the request or the response may then be dropped silently;
- service invocations are (by definition) aperiodic data, so deadline doesn't apply, and, it would seem, neither does liveliness;
- transient-local would be an interesting choice for dealing with the discovery latencies (and can safely be done with cyclone by leaving the "durability service history" at "keep-last 1", but the discovery latencies have been dealt with in another way already, and so doesn't make sense either.
Allowing avoid_ros_namespace_conventions
might be useful, but I think one should really only use that for interfacing with existing non-ROS 2 systems. It seems unlikely that those systems would happen to implement the service invocation protocol.
Arguably that leaves only ignore_local_publications
, which could be interpreted as a request to ignore services in the same node, or participant, or, indeed, process. But I'm not sure what the interpretation of it is supposed to be and it doesn't seem to be supported by all RMW implementations anyway. So I doubt it would be wise to interpret it.
And so I'd argue none of the QoS policies are meaningful, and if you want to check the validity, you should check whether they match the above, or are set to "system default" ...
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 also don't understand this, but then I also don't understand what the QoS policies are doing here in the first place:
Yes, we should probably have separated service/topic qos profile definitions.
Service QoS are mostly unusable right now.
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.
Indeed I've never seen service QoS policies being used in any meaningful way out there.
However, I won't argue here with the decisions made by each implementation. This change is simply ensuring rmw_cyclonedds_cpp
does not accept invalid QoS profiles, as the API mandates.
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 imagine that this create_readwrite_qos
/dds_reset_qos
combo is the same than calling dds_create_qos
.
If that's the case, lgtm.
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.
It is the same.
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.
Oh, yes, it is !
@eboasson @ivanpauno anything else? |
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.
LGTM
Checking the validity of a qos profile that is being ignored feels weird to me.
Except that, having consistent error handling across the different rmw implementations is a great improvement.
Yeah, it is odd. I don't want to start a discussion here and now, but this is the only Tier 1 implementation that chose to ignore QoS settings when the API suggests (and now explicitly says) otherwise. Perhaps we owe ourselves a discussion about this, but right now we need a (seemingly) consistent API. |
Thanks for the review @ivanpauno ! |
Signed-off-by: Michel Hidalgo <michel@ekumenlabs.com>
Signed-off-by: Michel Hidalgo <michel@ekumenlabs.com>
Connected to ros2/rmw#276. Precisely what the title says.