[master] dump trans_info when dump for 4377
This commit is contained in:
@ -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;
|
||||
|
@ -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_;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user