[master] fix commit retry interval

This commit is contained in:
chinaxing
2023-01-28 19:35:06 +08:00
committed by ob-robot
parent bec4c86e69
commit 1676fe298a
3 changed files with 10 additions and 6 deletions

View File

@ -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 {

View File

@ -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,

View File

@ -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_;