-
Notifications
You must be signed in to change notification settings - Fork 90
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
Lots of tests failing on Windows #174
Comments
@eboasson FYI. I will try to narrow down what commit in |
Thanks @ivanpauno! |
This is unfortunately not new but was introduced last week between Wednesday and Friday in two stages. |
After reverting #162 and #145 it started working again, so #145 seems to have introduced the error. Probably, as those jobs were using a |
@eboasson I'm trying to fix the issue, but if you have any clues help is welcomed. |
@ivanpauno @dirk-thomas: a few hours later ... I guess second best would be starting and stopping Cyclone on node creation/destruction instead of on context creation/destruction: that's when it used to do it before #145, so in practice that should work well enough. Apart from having to rework some of the RMW implementation, there's no downside to that change. |
lovely ...
That doesn't sound like something we would want to do.
The approach taken in
Doing the same thing should avoid the problem. |
@eboasson I was able to reproduce the problem (hanging on |
I'm sorry I'm coming to the party late. |
There's a fix proposed in #176. |
That can't be done in |
It can be done if you implement it in a header:
This will make it obvious (as I think you've discovered) that the current design has a chicken-and-egg problem with Contexts versus Nodes. That is, I think the design should be revised to either allow publishers/subscribers to live outside a node, or to create a node whose sole purpose is discovery. |
No, it doesn't work like that. Please read the implementation.
That's true. I considered to do that, but I finally didn't. |
I did. It has to use functions like It seems a pretty core structural feature of the RMW API that subscribers, publishers, and guard conditions exist within the context (and lifetime) of a node. Allowing them to outlive nodes is asking for trouble. I think this is really unsound and |
Also it occurs to me that maybe some of the thread weirdness has to do with parts of the RMW layer outliving the c++ runtime. |
Sorry, my comment was unnecessary.
That's a good point and it was discussed before starting the implementation.
I don't see where is the issue.
As commented above, DDS allows to create all those entities from a
I'm not sure what you're referring to. |
It's all good. I get carried away sometimes too, especially when I feel like my hard work is being dismissed. I came in with criticism, and I don't mean to trivialize your valuable contributions!
There was also no requirement beforehand that each node needs to perform its own discovery. A node is just a logical grouping in ROS and need not have an equivalent in the DDS layer.
This is an issue because previously you could associate all the bookkeeping with a publisher/subscriber/guard condition to a node. Now there has to be special handling for these entities with no associated node. It also means that by implementing the RMW interface, you no longer get ROS2 compatibility "for free". It's harder to understand what middleware must do in order to be considered "correct" and how to test the public interface. Some of this can be recovered pretty easily - I think much of RMW layer abstraction can be regained by adding an implicit node created when the context is created and destroyed when it is deleted. Is there some reason that wasn't what was done?
This is wild speculation. I thought maybe it could explain @eboasson's observation that "Windows 'helpfully' kills all spawned threads before running the global destructors" if the threading is part of the C++ runtime but the destructor is called from C after the C++ runtime is torn down and so threading is unavailable. |
Yeap, but there are a lot of graph related functions that allows to list all the publishers of a node, etc. P.S.: I think there should be an API to disable/enable this extra graph information, as it's mainly used for debugging.
The requirements of the rmw interface haven't changed, if an implementation reuses some of the abstractions in an "unclean" way, that's up to the implementation itself.
I don't see a big advantage of that, but it doesn't sound bad either.
It's not wild speculation. Using a topic is not the only available mechanism to provide this information. That's probably the cleanest solution, but I didn't implement it because of lack of support of some of the DDS vendors. |
See for example:
https://ci.ros2.org/view/nightly/job/nightly_win_rel/1535/#showFailuresLink
The text was updated successfully, but these errors were encountered: