Fix show create table hang when global service is not leader

This commit is contained in:
hezuojiao
2023-03-02 18:46:35 +00:00
committed by ob-robot
parent f0c194c308
commit b382879cb3

View File

@ -258,9 +258,6 @@ int ObGlobalAutoIncService::handle_curr_autoinc_request(const ObGAISAutoIncKeyAr
LOG_WARN("invalid argument", K(ret), K(request)); LOG_WARN("invalid argument", K(ret), K(request));
} else if (OB_FAIL(check_leader_(key.tenant_id_, is_leader))) { } else if (OB_FAIL(check_leader_(key.tenant_id_, is_leader))) {
LOG_WARN("check leader failed", K(ret), K(request.sender_), K(self_)); LOG_WARN("check leader failed", K(ret), K(request.sender_), K(self_));
} else if (OB_UNLIKELY(!is_leader)) {
ret = OB_NOT_MASTER;
LOG_WARN("gais service is not leader", K(ret));
} else if (OB_FAIL(mutex.lock())) { } else if (OB_FAIL(mutex.lock())) {
LOG_WARN("fail to get lock", K(ret)); LOG_WARN("fail to get lock", K(ret));
} else { } else {
@ -270,11 +267,12 @@ int ObGlobalAutoIncService::handle_curr_autoinc_request(const ObGAISAutoIncKeyAr
if (OB_UNLIKELY(OB_SUCCESS != err && OB_HASH_NOT_EXIST != err)) { if (OB_UNLIKELY(OB_SUCCESS != err && OB_HASH_NOT_EXIST != err)) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("failed to get seq value", K(ret), K(key)); LOG_WARN("failed to get seq value", K(ret), K(key));
} else if (OB_LIKELY(cache_node.is_valid())) { } else if (is_leader && OB_LIKELY(cache_node.is_valid())) {
// get autoinc values from cache // get autoinc values from cache
sequence_value = cache_node.sequence_value_; sequence_value = cache_node.sequence_value_;
sync_value = cache_node.sync_value_; sync_value = cache_node.sync_value_;
// hash not exist or cache node is non-valid, read value from inner table // hash not exist, cache node is non-valid or service is not leader,
// read value from inner table
} else if (OB_FAIL(read_value_from_inner_table_(key, sequence_value, sync_value))) { } else if (OB_FAIL(read_value_from_inner_table_(key, sequence_value, sync_value))) {
LOG_WARN("fail to read value from inner table", K(ret)); LOG_WARN("fail to read value from inner table", K(ret));
} }