-
Notifications
You must be signed in to change notification settings - Fork 255
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
Fixes bag not closing properly (#1586) #1590
Conversation
Signed-off-by: Yannick Schulz <yschulz854@gmail.com>
…clears the map of existing topics to allow another bag to start from scratch Signed-off-by: Yannick Schulz <yschulz854@gmail.com>
Converted this pr to a draft because it breaks |
…out of scop. This prevents behavior of overwriting meta data file when method close is called before the writer runs out of scope Signed-off-by: Yannick Schulz <yschulz854@gmail.com>
Signed-off-by: Yannick Schulz <yschulz854@gmail.com>
Well, forget my last comment, haha. I got misguided by [this comment].(https://github.com/ros2/rosbag2/blob/humble/rosbag2_cpp/include/rosbag2_cpp/writers/sequential_writer.hpp#L143) Anyhow, the problem was that the recorder (the only place that explicitly calls the close method in the project) overwrote the meta data file with the cleared info when the object ran out of scope. It now checks if the storage object is still alive before calling it again in the destructor. |
@yschulz Could you please write a clean and concise RCA (Root Cause Analysis)? |
Hi all, Bug (#1586):ProblemWhen using the Expected behavior: Actual behavior: SSCCE:
FixThe problem was two-fold and revealed another bug later:
I hope this makes things more clear, if you need anything else, please let me know. |
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.
overall i think this is right thing to do. thank you for the explanation and effort.
i think that we should apply the same fixes to SequentialCompressionWriter
including tests?
@@ -161,8 +164,9 @@ void SequentialWriter::close() | |||
metadata_io_->write_metadata(base_folder_, metadata_); | |||
} | |||
|
|||
storage_.reset(); // Necessary to ensure that the storage is destroyed before the factory | |||
storage_factory_.reset(); |
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 is right thing to do. storage_factory_
lifetime should be aligned with Writer
until it is destructed.
storage_factory_.reset(); | ||
// destroy current storage object and clear active track map for topic metadata | ||
storage_.reset(); | ||
topics_names_to_info_.clear(); |
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.
how about topic_names_to_message_definitions_
i think this should be cleared at the same time here?
IMO, we need to clear the all member variables that are not reset in the open method for the fresh start.
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.
@yschulz Thanks for trying to fix this issue and explanation about how to reproduce it.
The first thing first. We need to make a fix on the Rolling first then backport it if possible to the Humble.
I agree with @fujitatomoya that we need to think more thoroughly about what else can go wrong if closing and opening the writer again without destruction and address the possible issues as well.
In rosbag2 itself we don't have this scenario when opening the writer more than once without destruction.
// another simple serialized message | ||
std::shared_ptr<rclcpp::SerializedMessage> serialized_msg3 = | ||
std::make_shared<rclcpp::SerializedMessage>(); | ||
serialization.serialize_message(&test_msg, serialized_msg3.get()); |
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.
Don't bother creating a new serialized message, I would recommend using the same serialized_msg2
already created upper.
@yschulz It seems that early mentioned issue rosbag2_cpp::Writer can not close correctly, rasing "Segmentation fault(core dumped)" Error #1586 has different scenario for reproduction. In this PR you described that segfault happened when open-close writer twice or at least open it one more time. However, in the |
…definition in sequential writer test for multiple open operations. Also clears topic_names_to_message_definitions_ and handles message_definitions_s underlying container similarly. Lastly, also avoids reset of factory in the compression writer, adds unit test there too. Signed-off-by: Yannick Schulz <yschulz854@gmail.com>
…nition in sequential writer test for multiple open operations. Also clears topic_names_to_message_definitions_ and handles message_definitions_s underlying container similarly. Lastly, also avoids reset of factory in the compression writer, adds unit test there too. Signed-off-by: Yannick Schulz <yschulz854@gmail.com> Signed-off-by: Michael Orlov <michael.orlov@apex.ai>
…definition in sequential writer test for multiple open operations. Also clears topic_names_to_message_definitions_ and handles message_definitions_s underlying container similarly. Lastly, also avoids reset of factory in the compression writer, adds unit test there too. Signed-off-by: Yannick Schulz <yschulz854@gmail.com>
* re-applies fixes from #1590 to rolling. Also removes new message definition in sequential writer test for multiple open operations. Also clears topic_names_to_message_definitions_ and handles message_definitions_s underlying container similarly. Lastly, also avoids reset of factory in the compression writer, adds unit test there too. Signed-off-by: Yannick Schulz <yschulz854@gmail.com> * removes unused compressor_ member from compresser writer class. Also delegates rest of the closing behavior to the base class in close method, as it is handled in the open and write methods of the compression writer Signed-off-by: Yannick Schulz <yschulz854@gmail.com> * Remove unrelated delta - message_definitions_ was intentionally allocated on the stack and should persist between writer close() and open() because it represents cache for message definitions which is not changes. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Don't call virtual methods from destructors Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Cleanup 'rosbag2_directory_next' after the test run Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Protect Writer::open(..) and Writer::close() with mutex on upper level - Rationale: To avoid race conditions if open(..) and close() could be ever be called from different threads. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Bugfix for WRITE_SPLIT callback not called for the last compressed file Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Bugfix for lost messages from cache when closing compression writer Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Use dedicated is_open_ flag instead of relying on storage_ Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Yannick Schulz <yschulz854@gmail.com> Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Michael Orlov <michael.orlov@apex.ai>
* re-applies fixes from #1590 to rolling. Also removes new message definition in sequential writer test for multiple open operations. Also clears topic_names_to_message_definitions_ and handles message_definitions_s underlying container similarly. Lastly, also avoids reset of factory in the compression writer, adds unit test there too. Signed-off-by: Yannick Schulz <yschulz854@gmail.com> * removes unused compressor_ member from compresser writer class. Also delegates rest of the closing behavior to the base class in close method, as it is handled in the open and write methods of the compression writer Signed-off-by: Yannick Schulz <yschulz854@gmail.com> * Remove unrelated delta - message_definitions_ was intentionally allocated on the stack and should persist between writer close() and open() because it represents cache for message definitions which is not changes. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Don't call virtual methods from destructors Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Cleanup 'rosbag2_directory_next' after the test run Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Protect Writer::open(..) and Writer::close() with mutex on upper level - Rationale: To avoid race conditions if open(..) and close() could be ever be called from different threads. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Bugfix for WRITE_SPLIT callback not called for the last compressed file Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Bugfix for lost messages from cache when closing compression writer Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Use dedicated is_open_ flag instead of relying on storage_ Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Yannick Schulz <yschulz854@gmail.com> Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Michael Orlov <michael.orlov@apex.ai> (cherry picked from commit 20cfc02)
…nition in sequential writer test for multiple open operations. Also clears topic_names_to_message_definitions_ and handles message_definitions_s underlying container similarly. Lastly, also avoids reset of factory in the compression writer, adds unit test there too. Signed-off-by: Yannick Schulz <yschulz854@gmail.com> Signed-off-by: Michael Orlov <michael.orlov@apex.ai>
…1639) * re-applies fixes from #1590 to rolling. Also removes new message definition in sequential writer test for multiple open operations. Also clears topic_names_to_message_definitions_ and handles message_definitions_s underlying container similarly. Lastly, also avoids reset of factory in the compression writer, adds unit test there too. Signed-off-by: Yannick Schulz <yschulz854@gmail.com> * removes unused compressor_ member from compresser writer class. Also delegates rest of the closing behavior to the base class in close method, as it is handled in the open and write methods of the compression writer Signed-off-by: Yannick Schulz <yschulz854@gmail.com> * Remove unrelated delta - message_definitions_ was intentionally allocated on the stack and should persist between writer close() and open() because it represents cache for message definitions which is not changes. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Don't call virtual methods from destructors Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Cleanup 'rosbag2_directory_next' after the test run Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Protect Writer::open(..) and Writer::close() with mutex on upper level - Rationale: To avoid race conditions if open(..) and close() could be ever be called from different threads. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Bugfix for WRITE_SPLIT callback not called for the last compressed file Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Bugfix for lost messages from cache when closing compression writer Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Use dedicated is_open_ flag instead of relying on storage_ Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Yannick Schulz <yschulz854@gmail.com> Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Michael Orlov <michael.orlov@apex.ai> (cherry picked from commit 20cfc02) Co-authored-by: yschulz <yschulz854@gmail.com>
…backport #1599) (#1635) * re-applies fixes from #1590 to rolling. Also removes new message definition in sequential writer test for multiple open operations. Also clears topic_names_to_message_definitions_ and handles message_definitions_s underlying container similarly. Lastly, also avoids reset of factory in the compression writer, adds unit test there too. Signed-off-by: Yannick Schulz <yschulz854@gmail.com> Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * removes unused compressor_ member from compresser writer class. Also delegates rest of the closing behavior to the base class in close method, as it is handled in the open and write methods of the compression writer Signed-off-by: Yannick Schulz <yschulz854@gmail.com> * Remove unrelated delta - message_definitions_ was intentionally allocated on the stack and should persist between writer close() and open() because it represents cache for message definitions which is not changes. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Don't call virtual methods from destructors Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Cleanup 'rosbag2_directory_next' after the test run Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Protect Writer::open(..) and Writer::close() with mutex on upper level - Rationale: To avoid race conditions if open(..) and close() could be ever be called from different threads. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Bugfix for WRITE_SPLIT callback not called for the last compressed file Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Bugfix for lost messages from cache when closing compression writer Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Address build failure by using rcpputils::fs instead of std::filesystem - Note: On Iron we haven't migrated to the std::filesystem and using rcpputils::fs Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Adopt failing 'open_succeeds_twice' test for Iron Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Return from writer's open() immediately if storage already open Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Yannick Schulz <yschulz854@gmail.com> Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Yannick Schulz <yschulz854@gmail.com>
…backport #1599) (#1635) * re-applies fixes from #1590 to rolling. Also removes new message definition in sequential writer test for multiple open operations. Also clears topic_names_to_message_definitions_ and handles message_definitions_s underlying container similarly. Lastly, also avoids reset of factory in the compression writer, adds unit test there too. Signed-off-by: Yannick Schulz <yschulz854@gmail.com> Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * removes unused compressor_ member from compresser writer class. Also delegates rest of the closing behavior to the base class in close method, as it is handled in the open and write methods of the compression writer Signed-off-by: Yannick Schulz <yschulz854@gmail.com> * Remove unrelated delta - message_definitions_ was intentionally allocated on the stack and should persist between writer close() and open() because it represents cache for message definitions which is not changes. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Don't call virtual methods from destructors Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Cleanup 'rosbag2_directory_next' after the test run Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Protect Writer::open(..) and Writer::close() with mutex on upper level - Rationale: To avoid race conditions if open(..) and close() could be ever be called from different threads. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Bugfix for WRITE_SPLIT callback not called for the last compressed file Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Bugfix for lost messages from cache when closing compression writer Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Address build failure by using rcpputils::fs instead of std::filesystem - Note: On Iron we haven't migrated to the std::filesystem and using rcpputils::fs Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Adopt failing 'open_succeeds_twice' test for Iron Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Return from writer's open() immediately if storage already open Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Yannick Schulz <yschulz854@gmail.com> Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Yannick Schulz <yschulz854@gmail.com> (cherry picked from commit a360d9b) # Conflicts: # rosbag2_compression/src/rosbag2_compression/sequential_compression_writer.cpp # rosbag2_cpp/src/rosbag2_cpp/writer.cpp # rosbag2_cpp/src/rosbag2_cpp/writers/sequential_writer.cpp
…backport #1599) (#1635) * re-applies fixes from #1590 to rolling. Also removes new message definition in sequential writer test for multiple open operations. Also clears topic_names_to_message_definitions_ and handles message_definitions_s underlying container similarly. Lastly, also avoids reset of factory in the compression writer, adds unit test there too. Signed-off-by: Yannick Schulz <yschulz854@gmail.com> Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * removes unused compressor_ member from compresser writer class. Also delegates rest of the closing behavior to the base class in close method, as it is handled in the open and write methods of the compression writer Signed-off-by: Yannick Schulz <yschulz854@gmail.com> * Remove unrelated delta - message_definitions_ was intentionally allocated on the stack and should persist between writer close() and open() because it represents cache for message definitions which is not changes. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Don't call virtual methods from destructors Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Cleanup 'rosbag2_directory_next' after the test run Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Protect Writer::open(..) and Writer::close() with mutex on upper level - Rationale: To avoid race conditions if open(..) and close() could be ever be called from different threads. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Bugfix for WRITE_SPLIT callback not called for the last compressed file Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Bugfix for lost messages from cache when closing compression writer Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Address build failure by using rcpputils::fs instead of std::filesystem - Note: On Iron we haven't migrated to the std::filesystem and using rcpputils::fs Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Adopt failing 'open_succeeds_twice' test for Iron Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Return from writer's open() immediately if storage already open Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Yannick Schulz <yschulz854@gmail.com> Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Yannick Schulz <yschulz854@gmail.com> (cherry picked from commit a360d9b) # Conflicts: # rosbag2_compression/src/rosbag2_compression/sequential_compression_writer.cpp # rosbag2_cpp/src/rosbag2_cpp/writer.cpp # rosbag2_cpp/src/rosbag2_cpp/writers/sequential_writer.cpp
… (backport #1599) (#1653) * [iron] Bugfix for writer not being able to open again after closing (backport #1599) (#1635) * re-applies fixes from #1590 to rolling. Also removes new message definition in sequential writer test for multiple open operations. Also clears topic_names_to_message_definitions_ and handles message_definitions_s underlying container similarly. Lastly, also avoids reset of factory in the compression writer, adds unit test there too. Signed-off-by: Yannick Schulz <yschulz854@gmail.com> Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * removes unused compressor_ member from compresser writer class. Also delegates rest of the closing behavior to the base class in close method, as it is handled in the open and write methods of the compression writer Signed-off-by: Yannick Schulz <yschulz854@gmail.com> * Remove unrelated delta - message_definitions_ was intentionally allocated on the stack and should persist between writer close() and open() because it represents cache for message definitions which is not changes. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Don't call virtual methods from destructors Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Cleanup 'rosbag2_directory_next' after the test run Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Protect Writer::open(..) and Writer::close() with mutex on upper level - Rationale: To avoid race conditions if open(..) and close() could be ever be called from different threads. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Bugfix for WRITE_SPLIT callback not called for the last compressed file Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Bugfix for lost messages from cache when closing compression writer Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Address build failure by using rcpputils::fs instead of std::filesystem - Note: On Iron we haven't migrated to the std::filesystem and using rcpputils::fs Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Adopt failing 'open_succeeds_twice' test for Iron Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Return from writer's open() immediately if storage already open Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Yannick Schulz <yschulz854@gmail.com> Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Yannick Schulz <yschulz854@gmail.com> (cherry picked from commit a360d9b) # Conflicts: # rosbag2_compression/src/rosbag2_compression/sequential_compression_writer.cpp # rosbag2_cpp/src/rosbag2_cpp/writer.cpp # rosbag2_cpp/src/rosbag2_cpp/writers/sequential_writer.cpp * Address merge conflicts Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Fix for segfault in open_twice test - Ensure that writer_ is destructed before intercepted fake_metadata_ Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Fix for "open_succeeds_twice" test failure on second run - Use std::filesystem for temp files and folders operation. For some reason rcpputils::fs::delete_all(folder_name) wasn't able to delete temp folder with subfolders. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Adopt changes in TestRosbag2CPPAPI::minimal_writer_example for humble - The `serialized_msg2` is not owning the serialized data after the first call writer.write(serialized_msg2,..). i.e. need to use another message or another API in test. This is not a bug - this is by design. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Michael Orlov <michael.orlov@apex.ai>
* Link and compile against rosbag2_storage_mcap: Fixed issue 1492 (#1496) (#1498) Signed-off-by: Alejandro Hernández Cordero <ahcorde@gmail.com> (cherry picked from commit 7fcb703) Co-authored-by: Alejandro Hernández Cordero <ahcorde@gmail.com> * [humble] Bugfix for incorrect playback rate changes when pressing buttons (backport #1513) (#1515) * Bugfix for incorrect playback rate changes when pressing buttons (#1513) - Playback rate expected to be changed by 10% with each increase/decrease step. - Use +0.1 and -0.1 in decrease/increase rate formula instead of multiply by factor of the 1.1 and 0.9 respectively. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> (cherry picked from commit 95f78b6) # Conflicts: # rosbag2_transport/src/rosbag2_transport/player.cpp * Address merge conflicts after auto-backporting Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Michael Orlov <michael.orlov@apex.ai> * call cv.wait_until only if necessary. (#1521) (#1523) * call cv.wait_until only if necessary. Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> * add comment to avoid extra delay for performance. Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> --------- Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> (cherry picked from commit a16704b) Co-authored-by: Tomoya Fujita <Tomoya.Fujita@sony.com> * [humble] Install signal handlers in recorder only inside record method (backport #1464) (#1526) * Install signal handlers in recorder only inside record method (#1464) Signed-off-by: Michael Orlov <michael.orlov@apex.ai> (cherry picked from commit 195e406) # Conflicts: # rosbag2_py/src/rosbag2_py/_transport.cpp * Address merge conflicts Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Michael Orlov <michael.orlov@apex.ai> * [humble] `Recording stopped` prints only once. (backport #1530) (#1535) * `Recording stopped` prints only once. (#1530) Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> (cherry picked from commit 73b0772) # Conflicts: # rosbag2_transport/src/rosbag2_transport/recorder.cpp * Address merge conflicts Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Co-authored-by: Michael Orlov <michael.orlov@apex.ai> * [humble] Give proper log message for `--start-paused` (backport #1537) (#1541) * Add proper message for --start-paused (#1537) Signed-off-by: Christoph Froehlich <christoph.froehlich@ait.ac.at> (cherry picked from commit 317286c) # Conflicts: # rosbag2_transport/src/rosbag2_transport/recorder.cpp * Address merge conflicts Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Christoph Fröhlich <christophfroehlich@users.noreply.github.com> Co-authored-by: Michael Orlov <michael.orlov@apex.ai> * 0.15.9 (#1551) * 0.15.9 Signed-off-by: Audrow Nash <audrow@intrinsic.ai> * Update rosbag2_transport/CHANGELOG.rst Co-authored-by: Michael Orlov <michael.orlov@apex.ai> Signed-off-by: Audrow Nash <audrow@intrinsic.ai> --------- Signed-off-by: Audrow Nash <audrow@intrinsic.ai> Co-authored-by: Michael Orlov <michael.orlov@apex.ai> * [humble] Add default initialization for CompressionOptions (backport #1539) (#1546) * Add default initialization for CompressionOptions (#1539) * feat: add sane defaults for CompressionOptions Signed-off-by: Arne Böckmann <a.boeckmann@cellumation.com> * Update rosbag2_compression/include/rosbag2_compression/compression_options.hpp Co-authored-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Signed-off-by: Arne Böckmann <a.boeckmann@cellumation.com> --------- Signed-off-by: Arne Böckmann <a.boeckmann@cellumation.com> Co-authored-by: Arne Böckmann <a.boeckmann@cellumation.com> Co-authored-by: Tomoya Fujita <Tomoya.Fujita@sony.com> (cherry picked from commit 931bf54) # Conflicts: # rosbag2_compression/include/rosbag2_compression/compression_options.hpp * Address merge conflicts Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Arne B <arne@rnae.de> Co-authored-by: Michael Orlov <michael.orlov@apex.ai> * Fix/zstd vendor does not find system zstd (#1111) (#1560) cmake did not find the Findzstd.cmake in cmake/Modules Since we cannot use pkg-config for some Windows issues, the parsing of the version is done by looking for the string in zstd.h. Signed-off-by: Matthias Schoepfer <m.schoepfer@rethinkrobotics.com> (cherry picked from commit e7e7269) Co-authored-by: DasRoteSkelett <matthias.schoepfer@googlemail.com> * [humble] Use rw_lock to protect mcap metadata lists. (backport #1561) (#1567) * Use rw_lock to protect mcap metadata lists. (#1561) * use rw_lock to protect mcap metadata lists. Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> * introduce MCAPStorage::write_lock_free private method. Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> --------- Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> (cherry picked from commit 90d1da8) # Conflicts: # rosbag2_storage_mcap/src/mcap_storage.cpp * Resolve merge conflicts Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Co-authored-by: Michael Orlov <michael.orlov@apex.ai> * Add /bigobj to MSVC compiles. (#1571) Signed-off-by: Chris Lalancette <clalancette@gmail.com> * Fix split by time. (backport #1022) (#1616) Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> * [humble] Add BagSplitInfo service call on bag close (backport #1422) (#1637) * Add BagSplitInfo service call on bag close (#1422) - Note: The `BagSplitInfo::opened_file` will have empty string to indicate that it was "bag close" and not bag split event. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> (cherry picked from commit ba199d0) # Conflicts: # rosbag2_cpp/test/rosbag2_cpp/test_sequential_writer.cpp * Fix merge conflicts - Ensure that writer_ is destructed before intercepted fake_metadata_ Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Michael Orlov <michael.orlov@apex.ai> * [Humble] Resolve recording option problem (backport #1649) (#1651) * Resolve recording option problem (#1649) Signed-off-by: Barry Xu <barry.xu@sony.com> (cherry picked from commit 4914ab3) # Conflicts: # ros2bag/ros2bag/verb/record.py * Fix cherry-pick conflicts for mergify/bp/humble/pr-1649 (#1652) Signed-off-by: Barry Xu <barry.xu@sony.com> --------- Signed-off-by: Barry Xu <barry.xu@sony.com> Co-authored-by: Barry Xu <barry.xu@sony.com> * [humble] Add --log-level to ros2 bag play and record (#1655) * Add --log-level to ros2 bag play and record Co-authored-by: Michael Orlov <michael.orlov@apex.ai> Signed-off-by: Roman Sokolkov <rsokolkov@gmail.com> * Fix missing import Signed-off-by: Roman Sokolkov <rsokolkov@gmail.com> --------- Signed-off-by: Roman Sokolkov <rsokolkov@gmail.com> Co-authored-by: Michael Orlov <michael.orlov@apex.ai> * [humble] Bugfix for writer not being able to open again after closing (backport #1599) (#1653) * [iron] Bugfix for writer not being able to open again after closing (backport #1599) (#1635) * re-applies fixes from #1590 to rolling. Also removes new message definition in sequential writer test for multiple open operations. Also clears topic_names_to_message_definitions_ and handles message_definitions_s underlying container similarly. Lastly, also avoids reset of factory in the compression writer, adds unit test there too. Signed-off-by: Yannick Schulz <yschulz854@gmail.com> Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * removes unused compressor_ member from compresser writer class. Also delegates rest of the closing behavior to the base class in close method, as it is handled in the open and write methods of the compression writer Signed-off-by: Yannick Schulz <yschulz854@gmail.com> * Remove unrelated delta - message_definitions_ was intentionally allocated on the stack and should persist between writer close() and open() because it represents cache for message definitions which is not changes. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Don't call virtual methods from destructors Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Cleanup 'rosbag2_directory_next' after the test run Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Protect Writer::open(..) and Writer::close() with mutex on upper level - Rationale: To avoid race conditions if open(..) and close() could be ever be called from different threads. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Bugfix for WRITE_SPLIT callback not called for the last compressed file Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Bugfix for lost messages from cache when closing compression writer Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Address build failure by using rcpputils::fs instead of std::filesystem - Note: On Iron we haven't migrated to the std::filesystem and using rcpputils::fs Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Adopt failing 'open_succeeds_twice' test for Iron Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Return from writer's open() immediately if storage already open Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Yannick Schulz <yschulz854@gmail.com> Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Yannick Schulz <yschulz854@gmail.com> (cherry picked from commit a360d9b) # Conflicts: # rosbag2_compression/src/rosbag2_compression/sequential_compression_writer.cpp # rosbag2_cpp/src/rosbag2_cpp/writer.cpp # rosbag2_cpp/src/rosbag2_cpp/writers/sequential_writer.cpp * Address merge conflicts Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Fix for segfault in open_twice test - Ensure that writer_ is destructed before intercepted fake_metadata_ Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Fix for "open_succeeds_twice" test failure on second run - Use std::filesystem for temp files and folders operation. For some reason rcpputils::fs::delete_all(folder_name) wasn't able to delete temp folder with subfolders. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> * Adopt changes in TestRosbag2CPPAPI::minimal_writer_example for humble - The `serialized_msg2` is not owning the serialized data after the first call writer.write(serialized_msg2,..). i.e. need to use another message or another API in test. This is not a bug - this is by design. Signed-off-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Michael Orlov <michael.orlov@apex.ai> --------- Signed-off-by: Michael Orlov <michael.orlov@apex.ai> Signed-off-by: Audrow Nash <audrow@intrinsic.ai> Signed-off-by: Chris Lalancette <clalancette@gmail.com> Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Signed-off-by: Barry Xu <barry.xu@sony.com> Signed-off-by: Roman Sokolkov <rsokolkov@gmail.com> Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> Co-authored-by: Alejandro Hernández Cordero <ahcorde@gmail.com> Co-authored-by: Michael Orlov <michael.orlov@apex.ai> Co-authored-by: Tomoya Fujita <Tomoya.Fujita@sony.com> Co-authored-by: Christoph Fröhlich <christophfroehlich@users.noreply.github.com> Co-authored-by: Audrow Nash <audrow@openrobotics.org> Co-authored-by: Arne B <arne@rnae.de> Co-authored-by: DasRoteSkelett <matthias.schoepfer@googlemail.com> Co-authored-by: Chris Lalancette <clalancette@gmail.com> Co-authored-by: Barry Xu <barry.xu@sony.com> Co-authored-by: Roman <rsokolkov@gmail.com>
This PR fixes #1586.
Basically, destruction of the
storage_factory_
does not allow the writer to open another bag file after it got closed. I also don't think that it is necessary to destroy the factory in the first place as it does not get any data from the writer and itsunique
anyway. What did prevent the writer to work as expected was keeping track of existing topics in the maptopics_names_to_info_
but that can be easily cleared on close.I don't know if the test is in the maintainers way of doing things, please let me know.