diff --git a/src/share/ob_debug_sync_point.h b/src/share/ob_debug_sync_point.h index 7544582fa8..15ca5b950c 100755 --- a/src/share/ob_debug_sync_point.h +++ b/src/share/ob_debug_sync_point.h @@ -559,6 +559,7 @@ class ObString; ACT(BEFORE_RELOAD_UNIT,)\ ACT(BEFORE_PROCESS_EVENT_TASK,)\ ACT(BEFORE_CHECK_LS_TRANSFER_SCN_FOR_STANDBY,)\ + ACT(BEFORE_GET_CONFIG_VERSION_AND_TRANSFER_SCN,)\ ACT(MAX_DEBUG_SYNC_POINT,) DECLARE_ENUM(ObDebugSyncPoint, debug_sync_point, OB_DEBUG_SYNC_POINT_DEF); diff --git a/src/share/parameter/ob_parameter_seed.ipp b/src/share/parameter/ob_parameter_seed.ipp index 0747335ba9..05a9188ecc 100755 --- a/src/share/parameter/ob_parameter_seed.ipp +++ b/src/share/parameter/ob_parameter_seed.ipp @@ -1743,3 +1743,5 @@ DEF_BOOL(_enable_range_extraction_for_not_in, OB_TENANT_PARAMETER, "True", // ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); ERRSIM_DEF_STR(palf_inject_receive_log_error_zone, OB_CLUSTER_PARAMETER, "", "specifies the zone name that palf module want to inject error when receive log", ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); +ERRSIM_DEF_STR(migrate_check_member_list_error_zone, OB_CLUSTER_PARAMETER, "", "specifies the zone name that migrate want to inject error when change member list", + ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); diff --git a/src/storage/high_availability/ob_ls_member_list_service.cpp b/src/storage/high_availability/ob_ls_member_list_service.cpp index c35eaa224d..adc63c508c 100644 --- a/src/storage/high_availability/ob_ls_member_list_service.cpp +++ b/src/storage/high_availability/ob_ls_member_list_service.cpp @@ -411,11 +411,11 @@ int ObLSMemberListService::check_ls_transfer_scn_validity_for_standby_(palf::Log share::SCN transfer_scn; palf::LogConfigVersion config_version; bool need_get_config_version = (addr == leader_addr); - if (OB_FAIL(get_config_version_and_transfer_scn_(batch_proxy, - addr, - need_get_config_version, - ls_->get_tenant_id(), - ls_->get_ls_id()))) { + if (OB_TMP_FAIL(get_config_version_and_transfer_scn_(batch_proxy, + addr, + need_get_config_version, + ls_->get_tenant_id(), + ls_->get_ls_id()))) { STORAGE_LOG(WARN, "failed to get config version and transfer scn", K(ret), K(addr)); } } @@ -441,6 +441,8 @@ int ObLSMemberListService::check_ls_transfer_scn_validity_for_standby_(palf::Log leader_config_version, leader_transfer_scn))) { STORAGE_LOG(WARN, "failed to process result from async rpc", KR(ret), KR(tmp_ret)); + } else { + STORAGE_LOG(INFO, "process result from async rpc", KR(ret), K(return_code_array), K(addr_list), K(batch_proxy.get_results())); } if (OB_SUCC(ret)) { // standby check transfer scn need reach majority @@ -475,8 +477,16 @@ int ObLSMemberListService::process_result_from_async_rpc_( int tmp_ret = OB_SUCCESS; ARRAY_FOREACH_X(proxy.get_results(), idx, cnt, OB_SUCC(ret)) { const ObStorageChangeMemberRes *response = proxy.get_results().at(idx); + const int res_ret = return_code_array.at(idx); bool check_pass = false; - if (OB_ISNULL(response)) { + if (OB_SUCCESS != res_ret) { +#ifdef ERRSIM + SERVER_EVENT_ADD("storage_ha", "check_ls_transfer_scn_validity_for_standby_failed", + "tenant_id", ls_->get_tenant_id(), + "ls_id", ls_->get_ls_id().id(), + "result", res_ret); +#endif + } else if (OB_ISNULL(response)) { tmp_ret = OB_ERR_UNEXPECTED; STORAGE_LOG(WARN, "hb_response is null", KR(ret), KR(tmp_ret)); } else if (for_standby && OB_FAIL(check_ls_transfer_scn_(response->transfer_scn_, check_pass))) { diff --git a/src/storage/ob_storage_rpc.cpp b/src/storage/ob_storage_rpc.cpp index 7cf7d0f1a6..0764d9a8b9 100644 --- a/src/storage/ob_storage_rpc.cpp +++ b/src/storage/ob_storage_rpc.cpp @@ -2895,6 +2895,14 @@ int ObStorageGetConfigVersionAndTransferScnDelegate::process() const uint64_t tenant_id = arg_.tenant_id_; const share::ObLSID &ls_id = arg_.ls_id_; const bool need_get_config_version = arg_.need_get_config_version_; +#ifdef ERRSIM + if (!GCONF.migrate_check_member_list_error_zone.get_value_string().empty()) { + if (0 == strcmp(GCONF.zone.str(), GCONF.migrate_check_member_list_error_zone.str())) { + SERVER_EVENT_SYNC_ADD("storage_ha", "before_get_config_version_and_transfer_scn"); + DEBUG_SYNC(BEFORE_GET_CONFIG_VERSION_AND_TRANSFER_SCN); + } + } +#endif MTL_SWITCH(tenant_id) { ObLSHandle ls_handle; ObLSService *ls_service = NULL;