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
(cherry picked from commit e12b403991
)
This commit is contained in:
parent
bc672aefb3
commit
718309432b
@ -442,26 +442,6 @@ BackupEngineImpl::BackupEngineImpl(Env* db_env,
|
||||
copy_file_buffer_size_(kDefaultCopyFileBufferSize),
|
||||
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_) {
|
||||
Log(options_.info_log, "Starting read_only backup engine");
|
||||
}
|
||||
@ -581,6 +561,27 @@ BackupEngineImpl::BackupEngineImpl(Env* db_env,
|
||||
if (!read_only_) {
|
||||
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");
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user