Skip to content
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

Add ".active" suffix to actively recording files #1672

Open
wants to merge 5 commits into
base: rolling
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 26 additions & 1 deletion rosbag2_cpp/src/rosbag2_cpp/writers/sequential_writer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,19 @@ std::string strip_parent_path(const std::string & relative_path)
{
return fs::path(relative_path).filename().generic_string();
}

std::string remove_active_from_filename(const std::string& relative_path)
{
fs::path path(relative_path);
auto filename = path.filename().string();
auto active_pos = filename.find(".active");
if(active_pos != std::string::npos) {
filename.replace(active_pos, 7, "");
}
auto new_path = path.parent_path() / filename;
return new_path.string();
facontidavide marked this conversation as resolved.
Show resolved Hide resolved
}

} // namespace

SequentialWriter::SequentialWriter(
Expand Down Expand Up @@ -190,7 +203,11 @@ void SequentialWriter::close()
}

if (storage_) {
// when the storage_ is closed, rename the file to remove ".active" suffix
std::string active_path = storage_->get_relative_file_path();
std::string final_path = remove_active_from_filename(active_path);
storage_.reset(); // Destroy storage before calling WRITE_SPLIT callback to make sure that
fs::rename(active_path, final_path);
// bag file was closed before callback call.
}
if (!metadata_.relative_file_paths.empty()) {
Expand Down Expand Up @@ -309,7 +326,7 @@ std::string SequentialWriter::format_storage_uri(
// SequentialWriter is opened with a relative path.
std::stringstream storage_file_name;
storage_file_name << fs::path(base_folder).filename().generic_string() << "_" <<
storage_count;
storage_count << ".active";

return (fs::path(base_folder) / storage_file_name.str()).generic_string();
}
Expand All @@ -326,7 +343,15 @@ void SequentialWriter::switch_to_next_storage()
storage_options_.uri = format_storage_uri(
base_folder_,
metadata_.relative_file_paths.size());

// when the storage_ is closed, rename the file to remove ".inactive" suffix
facontidavide marked this conversation as resolved.
Show resolved Hide resolved
std::string active_path = storage_->get_relative_file_path();
std::string final_path = remove_active_from_filename(active_path);

storage_ = storage_factory_->open_read_write(storage_options_);

std::filesystem::rename(active_path, final_path);
facontidavide marked this conversation as resolved.
Show resolved Hide resolved

if (!storage_) {
std::stringstream errmsg;
errmsg << "Failed to rollover bagfile to new file: \"" << storage_options_.uri << "\"!";
Expand Down