diff --git a/db/error_handler.cc b/db/error_handler.cc index b5c353a69..38b4fa049 100644 --- a/db/error_handler.cc +++ b/db/error_handler.cc @@ -327,7 +327,8 @@ const Status& ErrorHandler::SetBGError(const Status& bg_err, } // Allow some error specific overrides - if (new_bg_err == Status::NoSpace()) { + if (new_bg_err.subcode() == IOStatus::SubCode::kNoSpace || + new_bg_err.subcode() == IOStatus::SubCode::kSpaceLimit) { new_bg_err = OverrideNoSpaceError(new_bg_err, &auto_recovery); } @@ -349,7 +350,8 @@ const Status& ErrorHandler::SetBGError(const Status& bg_err, recovery_in_prog_ = true; // Kick-off error specific recovery - if (bg_error_ == Status::NoSpace()) { + if (new_bg_err.subcode() == IOStatus::SubCode::kNoSpace || + new_bg_err.subcode() == IOStatus::SubCode::kSpaceLimit) { RecoverFromNoSpace(); } } diff --git a/file/sst_file_manager_impl.cc b/file/sst_file_manager_impl.cc index cc03e5444..161602fa7 100644 --- a/file/sst_file_manager_impl.cc +++ b/file/sst_file_manager_impl.cc @@ -317,7 +317,7 @@ void SstFileManagerImpl::ClearError() { // error is also a NoSpace() non-fatal error, leave the instance in // the list Status err = cur_instance_->GetBGError(); - if (s.ok() && err == Status::NoSpace() && + if (s.ok() && err.subcode() == IOStatus::SubCode::kNoSpace && err.severity() < Status::Severity::kFatalError) { s = err; } diff --git a/utilities/fault_injection_env.h b/utilities/fault_injection_env.h index ab232a1a2..fa1fa0d64 100644 --- a/utilities/fault_injection_env.h +++ b/utilities/fault_injection_env.h @@ -179,7 +179,8 @@ class FaultInjectionTestEnv : public EnvWrapper { #undef GetFreeSpace virtual Status GetFreeSpace(const std::string& path, uint64_t* disk_free) override { - if (!IsFilesystemActive() && error_ == Status::NoSpace()) { + if (!IsFilesystemActive() && + error_.subcode() == IOStatus::SubCode::kNoSpace) { *disk_free = 0; return Status::OK(); } else { diff --git a/utilities/fault_injection_fs.h b/utilities/fault_injection_fs.h index 625911af3..62c938ca0 100644 --- a/utilities/fault_injection_fs.h +++ b/utilities/fault_injection_fs.h @@ -240,7 +240,8 @@ class FaultInjectionTestFS : public FileSystemWrapper { const IOOptions& options, uint64_t* disk_free, IODebugContext* dbg) override { IOStatus io_s; - if (!IsFilesystemActive() && error_ == IOStatus::NoSpace()) { + if (!IsFilesystemActive() && + error_.subcode() == IOStatus::SubCode::kNoSpace) { *disk_free = 0; } else { io_s = target()->GetFreeSpace(path, options, disk_free, dbg);