[master] fix commit retry interval
This commit is contained in:
@ -258,16 +258,19 @@ int ObTransService::do_commit_tx_slowpath_(ObTxDesc &tx, const int64_t expire_ts
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTransService::register_commit_retry_task_(ObTxDesc &tx, const int64_t max_delay)
|
||||
int ObTransService::register_commit_retry_task_(ObTxDesc &tx, int64_t max_delay)
|
||||
{
|
||||
const int64_t MIN_DELAY = 50 * 1000;// 50ms
|
||||
int ret = OB_SUCCESS;
|
||||
int64_t delay = ObTransCtx::MAX_TRANS_2PC_TIMEOUT_US;
|
||||
max_delay = max_delay == INT64_MAX ? ObTransCtx::MAX_TRANS_2PC_TIMEOUT_US : max_delay;
|
||||
int64_t now = ObClockGenerator::getClock();
|
||||
int64_t expire_after = std::min(tx.expire_ts_ - now, tx.commit_expire_ts_ - now);
|
||||
if (expire_after > 0) { // KEEP delay always > 0
|
||||
delay = std::min(delay, expire_after);
|
||||
int64_t delay = std::min(max_delay, tx.commit_task_.get_delay() * 2);
|
||||
if (expire_after > 0) { delay = std::min(delay, expire_after); }
|
||||
delay = std::max(delay, MIN_DELAY);
|
||||
if (delay != MIN_DELAY) {
|
||||
delay = ObRandom::rand(MIN_DELAY, delay);
|
||||
}
|
||||
delay = std::min(delay, max_delay);
|
||||
if (OB_FAIL(tx_desc_mgr_.acquire_tx_ref(tx.tx_id_))) {
|
||||
TRANS_LOG(WARN, "acquire tx ref fail", KR(ret), K(tx));
|
||||
} else {
|
||||
|
@ -247,7 +247,7 @@ int do_commit_tx_(ObTxDesc &tx,
|
||||
ObITxCallback &cb,
|
||||
share::SCN &commit_version);
|
||||
int do_commit_tx_slowpath_(ObTxDesc &tx, const int64_t expire_ts);
|
||||
int register_commit_retry_task_(ObTxDesc &tx, const int64_t max_delay = INT64_MAX);
|
||||
int register_commit_retry_task_(ObTxDesc &tx, int64_t max_delay = INT64_MAX);
|
||||
int unregister_commit_retry_task_(ObTxDesc &tx);
|
||||
int handle_tx_commit_result_(ObTxDesc &tx,
|
||||
const int result,
|
||||
|
@ -50,6 +50,7 @@ public:
|
||||
void set_running(const bool is_running) { is_running_ = is_running; }
|
||||
bool is_running() const { return is_running_; }
|
||||
void set_delay(const int64_t delay) { delay_ = delay; }
|
||||
int64_t get_delay() const { return delay_; }
|
||||
protected:
|
||||
bool is_registered_;
|
||||
bool is_running_;
|
||||
|
Reference in New Issue
Block a user