You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The problem described in ros2/rmw#210 means that RMW implementations leak implementation-internal values for Infinity duration for QoS policies. These values are not consistent across implementations, and are written verbatim into the QoS policy bag metadata. When used to construct a publisher for playback, the values from one implementation are not valid inputs for another, meaning the bag cannot be successfully played on the other implementation.
A workaround is currently possible by manually changing all the QoS duration values in metadata.yaml to 0. However, we want to solve this problem so that no manual intervention is required.
Even once ros2/rmw#210 is solved (solution in review now), the damage will have already been done because bags have been recorded with the bad values - we need a fix in rosbag2 to handle this.
Solution proposal
Discover the "Infinity" values for each of the default RMW implementations and encode these into constants in the QoS metadata parser (for the current metadata version only, we can make sure that in the next metadata version no bad values ever occur). When one of these values is encountered, translate it to RMW_DURATION_INFINITE (assuming ros2/rmw#301 is merged).
Original Ticket
Description
When trying to play my bags which I recorded with the foxy version of rosbag and I am currently using the master branch of rosbag and other packages I get following error:
When I record new bags with the master version of rosbag the error doesn't happen and the bag plays normally.
Expected Behavior
I would kinda expect foxy bags to be still playable. I'm not sure if I messed something up or if this is a normal and intended breaking change between foxy and master.
Actual Behavior
See above error message
To Reproduce
Record a bag with the foxy version of rosbag
Update rosbag to master
Play the bag
Get error
System (please complete the following information)
OS: Ubuntu 20.04
ROS 2 Distro: master
Version: master
Additional context
I checked the data in the sqlite3 database and I'm confused why the error happens. The format of most things looks the same, except in the offered_qos_profiles there is a change of history and depth which was 3 and 0 in foxy but is 1 and 100 in master. I tried setting the history and depth to 1 and 100 manually but this did not help. I noticed also the deadline and lifespan to be different. But I didn't try to change those manually. I have two questions: 1. Is this a planned breaking change? and 2. Is there a way to convert older(foxy) rosbags to the new master format?
The text was updated successfully, but these errors were encountered:
This problem is revealed because of the switch from Fast-RTPS to CycloneDDS as the default RMW implementation in Rolling. This PR ros2/rmw#210 is trying to address the inconsistency that leads to this problem, but we will need a fix to rosbag2 to handle the bad values from current/old recordings, even after that problem is fixed.
Workarounds for now:
If you set the environment variable RMW_IMPLEMENTATION=rmw_fastrtps_cpp the bag should play successfully.
Or, edit the metadata.yaml file in your bag - this will let you play the bag back with any RMW implementation:
replace sec: 2147483647 with sec: 0
replace sec: 4294967295 with nsec: 0
emersonknapp
changed the title
Breaking change between foxy and master?
QoS profiles recorded from Fast-DDS are unplayable in Cyclone (and vice-versa)
Feb 26, 2021
Bug Report
The problem described in ros2/rmw#210 means that RMW implementations leak implementation-internal values for Infinity duration for QoS policies. These values are not consistent across implementations, and are written verbatim into the QoS policy bag metadata. When used to construct a publisher for playback, the values from one implementation are not valid inputs for another, meaning the bag cannot be successfully played on the other implementation.
A workaround is currently possible by manually changing all the QoS duration values in
metadata.yaml
to 0. However, we want to solve this problem so that no manual intervention is required.Even once ros2/rmw#210 is solved (solution in review now), the damage will have already been done because bags have been recorded with the bad values - we need a fix in rosbag2 to handle this.
Solution proposal
Discover the "Infinity" values for each of the default RMW implementations and encode these into constants in the QoS metadata parser (for the current metadata version only, we can make sure that in the next metadata version no bad values ever occur). When one of these values is encountered, translate it to
RMW_DURATION_INFINITE
(assuming ros2/rmw#301 is merged).Original Ticket
Description
When trying to play my bags which I recorded with the foxy version of rosbag and I am currently using the master branch of rosbag and other packages I get following error:
When I record new bags with the master version of rosbag the error doesn't happen and the bag plays normally.
Expected Behavior
I would kinda expect foxy bags to be still playable. I'm not sure if I messed something up or if this is a normal and intended breaking change between foxy and master.
Actual Behavior
See above error message
To Reproduce
System (please complete the following information)
Additional context
I checked the data in the sqlite3 database and I'm confused why the error happens. The format of most things looks the same, except in the offered_qos_profiles there is a change of history and depth which was 3 and 0 in foxy but is 1 and 100 in master. I tried setting the history and depth to 1 and 100 manually but this did not help. I noticed also the deadline and lifespan to be different. But I didn't try to change those manually. I have two questions: 1. Is this a planned breaking change? and 2. Is there a way to convert older(foxy) rosbags to the new master format?
The text was updated successfully, but these errors were encountered: