[4.2][NetStandby] Standby restore status support new scenarios
This commit is contained in:
parent
683dd0a0f6
commit
eb611c26b2
@ -48,7 +48,7 @@ namespace logservice
|
||||
{
|
||||
using namespace oceanbase::share;
|
||||
|
||||
const char *type_str[static_cast<int>(RestoreSyncStatus::MAX_RESTORE_SYNC_STATUS)] = {
|
||||
const char *restore_comment_str[static_cast<int>(RestoreSyncStatus::MAX_RESTORE_SYNC_STATUS)] = {
|
||||
"Invalid restore status",
|
||||
" ",
|
||||
"There is a gap between the log source and standby",
|
||||
@ -58,9 +58,26 @@ const char *type_str[static_cast<int>(RestoreSyncStatus::MAX_RESTORE_SYNC_STATUS
|
||||
"Log source is unreachable, the log source access point may be unavailable",
|
||||
"Fetch log time out",
|
||||
"Restore suspend, the standby has synchronized to recovery until scn",
|
||||
"Standby binary version is lower than primary data version, standby need upgrade",
|
||||
"Primary tenant has been dropped",
|
||||
"Unexpected exceptions",
|
||||
};
|
||||
|
||||
const char *restore_status_str[static_cast<int>(RestoreSyncStatus::MAX_RESTORE_SYNC_STATUS)] = {
|
||||
"INVALID RESTORE STATUS",
|
||||
"NORMAL",
|
||||
"SOURCE HAS A GAP",
|
||||
"STANDBY LOG NOT MATCH",
|
||||
"STANDBY LOG NOT MATCH",
|
||||
"CHECK USER OR PASSWORD",
|
||||
"CHECK NETWORK",
|
||||
"FETCH LOG TIMEOUT",
|
||||
"RESTORE SUSPEND",
|
||||
"STANDBY NEED UPGRADE",
|
||||
"PRIMARY TENANT DROPPED",
|
||||
"NOT AVAILABLE",
|
||||
};
|
||||
|
||||
ObLogRestoreHandler::ObLogRestoreHandler() :
|
||||
parent_(NULL),
|
||||
context_(),
|
||||
@ -920,7 +937,7 @@ int ObLogRestoreHandler::get_ls_restore_status_info(RestoreStatusInfo &restore_s
|
||||
restore_status_info.err_code_ = ret_code;
|
||||
restore_status_info.sync_lsn_ = lsn.val_;
|
||||
restore_status_info.sync_scn_ = scn;
|
||||
if (OB_FAIL(restore_status_info.comment_.assign_fmt("%s", type_str[int(restore_status_info.sync_status_)]))) {
|
||||
if (OB_FAIL(restore_status_info.comment_.assign_fmt("%s", restore_comment_str[int(restore_status_info.sync_status_)]))) {
|
||||
CLOG_LOG(WARN, "fail to assign comment", K(sync_status));
|
||||
} else {
|
||||
CLOG_LOG(TRACE, "success to get error code and message", K(restore_status_info));
|
||||
@ -964,6 +981,14 @@ int ObLogRestoreHandler::get_err_code_and_message_(int ret_code,
|
||||
else if (OB_TIMEOUT == ret_code && ObLogRestoreErrorContext::ErrorType::FETCH_LOG == error_type) {
|
||||
sync_status = RestoreSyncStatus::RESTORE_SYNC_FETCH_LOG_TIME_OUT;
|
||||
}
|
||||
// RESTORE_SYNC_STANDBY_NEED_UPGRADE
|
||||
else if (OB_ERR_RESTORE_STANDBY_VERSION_LAG == ret_code && ObLogRestoreErrorContext::ErrorType::FETCH_LOG == error_type) {
|
||||
sync_status = RestoreSyncStatus::RESTORE_SYNC_STANDBY_NEED_UPGRADE;
|
||||
}
|
||||
// RESTORE_SYNC_PRIMARY_IS_DROPPED
|
||||
else if (OB_ERR_RESTORE_PRIMARY_TENANT_DROPPED == ret_code && ObLogRestoreErrorContext::ErrorType::FETCH_LOG == error_type) {
|
||||
sync_status = RestoreSyncStatus::RESTORE_SYNC_PRIMARY_IS_DROPPED;
|
||||
}
|
||||
// RESTORE_SYNC_NOT_AVAILABLE
|
||||
else if (OB_SUCCESS != ret_code) {
|
||||
sync_status = RestoreSyncStatus::RESTORE_SYNC_NOT_AVAILABLE;
|
||||
@ -992,6 +1017,22 @@ void RestoreStatusInfo::reset()
|
||||
comment_.reset();
|
||||
}
|
||||
|
||||
int RestoreStatusInfo::restore_sync_status_to_string(char *str_buf, const int64_t str_len)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
const int64_t MAX_RESTORE_STATUS_STR_LEN = 32;
|
||||
if (OB_ISNULL(str_buf)
|
||||
|| str_len < MAX_RESTORE_STATUS_STR_LEN
|
||||
|| sync_status_ <= RestoreSyncStatus::INVALID_RESTORE_SYNC_STATUS
|
||||
|| sync_status_ >= RestoreSyncStatus::MAX_RESTORE_SYNC_STATUS) {
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
CLOG_LOG(WARN, "invalid restore status", K(sync_status_));
|
||||
} else if (databuff_printf(str_buf, str_len, "%s", restore_status_str[int(sync_status_)])) {
|
||||
CLOG_LOG(WARN, "databuff printf restore status str failed", K(sync_status_));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool RestoreStatusInfo::is_valid() const
|
||||
{
|
||||
return ls_id_ != share::ObLSID::INVALID_LS_ID
|
||||
|
@ -85,36 +85,12 @@ enum class RestoreSyncStatus {
|
||||
RESTORE_SYNC_CHECK_NETWORK = 6,
|
||||
RESTORE_SYNC_FETCH_LOG_TIME_OUT = 7,
|
||||
RESTORE_SYNC_SUSPEND = 8,
|
||||
RESTORE_SYNC_NOT_AVAILABLE = 9,
|
||||
RESTORE_SYNC_STANDBY_NEED_UPGRADE = 9,
|
||||
RESTORE_SYNC_PRIMARY_IS_DROPPED = 10,
|
||||
RESTORE_SYNC_NOT_AVAILABLE = 11,
|
||||
MAX_RESTORE_SYNC_STATUS
|
||||
};
|
||||
|
||||
inline int restore_sync_status_to_string(const RestoreSyncStatus status, char *str_buf_, const int64_t str_len)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (RestoreSyncStatus::RESTORE_SYNC_NORMAL == status) {
|
||||
strncpy(str_buf_, "NORMAL", str_len);
|
||||
} else if (RestoreSyncStatus::RESTORE_SYNC_SOURCE_HAS_A_GAP == status) {
|
||||
strncpy(str_buf_, "SOURCE HAS A GAP", str_len);
|
||||
} else if (RestoreSyncStatus::RESTORE_SYNC_SUBMIT_LOG_NOT_MATCH == status
|
||||
|| RestoreSyncStatus::RESTORE_SYNC_FETCH_LOG_NOT_MATCH == status) {
|
||||
strncpy(str_buf_, "STANDBY LOG NOT MATCH", str_len);
|
||||
} else if (RestoreSyncStatus::RESTORE_SYNC_CHECK_USER_OR_PASSWORD == status) {
|
||||
strncpy(str_buf_, "CHECK USER OR PASSWORD", str_len);
|
||||
} else if (RestoreSyncStatus::RESTORE_SYNC_CHECK_NETWORK == status) {
|
||||
strncpy(str_buf_, "CHECK NETWORK", str_len);
|
||||
} else if (RestoreSyncStatus::RESTORE_SYNC_FETCH_LOG_TIME_OUT == status) {
|
||||
strncpy(str_buf_, "FETCH LOG TIMEOUT", str_len);
|
||||
} else if (RestoreSyncStatus::RESTORE_SYNC_SUSPEND == status) {
|
||||
strncpy(str_buf_, "RESTORE SUSPEND", str_len);
|
||||
} else if (RestoreSyncStatus::RESTORE_SYNC_NOT_AVAILABLE == status) {
|
||||
strncpy(str_buf_, "NOT AVAILABLE", str_len);
|
||||
} else {
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct RestoreStatusInfo
|
||||
{
|
||||
public:
|
||||
@ -122,6 +98,7 @@ public:
|
||||
~RestoreStatusInfo() { reset(); }
|
||||
bool is_valid() const;
|
||||
void reset();
|
||||
int restore_sync_status_to_string(char *str_buf, const int64_t str_len);
|
||||
TO_STRING_KV(K_(ls_id), K_(sync_lsn), K_(sync_scn), K_(sync_status), K_(err_code), K_(comment));
|
||||
|
||||
public:
|
||||
|
@ -174,8 +174,7 @@ int ObVirtualLSLogRestoreStatus::insert_ls_restore_status_info_(logservice::Rest
|
||||
break;
|
||||
}
|
||||
case OB_APP_MIN_COLUMN_ID + 6: {
|
||||
if (OB_FAIL(restore_sync_status_to_string(restore_status_info.sync_status_, restore_status_str_,
|
||||
sizeof(restore_status_str_)))) {
|
||||
if (OB_FAIL(restore_status_info.restore_sync_status_to_string(restore_status_str_, sizeof(restore_status_str_)))) {
|
||||
SERVER_LOG(WARN, "restore_sync_status to string failed", K(restore_status_info));
|
||||
} else {
|
||||
cur_row_.cells_[i].set_varchar(ObString::make_string(restore_status_str_));
|
||||
|
@ -21909,6 +21909,30 @@ static const _error _error_OB_NO_TABLET_NEED_BACKUP = {
|
||||
.oracle_str_error = "ORA-00600: internal error code, arguments: -9095, No tablet need backup",
|
||||
.oracle_str_user_error = "ORA-00600: internal error code, arguments: -9095, No tablet need backup"
|
||||
};
|
||||
static const _error _error_OB_ERR_RESTORE_STANDBY_VERSION_LAG = {
|
||||
.error_name = "OB_ERR_RESTORE_STANDBY_VERSION_LAG",
|
||||
.error_cause = "Internal Error",
|
||||
.error_solution = "Contact OceanBase Support",
|
||||
.mysql_errno = -1,
|
||||
.sqlstate = "HY000",
|
||||
.str_error = "standby binary version is lower than primary data version, standby need upgrade",
|
||||
.str_user_error = "standby binary version is lower than primary data version, standby need upgrade",
|
||||
.oracle_errno = 600,
|
||||
.oracle_str_error = "ORA-00600: internal error code, arguments: -9096, standby binary version is lower than primary data version, standby need upgrade",
|
||||
.oracle_str_user_error = "ORA-00600: internal error code, arguments: -9096, standby binary version is lower than primary data version, standby need upgrade"
|
||||
};
|
||||
static const _error _error_OB_ERR_RESTORE_PRIMARY_TENANT_DROPPED = {
|
||||
.error_name = "OB_ERR_RESTORE_PRIMARY_TENANT_DROPPED",
|
||||
.error_cause = "Internal Error",
|
||||
.error_solution = "Contact OceanBase Support",
|
||||
.mysql_errno = -1,
|
||||
.sqlstate = "HY000",
|
||||
.str_error = "primary tenant has been dropped",
|
||||
.str_user_error = "primary tenant has been dropped",
|
||||
.oracle_errno = 600,
|
||||
.oracle_str_error = "ORA-00600: internal error code, arguments: -9097, primary tenant has been dropped",
|
||||
.oracle_str_user_error = "ORA-00600: internal error code, arguments: -9097, primary tenant has been dropped"
|
||||
};
|
||||
static const _error _error_OB_NO_SUCH_FILE_OR_DIRECTORY = {
|
||||
.error_name = "OB_NO_SUCH_FILE_OR_DIRECTORY",
|
||||
.error_cause = "Internal Error",
|
||||
@ -26860,6 +26884,8 @@ struct ObStrErrorInit
|
||||
_errors[-OB_RESTORE_LOG_TO_END] = &_error_OB_RESTORE_LOG_TO_END;
|
||||
_errors[-OB_LS_RESTORE_FAILED] = &_error_OB_LS_RESTORE_FAILED;
|
||||
_errors[-OB_NO_TABLET_NEED_BACKUP] = &_error_OB_NO_TABLET_NEED_BACKUP;
|
||||
_errors[-OB_ERR_RESTORE_STANDBY_VERSION_LAG] = &_error_OB_ERR_RESTORE_STANDBY_VERSION_LAG;
|
||||
_errors[-OB_ERR_RESTORE_PRIMARY_TENANT_DROPPED] = &_error_OB_ERR_RESTORE_PRIMARY_TENANT_DROPPED;
|
||||
_errors[-OB_NO_SUCH_FILE_OR_DIRECTORY] = &_error_OB_NO_SUCH_FILE_OR_DIRECTORY;
|
||||
_errors[-OB_FILE_OR_DIRECTORY_EXIST] = &_error_OB_FILE_OR_DIRECTORY_EXIST;
|
||||
_errors[-OB_FILE_OR_DIRECTORY_PERMISSION_DENIED] = &_error_OB_FILE_OR_DIRECTORY_PERMISSION_DENIED;
|
||||
|
@ -2011,6 +2011,8 @@ DEFINE_ERROR(OB_ALREADY_IN_NOARCHIVE_MODE, -9092, -1, "HY000", "Already in NOARC
|
||||
DEFINE_ERROR(OB_RESTORE_LOG_TO_END, -9093, -1, "HY000", "Restore log to end");
|
||||
DEFINE_ERROR(OB_LS_RESTORE_FAILED, -9094, -1, "HY000", "Restore log stream failed");
|
||||
DEFINE_ERROR(OB_NO_TABLET_NEED_BACKUP, -9095, -1, "HY000", "No tablet need backup");
|
||||
DEFINE_ERROR(OB_ERR_RESTORE_STANDBY_VERSION_LAG, -9096, -1, "HY000", "standby binary version is lower than primary data version, standby need upgrade");
|
||||
DEFINE_ERROR(OB_ERR_RESTORE_PRIMARY_TENANT_DROPPED, -9097, -1, "HY000", "primary tenant has been dropped");
|
||||
// end of backup and restore error codes 9001 ~ 9099
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
@ -1491,6 +1491,8 @@ constexpr int OB_ALREADY_IN_NOARCHIVE_MODE = -9092;
|
||||
constexpr int OB_RESTORE_LOG_TO_END = -9093;
|
||||
constexpr int OB_LS_RESTORE_FAILED = -9094;
|
||||
constexpr int OB_NO_TABLET_NEED_BACKUP = -9095;
|
||||
constexpr int OB_ERR_RESTORE_STANDBY_VERSION_LAG = -9096;
|
||||
constexpr int OB_ERR_RESTORE_PRIMARY_TENANT_DROPPED = -9097;
|
||||
constexpr int OB_NO_SUCH_FILE_OR_DIRECTORY = -9100;
|
||||
constexpr int OB_FILE_OR_DIRECTORY_EXIST = -9101;
|
||||
constexpr int OB_FILE_OR_DIRECTORY_PERMISSION_DENIED = -9102;
|
||||
@ -3576,6 +3578,8 @@ constexpr int OB_ERR_INVALID_DATE_MSG_FMT_V2 = -4219;
|
||||
#define OB_RESTORE_LOG_TO_END__USER_ERROR_MSG "Restore log to end"
|
||||
#define OB_LS_RESTORE_FAILED__USER_ERROR_MSG "Restore log stream failed"
|
||||
#define OB_NO_TABLET_NEED_BACKUP__USER_ERROR_MSG "No tablet need backup"
|
||||
#define OB_ERR_RESTORE_STANDBY_VERSION_LAG__USER_ERROR_MSG "standby binary version is lower than primary data version, standby need upgrade"
|
||||
#define OB_ERR_RESTORE_PRIMARY_TENANT_DROPPED__USER_ERROR_MSG "primary tenant has been dropped"
|
||||
#define OB_NO_SUCH_FILE_OR_DIRECTORY__USER_ERROR_MSG "no such file or directory"
|
||||
#define OB_FILE_OR_DIRECTORY_EXIST__USER_ERROR_MSG "file or directory already exist"
|
||||
#define OB_FILE_OR_DIRECTORY_PERMISSION_DENIED__USER_ERROR_MSG "file or directory permission denied"
|
||||
@ -5663,6 +5667,8 @@ constexpr int OB_ERR_INVALID_DATE_MSG_FMT_V2 = -4219;
|
||||
#define OB_RESTORE_LOG_TO_END__ORA_USER_ERROR_MSG "ORA-00600: internal error code, arguments: -9093, Restore log to end"
|
||||
#define OB_LS_RESTORE_FAILED__ORA_USER_ERROR_MSG "ORA-00600: internal error code, arguments: -9094, Restore log stream failed"
|
||||
#define OB_NO_TABLET_NEED_BACKUP__ORA_USER_ERROR_MSG "ORA-00600: internal error code, arguments: -9095, No tablet need backup"
|
||||
#define OB_ERR_RESTORE_STANDBY_VERSION_LAG__ORA_USER_ERROR_MSG "ORA-00600: internal error code, arguments: -9096, standby binary version is lower than primary data version, standby need upgrade"
|
||||
#define OB_ERR_RESTORE_PRIMARY_TENANT_DROPPED__ORA_USER_ERROR_MSG "ORA-00600: internal error code, arguments: -9097, primary tenant has been dropped"
|
||||
#define OB_NO_SUCH_FILE_OR_DIRECTORY__ORA_USER_ERROR_MSG "ORA-00600: internal error code, arguments: -9100, no such file or directory"
|
||||
#define OB_FILE_OR_DIRECTORY_EXIST__ORA_USER_ERROR_MSG "ORA-00600: internal error code, arguments: -9101, file or directory already exist"
|
||||
#define OB_FILE_OR_DIRECTORY_PERMISSION_DENIED__ORA_USER_ERROR_MSG "ORA-00600: internal error code, arguments: -9102, file or directory permission denied"
|
||||
|
Loading…
x
Reference in New Issue
Block a user