From ce4c090e2e48e39dea4ff1f1efee284ec90a5dae Mon Sep 17 00:00:00 2001 From: obdev Date: Tue, 18 Jul 2023 13:47:59 +0000 Subject: [PATCH] fix ObTxLogCb::on_success core dump --- src/storage/tx/ob_trans_define.cpp | 11 +++++++++ src/storage/tx/ob_trans_define.h | 3 ++- src/storage/tx/ob_trans_submit_log_cb.cpp | 28 ++++++++--------------- src/storage/tx/ob_trans_submit_log_cb.h | 2 -- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/storage/tx/ob_trans_define.cpp b/src/storage/tx/ob_trans_define.cpp index f9dfb85a88..3562c1e5e6 100755 --- a/src/storage/tx/ob_trans_define.cpp +++ b/src/storage/tx/ob_trans_define.cpp @@ -866,6 +866,17 @@ void ObTxMDSRange::range_sync_failed(ObTxMDSCache &cache) cache.update_sync_failed_range(range_array_); } +int ObTxMDSRange::assign(const ObTxMDSRange &other) +{ + int ret = OB_SUCCESS; + if (OB_FAIL(range_array_.assign(other.range_array_))) { + TRANS_LOG(WARN, "assign range array failed", K(ret)); + } else { + tx_ctx_ = other.tx_ctx_; + } + return ret; +} + void ObTxMDSCache::reset() { // allocator_.reset(); diff --git a/src/storage/tx/ob_trans_define.h b/src/storage/tx/ob_trans_define.h index a089496a7b..864a74c451 100644 --- a/src/storage/tx/ob_trans_define.h +++ b/src/storage/tx/ob_trans_define.h @@ -1603,6 +1603,7 @@ public: int range_submitted(ObTxMDSCache &cache); void range_sync_failed(ObTxMDSCache &cache); + int assign(const ObTxMDSRange &other); int64_t count() const { return range_array_.count(); }; @@ -1612,7 +1613,7 @@ public: private: ObTxBufferNodeArray range_array_; - ObPartTransCtx * tx_ctx_; + ObPartTransCtx *tx_ctx_; // ObTxBufferNodeList *list_ptr_; // ObTxBufferNodeList::iterator start_iter_; diff --git a/src/storage/tx/ob_trans_submit_log_cb.cpp b/src/storage/tx/ob_trans_submit_log_cb.cpp index 3d78793947..79e202cd5c 100644 --- a/src/storage/tx/ob_trans_submit_log_cb.cpp +++ b/src/storage/tx/ob_trans_submit_log_cb.cpp @@ -134,42 +134,31 @@ bool ObTxLogCb::is_valid() const return cb_arg_array_.count() > 0; } -void ObTxLogCb::check_warn_() const -{ - const int64_t used_time = ObClockGenerator::getRealClock() - get_submit_ts(); - if (used_time >= ObServerConfig::get_instance().clog_sync_time_warn_threshold) { - TRANS_LOG_RET(WARN, OB_ERR_TOO_MUCH_TIME, "transaction log sync use too much time", K(*this), K(used_time)); - } -} - int ObTxLogCb::on_success() { int ret = OB_SUCCESS; const ObTransID tx_id = trans_id_; - #ifndef NDEBUG - TRANS_LOG(INFO, "before ObTxLogCb::on_success", K(*this)); - #endif if (!is_inited_) { ret = OB_NOT_INIT; TRANS_LOG(WARN, "ObTxLogCb not inited", K(ret)); } else if (NULL == ctx_) { ret = OB_ERR_UNEXPECTED; - TRANS_LOG(ERROR, "ctx is null", K(ret), K(trans_id_), KP(ctx_)); + TRANS_LOG(ERROR, "ctx is null", K(ret), K(tx_id), KP(ctx_)); } else { // make sure set log type to log callback successfully ctx_->test_lock(this); if (cb_arg_array_.count() == 0) { ret = OB_ERR_UNEXPECTED; - TRANS_LOG(ERROR, "cb arg array is empty", K(ret), K(trans_id_), KP(ctx_)); + TRANS_LOG(ERROR, "cb arg array is empty", K(ret), K(tx_id), KP(ctx_)); ctx_->print_trace_log(); } else { - TRANS_LOG(DEBUG, "get last log type success", K(trans_id_)); + TRANS_LOG(DEBUG, "get last log type success", K(tx_id)); // TODO. iterate all log type ObPartTransCtx *part_ctx = static_cast(ctx_); if (OB_FAIL(part_ctx->on_success(this))) { - TRANS_LOG(WARN, "sync log success callback error", K(ret), K(trans_id_)); + TRANS_LOG(WARN, "sync log success callback error", K(ret), K(tx_id)); } } } @@ -194,12 +183,12 @@ int ObTxLogCb::on_failure() ret = OB_ERR_UNEXPECTED; TRANS_LOG(ERROR, "cb arg array is empty", K(ret)); } else { - TRANS_LOG(DEBUG, "get last log type success", K(trans_id_)); + TRANS_LOG(DEBUG, "get last log type success", K(tx_id)); // TODO. iterate all log type ObPartTransCtx *part_ctx = static_cast(ctx_); if (OB_FAIL(part_ctx->on_failure(this))) { - TRANS_LOG(WARN, "sync log success callback error", KR(ret), K(trans_id_)); + TRANS_LOG(WARN, "sync log success callback error", KR(ret), K(tx_id)); } } } @@ -221,8 +210,9 @@ int ObTxLogCb::copy(const ObTxLogCb &other) is_callbacked_ = other.is_callbacked_; // without txdata - mds_range_ = other.mds_range_; - if (OB_FAIL(cb_arg_array_.assign(other.cb_arg_array_))) { + if (OB_FAIL(mds_range_.assign(other.mds_range_))) { + TRANS_LOG(WARN, "assign mds range failed", K(ret), KPC(this)); + } else if (OB_FAIL(cb_arg_array_.assign(other.cb_arg_array_))) { TRANS_LOG(WARN, "assign cb_arg_array_ failed", K(ret), KPC(this)); } first_part_scn_ = other.first_part_scn_; diff --git a/src/storage/tx/ob_trans_submit_log_cb.h b/src/storage/tx/ob_trans_submit_log_cb.h index ca1fa8605f..5af1b231eb 100644 --- a/src/storage/tx/ob_trans_submit_log_cb.h +++ b/src/storage/tx/ob_trans_submit_log_cb.h @@ -125,8 +125,6 @@ public: K(first_part_scn_)); private: DISALLOW_COPY_AND_ASSIGN(ObTxLogCb); -private: - void check_warn_() const; private: bool is_inited_; share::ObLSID ls_id_;