add case to test one of the batch async rpc hung
This commit is contained in:
@ -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);
|
||||||
|
|||||||
@ -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));
|
||||||
|
|||||||
@ -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))) {
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user