Quick release replay thread for 5188 error
This commit is contained in:
@ -270,27 +270,26 @@ int ObTabletCreateMdsHelper::check_create_new_tablets(const obrpc::ObBatchCreate
|
||||
if (OB_FAIL(ret)) {
|
||||
} else if (skip_check) {
|
||||
} else if (is_truncate) {
|
||||
bool need_wait = false;
|
||||
const int64_t timeout = THIS_WORKER.get_timeout_remain();
|
||||
// for leader, we should use timeout from ddl request
|
||||
// for follower, quick failure to release replay thread and other resource like lock
|
||||
const int64_t timeout = is_replay ? 0 : THIS_WORKER.get_timeout_remain();
|
||||
const int64_t start_time = ObTimeUtility::fast_current_time();
|
||||
do {
|
||||
if (need_wait) {
|
||||
ob_usleep(1000 * 1000L); // sleep 1s
|
||||
}
|
||||
need_wait = false;
|
||||
ret = check_create_new_tablets(arg.get_tablet_count(),
|
||||
is_replay ? ObTabletCreateThrottlingLevel::FREE : ObTabletCreateThrottlingLevel::SOFT);
|
||||
if (OB_SUCC(ret)) {
|
||||
// do nothing
|
||||
} else if (OB_UNLIKELY(OB_TOO_MANY_PARTITIONS_ERROR == ret)) {
|
||||
if (ObTimeUtility::fast_current_time() - start_time >= timeout) {
|
||||
ret = OB_TIMEOUT;
|
||||
LOG_WARN("too many partitions, retry timeout", K(ret));
|
||||
break;
|
||||
} else if (OB_FAIL(check_create_new_tablets(arg.get_tablet_count(),
|
||||
is_replay ? ObTabletCreateThrottlingLevel::FREE : ObTabletCreateThrottlingLevel::SOFT))) {
|
||||
if (OB_TOO_MANY_PARTITIONS_ERROR != ret) {
|
||||
LOG_WARN("fail to check create new tablets", K(ret));
|
||||
} else {
|
||||
need_wait = true;
|
||||
ob_usleep(1000 * 1000L); // sleep 1s
|
||||
}
|
||||
} else {
|
||||
LOG_WARN("fail to check create new tablets", K(ret));
|
||||
}
|
||||
} while (need_wait);
|
||||
} while (OB_TOO_MANY_PARTITIONS_ERROR == ret);
|
||||
} else if (OB_FAIL(check_create_new_tablets(arg.get_tablet_count(),
|
||||
is_replay ? ObTabletCreateThrottlingLevel::FREE : ObTabletCreateThrottlingLevel::STRICT))) {
|
||||
LOG_WARN("fail to create new tablets", K(ret));
|
||||
|
||||
Reference in New Issue
Block a user