fix ObTxLogCb::on_success core dump
This commit is contained in:
@ -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();
|
||||
|
||||
@ -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_;
|
||||
|
||||
@ -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<ObPartTransCtx *>(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<ObPartTransCtx *>(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_;
|
||||
|
||||
@ -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_;
|
||||
|
||||
Reference in New Issue
Block a user