add case to test one of the batch async rpc hung

This commit is contained in:
oceanoverflow
2023-11-16 06:11:10 +00:00
committed by ob-robot
parent eb8be4a25b
commit b6d3ba3007
4 changed files with 27 additions and 6 deletions

View File

@ -559,6 +559,7 @@ class ObString;
ACT(BEFORE_RELOAD_UNIT,)\ ACT(BEFORE_RELOAD_UNIT,)\
ACT(BEFORE_PROCESS_EVENT_TASK,)\ ACT(BEFORE_PROCESS_EVENT_TASK,)\
ACT(BEFORE_CHECK_LS_TRANSFER_SCN_FOR_STANDBY,)\ ACT(BEFORE_CHECK_LS_TRANSFER_SCN_FOR_STANDBY,)\
ACT(BEFORE_GET_CONFIG_VERSION_AND_TRANSFER_SCN,)\
ACT(MAX_DEBUG_SYNC_POINT,) ACT(MAX_DEBUG_SYNC_POINT,)
DECLARE_ENUM(ObDebugSyncPoint, debug_sync_point, OB_DEBUG_SYNC_POINT_DEF); DECLARE_ENUM(ObDebugSyncPoint, debug_sync_point, OB_DEBUG_SYNC_POINT_DEF);

View File

@ -1743,3 +1743,5 @@ DEF_BOOL(_enable_range_extraction_for_not_in, OB_TENANT_PARAMETER, "True",
// ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); // 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", 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)); 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));

View File

@ -411,11 +411,11 @@ int ObLSMemberListService::check_ls_transfer_scn_validity_for_standby_(palf::Log
share::SCN transfer_scn; share::SCN transfer_scn;
palf::LogConfigVersion config_version; palf::LogConfigVersion config_version;
bool need_get_config_version = (addr == leader_addr); bool need_get_config_version = (addr == leader_addr);
if (OB_FAIL(get_config_version_and_transfer_scn_(batch_proxy, if (OB_TMP_FAIL(get_config_version_and_transfer_scn_(batch_proxy,
addr, addr,
need_get_config_version, need_get_config_version,
ls_->get_tenant_id(), ls_->get_tenant_id(),
ls_->get_ls_id()))) { ls_->get_ls_id()))) {
STORAGE_LOG(WARN, "failed to get config version and transfer scn", K(ret), K(addr)); 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_config_version,
leader_transfer_scn))) { leader_transfer_scn))) {
STORAGE_LOG(WARN, "failed to process result from async rpc", KR(ret), KR(tmp_ret)); 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)) { if (OB_SUCC(ret)) {
// standby check transfer scn need reach majority // standby check transfer scn need reach majority
@ -475,8 +477,16 @@ int ObLSMemberListService::process_result_from_async_rpc_(
int tmp_ret = OB_SUCCESS; int tmp_ret = OB_SUCCESS;
ARRAY_FOREACH_X(proxy.get_results(), idx, cnt, OB_SUCC(ret)) { ARRAY_FOREACH_X(proxy.get_results(), idx, cnt, OB_SUCC(ret)) {
const ObStorageChangeMemberRes *response = proxy.get_results().at(idx); const ObStorageChangeMemberRes *response = proxy.get_results().at(idx);
const int res_ret = return_code_array.at(idx);
bool check_pass = false; 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; tmp_ret = OB_ERR_UNEXPECTED;
STORAGE_LOG(WARN, "hb_response is null", KR(ret), KR(tmp_ret)); 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))) { } else if (for_standby && OB_FAIL(check_ls_transfer_scn_(response->transfer_scn_, check_pass))) {

View File

@ -2895,6 +2895,14 @@ int ObStorageGetConfigVersionAndTransferScnDelegate::process()
const uint64_t tenant_id = arg_.tenant_id_; const uint64_t tenant_id = arg_.tenant_id_;
const share::ObLSID &ls_id = arg_.ls_id_; const share::ObLSID &ls_id = arg_.ls_id_;
const bool need_get_config_version = arg_.need_get_config_version_; 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) { MTL_SWITCH(tenant_id) {
ObLSHandle ls_handle; ObLSHandle ls_handle;
ObLSService *ls_service = NULL; ObLSService *ls_service = NULL;