[master] dump trans_info when dump for 4377

This commit is contained in:
chinaxing
2024-02-23 08:45:32 +00:00
committed by ob-robot
parent 67fb52dfc5
commit 99b6e47bf9
5 changed files with 23 additions and 9 deletions

View File

@ -44,6 +44,7 @@ ObTableIterParam::ObTableIterParam()
output_sel_mask_(nullptr),
is_multi_version_minor_merge_(false),
need_scn_(false),
need_trans_info_(false),
is_same_schema_column_(false),
vectorized_enabled_(false),
has_virtual_columns_(false),
@ -73,6 +74,7 @@ void ObTableIterParam::reset()
group_by_cols_project_ = NULL;
is_multi_version_minor_merge_ = false;
need_scn_ = false;
need_trans_info_ = false;
is_same_schema_column_ = false;
pd_storage_flag_ = 0;
pushdown_filter_ = nullptr;
@ -123,7 +125,8 @@ bool ObTableIterParam::enable_fuse_row_cache(const ObQueryFlag &query_flag) cons
bool ObTableIterParam::need_trans_info() const
{
bool bret = false;
if (OB_NOT_NULL(op_) && OB_NOT_NULL(op_->expr_spec_.trans_info_expr_)) {
if (need_trans_info_ ||
(OB_NOT_NULL(op_) && OB_NOT_NULL(op_->expr_spec_.trans_info_expr_))) {
bret = true;
}
return bret;

View File

@ -177,6 +177,7 @@ public:
// only used in ObMemTable
bool is_multi_version_minor_merge_;
bool need_scn_;
bool need_trans_info_;
bool is_same_schema_column_;
bool vectorized_enabled_;
bool has_virtual_columns_;

View File

@ -511,6 +511,9 @@ DEF_TO_STRING(ObDatumRow)
J_ARRAY_END();
}
}
if (trans_info_) {
databuff_printf(buf, buf_len, pos, ",trans_info[version, scn, txid, seq_no(branch_id, seq)]:%s", trans_info_);
}
J_OBJ_END();
return pos;
}

View File

@ -28,7 +28,7 @@ void build_trans_stat_datum(const storage::ObTableIterParam *param,
K(trans_stat_row), K(param), K(param->op_), K(row.trans_info_),
K(lbt()));
char *trans_stat_ptr = row.trans_info_;
if (OB_NOT_NULL(param->op_)
if (param->need_trans_info()
&& OB_NOT_NULL(trans_stat_ptr)) {
trans_stat_ptr[0] = '\0';
concurrency_control::build_trans_stat_(trans_stat_row,
@ -36,8 +36,7 @@ void build_trans_stat_datum(const storage::ObTableIterParam *param,
trans_stat_ptr);
TRANS_LOG(DEBUG, "memtable generate trans_info",
K(ObString(strlen(trans_stat_ptr), trans_stat_ptr)),
K(param->op_->is_vectorized()), K(trans_stat_row), K(param),
K(param->op_->eval_ctx_));
K(trans_stat_row), K(param));
}
}
@ -50,11 +49,12 @@ void build_trans_stat_(const ObTransStatRow trans_stat_row,
if (OB_FAIL(databuff_printf(trans_stat_ptr,
trans_stat_len,
pos,
"[%ld, %ld, %ld, %ld]",
"[%ld, %ld, %ld, (%d,%ld)]",
trans_stat_row.trans_version_.get_val_for_tx(),
trans_stat_row.scn_.get_val_for_tx(),
trans_stat_row.trans_id_.get_id(),
trans_stat_row.seq_no_.cast_to_int()))) {
trans_stat_row.seq_no_.get_branch(),
trans_stat_row.seq_no_.get_seq()))) {
TRANS_LOG(WARN, "failed to printf", K(ret), K(pos), K(trans_stat_len), K(trans_stat_row));
trans_stat_ptr[0] = '\0';
} else {

View File

@ -3714,13 +3714,20 @@ int ObLSTabletService::check_old_row_legitimacy(
const common::ObNewRow &old_row)
{
int ret = OB_SUCCESS;
// usage:
// alter system set_tp tp_no=9,match=3221487629,error_code=4377,frequency=1
// where session_id is 3221487629
const int inject_err = OB_E(EventTable::EN_9, run_ctx.store_ctx_.mvcc_acc_ctx_.tx_desc_->get_session_id()) OB_SUCCESS;
if (OB_ERR_DEFENSIVE_CHECK == inject_err) {
ret = OB_ERR_DEFENSIVE_CHECK;
}
ObRelativeTable &data_table = run_ctx.relative_table_;
ObStoreRowkey rowkey;
bool need_check = false;
bool is_udf = false;
rowkey.assign(old_row.cells_, data_table.get_rowkey_column_num());
if (OB_UNLIKELY(rowkey.get_obj_cnt() > old_row.count_) || OB_ISNULL(run_ctx.column_ids_)) {
if (OB_FAIL(ret)) {
} else if (OB_UNLIKELY(rowkey.get_obj_cnt() > old_row.count_) || OB_ISNULL(run_ctx.column_ids_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("old row is invalid", K(ret), K(old_row), K(rowkey.get_obj_cnt()), KP(run_ctx.column_ids_));
} else if (OB_FAIL(need_check_old_row_legitimacy(run_ctx, need_check, is_udf))) {
@ -4665,7 +4672,6 @@ int ObLSTabletService::process_old_row(
ObStoreCtx &store_ctx = run_ctx.store_ctx_;
ObRelativeTable &relative_table = run_ctx.relative_table_;
bool is_delete_total_quantity_log = run_ctx.dml_param_.is_total_quantity_log_;
if (OB_UNLIKELY(!relative_table.is_valid())) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid relative tables", K(ret), K(relative_table));
@ -5619,6 +5625,7 @@ void ObLSTabletService::dump_diag_info_for_old_row_loss(
access_param.iter_param_.read_info_ = read_info;
access_param.iter_param_.out_cols_project_ = &out_col_pros;
access_param.iter_param_.set_tablet_handle(data_table.get_tablet_handle());
access_param.iter_param_.need_trans_info_ = true;
ObStoreRowIterator *getter = nullptr;
ObITable *table = nullptr;