From 107c035eb90590fa81a47beb36e04ce89ab12aab Mon Sep 17 00:00:00 2001 From: Roman Shtylman Date: Fri, 9 Aug 2024 14:32:37 -0700 Subject: [PATCH] Prevent using message compression mode with mcap storage Signed-off-by: Roman Shtylman --- ros2bag/ros2bag/verb/record.py | 5 +++++ .../sequential_compression_writer.cpp | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/ros2bag/ros2bag/verb/record.py b/ros2bag/ros2bag/verb/record.py index b5adb0316..8e2207307 100644 --- a/ros2bag/ros2bag/verb/record.py +++ b/ros2bag/ros2bag/verb/record.py @@ -200,6 +200,11 @@ def main(self, *, args): # noqa: D102 return print_error('Invalid choice: Cannot specify compression format ' 'without a compression mode.') + if args.compression_mode == 'message' and args.storage == 'mcap': + return print_error("Invalid choice: compression_mode 'message' is not supported " + 'by the MCAP storage plugin. You can enable chunk compression by ' + "setting `compression: 'Zstd'` in storage config") + if args.compression_queue_size < 0: return print_error('Compression queue size must be at least 0.') diff --git a/rosbag2_compression/src/rosbag2_compression/sequential_compression_writer.cpp b/rosbag2_compression/src/rosbag2_compression/sequential_compression_writer.cpp index 31d995134..5190a1969 100644 --- a/rosbag2_compression/src/rosbag2_compression/sequential_compression_writer.cpp +++ b/rosbag2_compression/src/rosbag2_compression/sequential_compression_writer.cpp @@ -217,6 +217,15 @@ void SequentialCompressionWriter::open( if (storage_) { return; // The writer already opened. } + // Note: a better solution was implemented in rosbag2-storage version 0.18+ + // See MCAPStorage::update_metadata() for details. + if (compression_options_.compression_mode == CompressionMode::MESSAGE && + storage_options.storage_id == "mcap") + { + throw std::runtime_error( + "MCAP storage plugin does not support message compression, " + "consider using chunk compression by setting `compression: 'Zstd'` in storage config"); + } SequentialWriter::open(storage_options, converter_options); setup_compression(); }