Fix async_refresh_schema() problem

This commit is contained in:
tino247
2023-09-13 04:13:42 +00:00
committed by ob-robot
parent d8e1787d1b
commit b8b81a070c

View File

@ -2375,15 +2375,15 @@ int ObMultiVersionSchemaService::async_refresh_schema(
bool check_formal = ObSchemaService::is_formal_version(schema_version); bool check_formal = ObSchemaService::is_formal_version(schema_version);
if (!check_inner_stat()) { if (!check_inner_stat()) {
ret = OB_INNER_STAT_ERROR; ret = OB_INNER_STAT_ERROR;
LOG_WARN("inner stat error", K(ret)); LOG_WARN("inner stat error", KR(ret));
} else if (OB_INVALID_TENANT_ID == tenant_id } else if (OB_INVALID_TENANT_ID == tenant_id
|| OB_INVALID_ID == tenant_id) { || OB_INVALID_ID == tenant_id) {
ret = OB_INVALID_ARGUMENT; ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid arg", K(ret), K(tenant_id), K(schema_version)); LOG_WARN("invalid arg", KR(ret), K(tenant_id), K(schema_version));
} else if (OB_FAIL(get_tenant_refreshed_schema_version( } else if (OB_FAIL(get_tenant_refreshed_schema_version(
tenant_id, local_schema_version))) { tenant_id, local_schema_version))) {
LOG_WARN("fail to get tenant refreshed schema version", LOG_WARN("fail to get tenant refreshed schema version",
K(ret), K(tenant_id), K(schema_version)); KR(ret), K(tenant_id), K(schema_version));
} else if (local_schema_version >= schema_version } else if (local_schema_version >= schema_version
&& (!check_formal || ObSchemaService::is_formal_version(local_schema_version))) { && (!check_formal || ObSchemaService::is_formal_version(local_schema_version))) {
// do nothing // do nothing
@ -2396,23 +2396,30 @@ int ObMultiVersionSchemaService::async_refresh_schema(
if (THIS_WORKER.is_timeout() if (THIS_WORKER.is_timeout()
|| (INT64_MAX == THIS_WORKER.get_timeout_ts() && retry_cnt >= MAX_RETRY_CNT)) { || (INT64_MAX == THIS_WORKER.get_timeout_ts() && retry_cnt >= MAX_RETRY_CNT)) {
ret = OB_TIMEOUT; ret = OB_TIMEOUT;
LOG_WARN("already timeout", K(ret), K(tenant_id), K(schema_version)); LOG_WARN("already timeout", KR(ret), K(tenant_id), K(schema_version));
} else if (OB_FAIL(get_tenant_refreshed_schema_version( } else if (OB_FAIL(get_tenant_refreshed_schema_version(
tenant_id, local_schema_version))) { tenant_id, local_schema_version))) {
LOG_WARN("fail to get tenant refreshed schema version", LOG_WARN("fail to get tenant refreshed schema version",
K(ret), K(tenant_id), K(schema_version)); KR(ret), K(tenant_id), K(schema_version));
} else if (local_schema_version >= schema_version } else if (local_schema_version >= schema_version
&& (!check_formal || ObSchemaService::is_formal_version(local_schema_version))) { && (!check_formal || ObSchemaService::is_formal_version(local_schema_version))) {
// success // success
break; break;
} else { } else {
if (0 == retry_cnt % SUBMIT_TASK_FREQUENCE) { if (0 == retry_cnt % SUBMIT_TASK_FREQUENCE) {
{
bool is_dropped = false; bool is_dropped = false;
if (OB_FAIL(check_if_tenant_has_been_dropped(tenant_id, is_dropped))) { ObSchemaGetterGuard guard;
if (OB_FAIL(get_tenant_schema_guard(OB_SYS_TENANT_ID, guard))) {
LOG_WARN("fail to get schema guard", KR(ret));
} else if (OB_FAIL(guard.check_if_tenant_has_been_dropped(tenant_id, is_dropped))) {
LOG_WARN("fail to check if tenant has been dropped", KR(ret), K(tenant_id)); LOG_WARN("fail to check if tenant has been dropped", KR(ret), K(tenant_id));
} else if (is_dropped) { } else if (is_dropped) {
ret = OB_TENANT_HAS_BEEN_DROPPED; ret = OB_TENANT_HAS_BEEN_DROPPED;
LOG_WARN("tenant has been dropped", KR(ret), K(tenant_id)); LOG_WARN("tenant has been dropped", KR(ret), K(tenant_id));
}
}
if (OB_FAIL(ret)) {
} else if (OB_ISNULL(GCTX.ob_service_)) { } else if (OB_ISNULL(GCTX.ob_service_)) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("observice is null", K(ret)); LOG_WARN("observice is null", K(ret));
@ -2422,7 +2429,7 @@ int ObMultiVersionSchemaService::async_refresh_schema(
ret = OB_SUCCESS; ret = OB_SUCCESS;
} else { } else {
LOG_WARN("fail to submit async refresh schema task", LOG_WARN("fail to submit async refresh schema task",
K(ret), K(tenant_id), K(schema_version)); KR(ret), K(tenant_id), K(schema_version));
} }
} }
} }