add some debug info and sanity check
This commit is contained in:
@ -928,6 +928,13 @@ bool ObTxDesc::execute_commit_cb()
|
||||
executed = true;
|
||||
cb = commit_cb_;
|
||||
commit_cb_ = NULL;
|
||||
if (0 <= cb_tid_) {
|
||||
#ifdef ENABLE_DEBUG_LOG
|
||||
ob_abort();
|
||||
#endif
|
||||
TRANS_LOG(WARN, "unexpected error happen, cb_tid_ should smaller than 0",
|
||||
KP(this), K(tx_id), KP(cb_tid_));
|
||||
}
|
||||
ATOMIC_STORE_REL(&cb_tid_, GETTID());
|
||||
// NOTE: it is required add trace event before callback,
|
||||
// because txDesc may be released after callback called
|
||||
@ -937,7 +944,7 @@ bool ObTxDesc::execute_commit_cb()
|
||||
OB_ID(thread_id), GETTID());
|
||||
commit_cb_lock_.unlock();
|
||||
cb->callback(commit_out_);
|
||||
ATOMIC_STORE_REL(&cb_tid_, -1);
|
||||
ATOMIC_STORE_REL(&cb_tid_, -GETTID());
|
||||
} else {
|
||||
commit_cb_lock_.unlock();
|
||||
}
|
||||
|
||||
@ -192,7 +192,7 @@ int ObTransService::reuse_tx(ObTxDesc &tx)
|
||||
PAUSE();
|
||||
if (++spin_cnt > 2000) {
|
||||
TRANS_LOG(WARN, "blocking to wait tx referent quiescent cost too much time",
|
||||
"tx_id", orig_tx_id, KP(&tx), K(final_ref_cnt), K(spin_cnt), K(tx.get_ref()));
|
||||
"tx_id", orig_tx_id, KP(&tx), K(final_ref_cnt), K(spin_cnt), K(tx.get_ref()), K(cb_tid));
|
||||
tx.print_trace();
|
||||
usleep(2000000); // 2s
|
||||
} else if (spin_cnt > 200) {
|
||||
@ -200,6 +200,12 @@ int ObTransService::reuse_tx(ObTxDesc &tx)
|
||||
} else if (spin_cnt > 100) {
|
||||
usleep(200); // 200us
|
||||
}
|
||||
#ifdef ENABLE_DEBUG_LOG
|
||||
if (spin_cnt > 2015) {
|
||||
// at least wait 30s
|
||||
ob_abort();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
// it is safe to operate tx without lock when not shared
|
||||
uint32_t session_id = tx.sess_id_;
|
||||
|
||||
Reference in New Issue
Block a user