-
Notifications
You must be signed in to change notification settings - Fork 67
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
QoS duration APIs need INFINITE constant and an API contract to enforce proper usage by implementations #210
Comments
Given that RMW is supposed to be agnostic to DDS, it is a good idea to have RMW's own consistent definition of infinite duration. I think an infinite duration should be defined as a The RMW implementation layer does seem like the perfect place to convert between the DDS vendor specific values of infinity and the RMW value of infinity. Whether or not the DDS vendors are consistent between each other or with the OMG DDS spec shouldn't be too big of a concern when we have this RMW compatibility layer.
I am uncomfortable with this contract. I think there are parts of the DDS spec that make the distinction between zero and non-zero duration, in which case zero and infinite duration would mean different things. In the future, non-DDS middleware layers could have specs that make a similar distinction. |
so am I. and I believe we should not have redundant definition as infinity. This could be complicated. |
Yes, based on these conversations I am thinking to revise the proposal to something like the following: """ A Publisher offering a {0, 0} rmw_time_t for a Duration-based QoS policy is interpreted as "not specified" and must be reported as RMW_TIME_INFINITY in endpoint queries. A Subscription requesting a {0, 0} rmw_time_t for a Duration-based QoS policy is interpreted as "not specified" and must reported as RMW_TIME_INFINITY in endpoint queries. |
@emersonknapp are you considering to submit a design document or a draft PR that implements this proposal? |
I'd like to submit a design, but I'm focused on getting Foxy out right now - this has to wait for G-turtle anyways, I think. |
Do you finish your design ? |
I haven't started - Foxy isn'r released yet :) Don't wait on me though, if you would like to write the design, by all means go ahead. I can't make any promises for my personal timeline on this. |
Got it :) |
@emersonknapp have you had the time to put together a proposal? |
Thanks for the check-in/push, really just needed to put something on paper to start this out. Fell off our radar internally but it's still really important, I think. See #255 for an interface/design proposal in code form. |
Thanks for pushing! While we are at it, I think #215 should be taken care of too. |
You think I should bake that change into #255 ? I guess that makes sense as a single change "Refining the RMW time API" |
Perhaps. I just think this is a good opportunity to tackle that (apparent) redundancy, nevermind how. |
Copying from #255 to keep information central to the feature ticket: I am actively working on this right now (for any interested parties). I've gathered more information to illustrate how the RMW API is currently incomplete. The following values are gathered from
"DDS IDL PSM Constant" above refers to the values laid out in Section 2.3.3 of the DDS 1.4 spec. From my understanding this PSM is meant to provide common interfaces for programming languages. There are separate docs available as well:
Based on the above information, the two implementations are providing values that are neither consistent with each other or guidelines from the specification - seems like we just have exposed implementation details. My next step is an updated API proposal, which will come with coupled prototype PRs for the RMW implementations. Interesting note: the IDL PSM specifies Durations as:
But we use exclusively unsigned values within the RMW API. |
Feature request
Feature description
Right now, when requesting endpoint info from rmw implementations, e.g.
rmw_get_publishers_info_by_topic
, we receive inconsistent results for publishers created with the same QoS settings. This makes it hard to create subscriptions adaptively when using queried QoS profiles. It also means that the reporting is noisy/lossy, we do not know what settings were really given to the endpoints.rmw_get_publishers_info_by_topic
andrmw_get_subscriptions_info_by_topic
that these infinity values will be reported by RMW implementationsThe DDS Spec's OMG IDL PSM (Platform Specific Model) defines the following (page 139)
We should do something similar. However, since we use a
uint64_t
for both fields ofrmw_time_t
, I'd suggest the infinity value being "uint64_max" for both seconds and nanoseconds.Work Log
The text was updated successfully, but these errors were encountered: