[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;
|
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;
|
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 now = ObClockGenerator::getClock();
|
||||||
int64_t expire_after = std::min(tx.expire_ts_ - now, tx.commit_expire_ts_ - now);
|
int64_t expire_after = std::min(tx.expire_ts_ - now, tx.commit_expire_ts_ - now);
|
||||||
if (expire_after > 0) { // KEEP delay always > 0
|
int64_t delay = std::min(max_delay, tx.commit_task_.get_delay() * 2);
|
||||||
delay = std::min(delay, expire_after);
|
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_))) {
|
if (OB_FAIL(tx_desc_mgr_.acquire_tx_ref(tx.tx_id_))) {
|
||||||
TRANS_LOG(WARN, "acquire tx ref fail", KR(ret), K(tx));
|
TRANS_LOG(WARN, "acquire tx ref fail", KR(ret), K(tx));
|
||||||
} else {
|
} else {
|
||||||
|
@ -247,7 +247,7 @@ int do_commit_tx_(ObTxDesc &tx,
|
|||||||
ObITxCallback &cb,
|
ObITxCallback &cb,
|
||||||
share::SCN &commit_version);
|
share::SCN &commit_version);
|
||||||
int do_commit_tx_slowpath_(ObTxDesc &tx, const int64_t expire_ts);
|
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 unregister_commit_retry_task_(ObTxDesc &tx);
|
||||||
int handle_tx_commit_result_(ObTxDesc &tx,
|
int handle_tx_commit_result_(ObTxDesc &tx,
|
||||||
const int result,
|
const int result,
|
||||||
|
@ -50,6 +50,7 @@ public:
|
|||||||
void set_running(const bool is_running) { is_running_ = is_running; }
|
void set_running(const bool is_running) { is_running_ = is_running; }
|
||||||
bool is_running() const { return is_running_; }
|
bool is_running() const { return is_running_; }
|
||||||
void set_delay(const int64_t delay) { delay_ = delay; }
|
void set_delay(const int64_t delay) { delay_ = delay; }
|
||||||
|
int64_t get_delay() const { return delay_; }
|
||||||
protected:
|
protected:
|
||||||
bool is_registered_;
|
bool is_registered_;
|
||||||
bool is_running_;
|
bool is_running_;
|
||||||
|
Reference in New Issue
Block a user