-
Notifications
You must be signed in to change notification settings - Fork 260
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
Introduce rosbag2_transport layer and CLI #38
Conversation
CMake already prepends libraries with `lib`, so the old name resulted in `liblibrosbag2`
- not referenced in header, therefore unnecessary
- Don't link against rosbag2_storage anymore
I deleted all duplicate files and put them into the header-only library |
There is one problem I'd like to have fixed on this PR:
This error occurs when trying to record the bag file twice in a row. |
Yes, that is the error message when trying to overwrite a bagfile. For this PR we could add the behavior that bagfiles are overwritten by default, since the bagname is fixed. |
I am in favor of either overwriting it or gracefully failing if the bag file already exists. But somehow it shouldn't be terminating and the user should be informed about what's happening. another comment is to rename Looks like it's a German thing ;-) |
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.
a few more comments, sorry :)
rosbag2_test_commons/CMakeLists.txt
Outdated
endif() | ||
|
||
find_package(ament_cmake REQUIRED) | ||
find_package(ament_index_cpp REQUIRED) |
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 that line be inside the if(BUILD_TESTING)
?
subscriptions_.clear(); | ||
} | ||
|
||
std::shared_ptr<Rosbag2Node> Rosbag2Transport::setup_node() |
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.
why is the node not setup directly in the constructor? If so, then we don't need that check whether it's already set up or not.
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.
the same for init
and shutdown
btw
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.
Same reason as above for init
. The setup_node
may only be called after rclcpp::init
has happended.
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.
so it looks like you can't really call rclpy.init()
and then spin your nodes in c++.
I guess with that we can leave the code as it is.
This is a temporary solution and will be handled properly once a file path can be passed via the cli.
- Apparently ament_export_dependencies does not work in rosbag2_test_common
- Clock topic is no longer present on all nodes - Remove assumptions on foreign ros topics
5bad5b8
to
490697f
Compare
* First implementation of writer * Extract storage interface and sqlite3 implementation * Add test for sqlite storage * Split main() and rosbag2::record() * Add close() method to Storage * Add getMessage() method and refactor test * Refactor SqliteStorage constructor and open() * Add linters * Fix uncrustify * Fix cpplint * Specify test working directory * Better error handling * Use gmock matchers for assertions * Add test fixture for SqliteStorage tests * Extract message retrieval in tests into separate method * Add integration test for rosbag2::record() * Add ignore files for empty packages * Introduce create() method and refactor open() * Use shared pointer of Storage instead of SqliteStorage * Remove getDatabaseHandle() method * Fix uncrustify * Improve storage interface and add storage factory * Remove need of sleep() from integration test by usage of std::future * Move deletion of test database from fixture constructor to destructor * Use sqlite3 directly in intergration test instead of own sqlite wrapper * Move rosbag2::record() into Rosbag2 class * Use the test name as database file name * Add build instructions to README * ros2GH-37 Rename camelCase methods to snake_case * Use common test fixture * Add RAII wrapper for sqlite API * Mock away sqlite from sqlite_storage test * Use more reasonable assert * Add test * Add virtual destructor to WritableStorage * Use file_name instead of database_name in StorageFactory * Implement saving of test files in a tmp directory for linux/Mac * Try to implement saving of test files in a tmp directory for Windows * Write and use proper gmock SqliteWrappe mock * Refactor integration test and get rid of promise/future where possible * Throw exception in resource aquisition constructors * Make SqliteWrapper destructor virtual * Refactor test fixture and update SqliteWrapper mock * Fix warning when moving a temporary object * ros2GH-38 Refactor integration test * ros2GH-38 Get rid of superfluous string constructor in emplace_back() * ros2GH-38 Assert also execute_query() argument in sqlite_storage_test * ros2GH-38 add StorageFactory test * ros2GH-38 Refactor rosbag2 Test Fixture * ros2GH-40 Add first implementation of a rosbag reader and publisher * ros2GH-40 Add StorageFactory test when reading non-existing file * ros2GH-40 Fix uncrustify * ros2GH-40 Minor cleanup of CMakeLists * ros2GH-40 Wrap sqlite statements * ros2GH-40 Remove superfluous import * ros2GH-40 Use better include * ros2GH-40 Add play integration test * ros2GH-40 Fix Warning when moving a temporary object in reading * ros2GH-40 Initialize database pointer to nullpointer * ros2GH-40 Fix reader integration test * ros2GH-40 Polish storage wrapper * Revert "ros2GH-40: Wrap sqlite statements" * ros2GH-38 Fix Test Fixture after rebase * ros2GH-38 Refactor read_integration_test and refix Windows conversion warning * ros2GH-38 Add StorageFactory test * Simplify storage factory test * ros2GH-38 Try to fix flaky test * ros2GH-38 Move rclcpp::shutdown() at the end * ros2GH-41 Fix windows warning due to virtual explicit operator bool * ros2GH-41 Use sqlite3 vendor package in rosbag2 * ros2GH-41 Stop linking tests to sqlite * ros2GH-41 Fix test fixture on Windows * ros2GH-41 Cleanup test fixture includes * ros2GH-41 Print test database name * ros2GH-41 Correctly determine temp dir on Windows * ros2GH-41 Show error message on sqlite_open failure * ros2GH-41 Actually create temp dir on Windows * ros2GH-41 Fix bool conversion warning in VS2015 build * Fix CMakeLists.txt after rebase * ros2GH-40 Implement workouround to fix flaky test * Update package.xml * Add gtest test dependencies to package.xml * ros2GH-40 Move to sqlite3_storage_plugin folder - The separation into the intended structure and plugin apis is not there yet. However, most code will stay in the storage plugin for sqlite3 file. - Proper separation of this code into storage plugin and rosbag layer will be done in bosch-io/aos-rosbag2#5. * ros2GH-40 Add TODO comments and small cleanup
This PR does a number of things:
rosbag2_transport
to makerosbag2
independent of any subscription/publishing code and thereforerclcpp
orrcl
rosbag2
a thin wrapper aroundrosbag2_storage
(for now). Later on,rosbag2
can be used by other toolingros2 bag play <filename>
andros2 bag record <topic names>
as well asros2 bag record --all
. The two verbs and the given options are fully functional.This PR improves testing:
rosbag2_tests
containing e2e-testing: We startros2 bag record/play
commands in separate processesrosbag2_transport
not rely on particular storage, which decreases dependenciestest
, all other files don't.This PR should also improve test stability to basically as much as we can
To discuss:
There are a few duplicate files in testing (they are named the same to make it easy to spot). How should we go about this problem?
rosbag2_test_commons
which all packages might depend on as a pure testing dependency?