Initialize threads later in constructor
Summary: This addresses a test failure where an exception occured in the constructor's call to CreateDirIfMissing(). The existence of unjoined threads prevented this exception from propogating properly. See http://stackoverflow.com/questions/7381757/c-terminate-called-without-an-active-exception Test Plan: Re-run tests from task #7626266 Reviewers: sdong, anthony, igor Reviewed By: igor Subscribers: dhruba Differential Revision: https://reviews.facebook.net/D41313
This commit is contained in:
parent
58d7ab3c68
commit
e12b403991
@ -442,26 +442,6 @@ BackupEngineImpl::BackupEngineImpl(Env* db_env,
|
|||||||
copy_file_buffer_size_(kDefaultCopyFileBufferSize),
|
copy_file_buffer_size_(kDefaultCopyFileBufferSize),
|
||||||
read_only_(read_only) {
|
read_only_(read_only) {
|
||||||
|
|
||||||
// set up threads perform copies from files_to_copy_ in the background
|
|
||||||
for (int t = 0; t < options_.max_background_operations; t++) {
|
|
||||||
threads_.emplace_back([&]() {
|
|
||||||
CopyWorkItem work_item;
|
|
||||||
while (files_to_copy_.read(work_item)) {
|
|
||||||
CopyResult result;
|
|
||||||
result.status = CopyFile(work_item.src_path,
|
|
||||||
work_item.dst_path,
|
|
||||||
work_item.src_env,
|
|
||||||
work_item.dst_env,
|
|
||||||
work_item.sync,
|
|
||||||
work_item.rate_limiter,
|
|
||||||
&result.size,
|
|
||||||
&result.checksum_value,
|
|
||||||
work_item.size_limit);
|
|
||||||
work_item.result.set_value(std::move(result));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (read_only_) {
|
if (read_only_) {
|
||||||
Log(options_.info_log, "Starting read_only backup engine");
|
Log(options_.info_log, "Starting read_only backup engine");
|
||||||
}
|
}
|
||||||
@ -581,6 +561,27 @@ BackupEngineImpl::BackupEngineImpl(Env* db_env,
|
|||||||
if (!read_only_) {
|
if (!read_only_) {
|
||||||
PutLatestBackupFileContents(latest_backup_id_); // Ignore errors
|
PutLatestBackupFileContents(latest_backup_id_); // Ignore errors
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set up threads perform copies from files_to_copy_ in the background
|
||||||
|
for (int t = 0; t < options_.max_background_operations; t++) {
|
||||||
|
threads_.emplace_back([&]() {
|
||||||
|
CopyWorkItem work_item;
|
||||||
|
while (files_to_copy_.read(work_item)) {
|
||||||
|
CopyResult result;
|
||||||
|
result.status = CopyFile(work_item.src_path,
|
||||||
|
work_item.dst_path,
|
||||||
|
work_item.src_env,
|
||||||
|
work_item.dst_env,
|
||||||
|
work_item.sync,
|
||||||
|
work_item.rate_limiter,
|
||||||
|
&result.size,
|
||||||
|
&result.checksum_value,
|
||||||
|
work_item.size_limit);
|
||||||
|
work_item.result.set_value(std::move(result));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
Log(options_.info_log, "Initialized BackupEngine");
|
Log(options_.info_log, "Initialized BackupEngine");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user