| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- // Copyright (c) 2018-present, Facebook, Inc. All rights reserved.
- // This source code is licensed under both the GPLv2 (found in the
- // COPYING file in the root directory) and Apache 2.0 License
- // (found in the LICENSE.Apache file in the root directory).
- #pragma once
- #include "monitoring/instrumented_mutex.h"
- #include "options/db_options.h"
- #include "rocksdb/listener.h"
- #include "rocksdb/status.h"
- namespace ROCKSDB_NAMESPACE {
- class DBImpl;
- class ErrorHandler {
- public:
- ErrorHandler(DBImpl* db, const ImmutableDBOptions& db_options,
- InstrumentedMutex* db_mutex)
- : db_(db),
- db_options_(db_options),
- bg_error_(Status::OK()),
- recovery_error_(Status::OK()),
- db_mutex_(db_mutex),
- auto_recovery_(false),
- recovery_in_prog_(false) {}
- ~ErrorHandler() {}
- void EnableAutoRecovery() { auto_recovery_ = true; }
- Status::Severity GetErrorSeverity(BackgroundErrorReason reason,
- Status::Code code,
- Status::SubCode subcode);
- Status SetBGError(const Status& bg_err, BackgroundErrorReason reason);
- Status GetBGError() { return bg_error_; }
- Status GetRecoveryError() { return recovery_error_; }
- Status ClearBGError();
- bool IsDBStopped() {
- return !bg_error_.ok() &&
- bg_error_.severity() >= Status::Severity::kHardError;
- }
- bool IsBGWorkStopped() {
- return !bg_error_.ok() &&
- (bg_error_.severity() >= Status::Severity::kHardError ||
- !auto_recovery_);
- }
- bool IsRecoveryInProgress() { return recovery_in_prog_; }
- Status RecoverFromBGError(bool is_manual = false);
- void CancelErrorRecovery();
- private:
- DBImpl* db_;
- const ImmutableDBOptions& db_options_;
- Status bg_error_;
- // A separate Status variable used to record any errors during the
- // recovery process from hard errors
- Status recovery_error_;
- InstrumentedMutex* db_mutex_;
- // A flag indicating whether automatic recovery from errors is enabled
- bool auto_recovery_;
- bool recovery_in_prog_;
- Status OverrideNoSpaceError(Status bg_error, bool* auto_recovery);
- void RecoverFromNoSpace();
- };
- } // namespace ROCKSDB_NAMESPACE
|