set errno to OB_EAGAIN if replay get tablet interface returns OB_TIMEOUT

This commit is contained in:
hiddenbomb
2023-08-28 08:47:40 +00:00
committed by ob-robot
parent 760a2c49f6
commit cc7aa7132a
3 changed files with 32 additions and 13 deletions

View File

@ -128,13 +128,24 @@ int ObTabletReplayExecutor::replay_get_tablet_(
} else if (OB_ISNULL(ls = ls_handle.get_ls())) {
ret = OB_ERR_UNEXPECTED;
CLOG_LOG(WARN, "log stream should not be NULL", KR(ret), K(scn));
} else if (is_replay_update_tablet_status_()) {
} else {
const share::ObLSID &ls_id = ls->get_ls_id();
if (is_replay_update_tablet_status_()) {
if (OB_FAIL(ls->replay_get_tablet_no_check(tablet_id, scn, tablet_handle))) {
CLOG_LOG(WARN, "replay get table failed", KR(ret), "ls_id", ls->get_ls_id());
CLOG_LOG(WARN, "replay get table failed", KR(ret), K(ls_id), K(tablet_id));
}
} else if (OB_FAIL(ls->replay_get_tablet(tablet_id, scn, tablet_handle))) {
CLOG_LOG(WARN, "replay get table failed", KR(ret), "ls_id", ls->get_ls_id());
CLOG_LOG(WARN, "replay get table failed", KR(ret), K(ls_id), K(tablet_id));
}
if (OB_FAIL(ret)) {
if (OB_TIMEOUT == ret) {
ret = OB_EAGAIN;
CLOG_LOG(WARN, "retry get tablet for timeout error", KR(ret), K(ls_id), K(tablet_id));
}
}
}
return ret;
}

View File

@ -114,18 +114,18 @@ int ObMediumCompactionClogHandler::inner_replay(
LOG_WARN("fail to deserialize tablet id", K(ret), K(buffer_size), K(pos), K(tablet_id));
} else if (OB_FAIL(ls_->replay_get_tablet(tablet_id, scn, handle))) {
if (OB_OBSOLETE_CLOG_NEED_SKIP == ret) {
LOG_INFO("clog is obsolete, should skip replay", K(ret), K(tablet_id));
LOG_INFO("clog is obsolete, should skip replay", K(ret), K(tablet_id), K(scn));
ret = OB_SUCCESS;
} else if (OB_TIMEOUT == ret) {
ret = OB_EAGAIN;
LOG_INFO("retry get tablet for timeout error", K(ret), K(tablet_id), K(scn));
} else {
LOG_WARN("failed to get tablet", K(ret), K(tablet_id));
LOG_WARN("failed to get tablet", K(ret), K(tablet_id), K(scn));
}
} else if (OB_FAIL(handle.get_obj()->replay_medium_compaction_clog(scn, buffer, buffer_size, new_pos))) {
LOG_WARN("failed to replay medium compaction clog", K(ret), K(tablet_id), K(buffer_size), K(new_pos));
}
if (OB_TIMEOUT == ret) {
LOG_INFO("replace timeout errno", KR(ret), K(scn), K(tablet_id));
ret = OB_EAGAIN;
LOG_WARN("failed to replay medium compaction clog", K(ret), K(tablet_id), K(scn), K(buffer_size), K(new_pos));
}
return ret;
}

View File

@ -311,8 +311,16 @@ int ObIStorageClogRecorder::replay_get_tablet_handle(
if (OB_FAIL(MTL(ObLSService *)->get_ls(ls_id, ls_handle, ObLSGetMod::STORAGE_MOD))) {
LOG_WARN("failed to get log stream", K(ret), K(ls_id));
} else if (OB_FAIL(ls_handle.get_ls()->replay_get_tablet(tablet_id, scn, tablet_handle))) {
if (OB_OBSOLETE_CLOG_NEED_SKIP == ret) {
LOG_INFO("clog is obsolete, should skip replay", K(ret), K(ls_id), K(tablet_id), K(scn));
ret = OB_SUCCESS;
} else if (OB_TIMEOUT == ret) {
ret = OB_EAGAIN;
LOG_INFO("retry get tablet for timeout error", K(ret), K(ls_id), K(tablet_id), K(scn));
} else {
LOG_WARN("failed to get tablet", K(ret), K(ls_id), K(tablet_id), K(scn));
}
}
return ret;
}