From bd6cf4e99db59725b159b3a44b14c02ef41df1c6 Mon Sep 17 00:00:00 2001 From: obdev Date: Mon, 3 Apr 2023 22:12:53 +0000 Subject: [PATCH] Add adjustments to virtual table | views about trans scheduler --- .../ob_all_virtual_tx_scheduler_stat.cpp | 83 ++++++++++---- .../ob_all_virtual_tx_scheduler_stat.h | 10 +- .../ob_inner_table_schema.11001_11050.cpp | 104 ++++++++++++++---- .../ob_inner_table_schema.15251_15300.cpp | 96 +++++++++++++--- .../ob_inner_table_schema.21351_21400.cpp | 2 +- .../ob_inner_table_schema.28151_28200.cpp | 2 +- .../inner_table/ob_inner_table_schema_def.py | 46 ++++---- src/storage/tx/ob_trans_define_v4.cpp | 2 + src/storage/tx/ob_trans_functor.h | 7 +- src/storage/tx/ob_tx_stat.cpp | 14 ++- src/storage/tx/ob_tx_stat.h | 11 +- 11 files changed, 280 insertions(+), 97 deletions(-) diff --git a/src/observer/virtual_table/ob_all_virtual_tx_scheduler_stat.cpp b/src/observer/virtual_table/ob_all_virtual_tx_scheduler_stat.cpp index f5446d28fa..75768b1a20 100644 --- a/src/observer/virtual_table/ob_all_virtual_tx_scheduler_stat.cpp +++ b/src/observer/virtual_table/ob_all_virtual_tx_scheduler_stat.cpp @@ -23,10 +23,7 @@ namespace observer ObGVTxSchedulerStat::ObGVTxSchedulerStat() : ObVirtualTableScannerIterator(), - ip_buffer_(), - XA_buffer_(), - parts_buffer_(), - savepoints_buffer_(), + xid_(), tx_scheduler_stat_iter_() { } @@ -41,9 +38,10 @@ void ObGVTxSchedulerStat::reset() // release tenant resources first omt::ObMultiTenantOperator::reset(); ip_buffer_[0] = '\0'; - XA_buffer_[0] = '\0'; parts_buffer_[0] = '\0'; + tx_desc_addr_buffer_[0] = '\0'; savepoints_buffer_[0] = '\0'; + xid_.reset(); ObVirtualTableScannerIterator::reset(); } @@ -101,6 +99,7 @@ int ObGVTxSchedulerStat::process_curr_tenant(common::ObNewRow *&row) } } else { const int64_t col_count = output_column_ids_.count(); + xid_ = tx_scheduler_stat.xid_; for (int64_t i = 0; OB_SUCC(ret) && i < col_count; ++i) { uint64_t col_id = output_column_ids_.at(i); switch (col_id) { @@ -127,16 +126,6 @@ int ObGVTxSchedulerStat::process_curr_tenant(common::ObNewRow *&row) case CLUSTER_ID: cur_row_.cells_[i].set_int(tx_scheduler_stat.cluster_id_); break; - case XA_TX_ID: - if (!tx_scheduler_stat.xid_.empty()) { - (void)tx_scheduler_stat.xid_.to_string(XA_buffer_, OB_MAX_BUFFER_SIZE); - cur_row_.cells_[i].set_varchar(XA_buffer_); - cur_row_.cells_[i].set_default_collation_type(); - } else { - cur_row_.cells_[i].set_varchar(ObString("NULL")); - cur_row_.cells_[i].set_default_collation_type(); - } - break; case COORDINATOR: cur_row_.cells_[i].set_int(tx_scheduler_stat.coord_id_.id()); break; @@ -146,15 +135,18 @@ int ObGVTxSchedulerStat::process_curr_tenant(common::ObNewRow *&row) cur_row_.cells_[i].set_varchar(parts_buffer_); cur_row_.cells_[i].set_default_collation_type(); } else { - cur_row_.cells_[i].set_varchar(ObString("NULL")); - cur_row_.cells_[i].set_default_collation_type(); + cur_row_.cells_[i].reset(); } break; case ISOLATION_LEVEL: cur_row_.cells_[i].set_int((int)tx_scheduler_stat.isolation_); break; case SNAPSHOT_VERSION: - cur_row_.cells_[i].set_int(tx_scheduler_stat.snapshot_version_); + if (tx_scheduler_stat.snapshot_version_.get_val_for_inner_table_field() != OB_INVALID_SCN_VAL) { + cur_row_.cells_[i].set_uint64(tx_scheduler_stat.snapshot_version_.get_val_for_inner_table_field()); + } else { + cur_row_.cells_[i].reset(); + } break; case ACCESS_MODE: cur_row_.cells_[i].set_int((int)tx_scheduler_stat.access_mode_); @@ -166,22 +158,37 @@ int ObGVTxSchedulerStat::process_curr_tenant(common::ObNewRow *&row) cur_row_.cells_[i].set_int(tx_scheduler_stat.flag_); break; case ACTIVE_TS: - cur_row_.cells_[i].set_timestamp(tx_scheduler_stat.active_ts_); + if (is_valid_timestamp_(tx_scheduler_stat.active_ts_)) { + cur_row_.cells_[i].set_timestamp(tx_scheduler_stat.active_ts_); + } else { + cur_row_.cells_[i].reset(); + } break; case EXPIRE_TS: - cur_row_.cells_[i].set_timestamp(tx_scheduler_stat.expire_ts_); + if (is_valid_timestamp_(tx_scheduler_stat.expire_ts_)) { + cur_row_.cells_[i].set_timestamp(tx_scheduler_stat.expire_ts_); + } else { + cur_row_.cells_[i].reset(); + } break; case TIMEOUT_US: cur_row_.cells_[i].set_int(tx_scheduler_stat.timeout_us_); break; + case REF_CNT: + cur_row_.cells_[i].set_int(tx_scheduler_stat.ref_cnt_); + break; + case TX_DESC_ADDR: + tx_desc_addr_buffer_[0] = 0; + snprintf(tx_desc_addr_buffer_, 18, "0x%lx", (uint64_t)tx_scheduler_stat.tx_desc_addr_); + cur_row_.cells_[i].set_varchar(tx_desc_addr_buffer_); + break; case SAVEPOINTS: if (0 < tx_scheduler_stat.savepoints_.count()) { (void)tx_scheduler_stat.savepoints_.to_string(savepoints_buffer_, OB_MAX_BUFFER_SIZE); cur_row_.cells_[i].set_varchar(savepoints_buffer_); cur_row_.cells_[i].set_default_collation_type(); } else { - cur_row_.cells_[i].set_varchar(ObString("NULL")); - cur_row_.cells_[i].set_default_collation_type(); + cur_row_.cells_[i].reset(); } break; case SAVEPOINTS_TOTAL_CNT: @@ -193,6 +200,29 @@ int ObGVTxSchedulerStat::process_curr_tenant(common::ObNewRow *&row) case CAN_EARLY_LOCK_RELEASE: cur_row_.cells_[i].set_bool(tx_scheduler_stat.can_elr_); break; + case GTRID: + if (!xid_.empty()) { + cur_row_.cells_[i].set_varchar(xid_.get_gtrid_str()); + cur_row_.cells_[i].set_default_collation_type(); + } else { + cur_row_.cells_[i].reset(); + } + break; + case BQUAL: + if (!xid_.empty()) { + cur_row_.cells_[i].set_varchar(xid_.get_bqual_str()); + cur_row_.cells_[i].set_default_collation_type(); + } else { + cur_row_.cells_[i].reset(); + } + break; + case FORMAT_ID: + if (!xid_.empty()) { + cur_row_.cells_[i].set_int(xid_.get_format_id()); + } else { + cur_row_.cells_[i].set_int(-1); + } + break; default: ret = OB_ERR_UNEXPECTED; SERVER_LOG(WARN, "invalid coloum_id", KR(ret), K(col_id)); @@ -207,5 +237,14 @@ int ObGVTxSchedulerStat::process_curr_tenant(common::ObNewRow *&row) return ret; } +bool ObGVTxSchedulerStat::is_valid_timestamp_(const int64_t timestamp) const +{ + bool ret_bool = true; + if (INT64_MAX == timestamp || 0 > timestamp) { + ret_bool = false; + } + return ret_bool; +} + } } \ No newline at end of file diff --git a/src/observer/virtual_table/ob_all_virtual_tx_scheduler_stat.h b/src/observer/virtual_table/ob_all_virtual_tx_scheduler_stat.h index a64a08be99..266f060e32 100644 --- a/src/observer/virtual_table/ob_all_virtual_tx_scheduler_stat.h +++ b/src/observer/virtual_table/ob_all_virtual_tx_scheduler_stat.h @@ -32,6 +32,7 @@ private: virtual int process_curr_tenant(common::ObNewRow *&row) override; virtual void release_last_tenant() override; int get_next_tx_info_(transaction::ObTxSchedulerStat &tx_scheduler_stat); + bool is_valid_timestamp_(const int64_t timestamp) const; private: enum @@ -43,7 +44,6 @@ private: TX_ID, STATE, CLUSTER_ID, - XA_TX_ID, COORDINATOR, PARTICIPANTS, ISOLATION_LEVEL, @@ -54,16 +54,22 @@ private: ACTIVE_TS, EXPIRE_TS, TIMEOUT_US, + REF_CNT, + TX_DESC_ADDR, SAVEPOINTS, SAVEPOINTS_TOTAL_CNT, INTERNAL_ABORT_CAUSE, CAN_EARLY_LOCK_RELEASE, + GTRID, + BQUAL, + FORMAT_ID }; static const int64_t OB_MAX_BUFFER_SIZE = 1024; char ip_buffer_[common::OB_IP_STR_BUFF]; - char XA_buffer_[OB_MAX_BUFFER_SIZE]; char parts_buffer_[OB_MAX_BUFFER_SIZE]; + char tx_desc_addr_buffer_[20]; char savepoints_buffer_[OB_MAX_BUFFER_SIZE]; + transaction::ObXATransID xid_; transaction::ObTxSchedulerStatIterator tx_scheduler_stat_iter_; DISALLOW_COPY_AND_ASSIGN(ObGVTxSchedulerStat); }; diff --git a/src/share/inner_table/ob_inner_table_schema.11001_11050.cpp b/src/share/inner_table/ob_inner_table_schema.11001_11050.cpp index 4387676f45..d4e8c877dd 100644 --- a/src/share/inner_table/ob_inner_table_schema.11001_11050.cpp +++ b/src/share/inner_table/ob_inner_table_schema.11001_11050.cpp @@ -9076,21 +9076,6 @@ int ObInnerTableSchema::all_virtual_trans_scheduler_schema(ObTableSchema &table_ false); //is_autoincrement } - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("XA_trans_id", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_INVALID, //column_collation_type - 1024, //column_length - -1, //column_precision - -1, //column_scale - false, //is_nullable - false); //is_autoincrement - } - if (OB_SUCC(ret)) { ADD_COLUMN_SCHEMA("coordinator", //column_name ++column_id, //column_id @@ -9117,7 +9102,7 @@ int ObInnerTableSchema::all_virtual_trans_scheduler_schema(ObTableSchema &table_ 1024, //column_length -1, //column_precision -1, //column_scale - false, //is_nullable + true, //is_nullable false); //is_autoincrement } @@ -9142,12 +9127,12 @@ int ObInnerTableSchema::all_virtual_trans_scheduler_schema(ObTableSchema &table_ 0, //rowkey_id 0, //index_id 0, //part_key_pos - ObIntType, //column_type + ObUInt64Type, //column_type CS_TYPE_INVALID, //column_collation_type - sizeof(int64_t), //column_length + sizeof(uint64_t), //column_length -1, //column_precision -1, //column_scale - false, //is_nullable + true, //is_nullable false); //is_autoincrement } @@ -9243,6 +9228,36 @@ int ObInnerTableSchema::all_virtual_trans_scheduler_schema(ObTableSchema &table_ false); //is_autoincrement } + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("ref_cnt", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("tx_desc_addr", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_INVALID, //column_collation_type + 20, //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + if (OB_SUCC(ret)) { ADD_COLUMN_SCHEMA("savepoints", //column_name ++column_id, //column_id @@ -9254,7 +9269,7 @@ int ObInnerTableSchema::all_virtual_trans_scheduler_schema(ObTableSchema &table_ 1024, //column_length -1, //column_precision -1, //column_scale - false, //is_nullable + true, //is_nullable false); //is_autoincrement } @@ -9302,6 +9317,55 @@ int ObInnerTableSchema::all_virtual_trans_scheduler_schema(ObTableSchema &table_ false, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("gtrid", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_BINARY, //column_collation_type + 128, //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("bqual", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_BINARY, //column_collation_type + 128, //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ObObj format_id_default; + format_id_default.set_int(1); + ADD_COLUMN_SCHEMA_T("format_id", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObIntType, //column_type + CS_TYPE_INVALID, //column_collation_type + sizeof(int64_t), //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false, //is_autoincrement + format_id_default, + format_id_default); //default_value + } if (OB_SUCC(ret)) { table_schema.get_part_option().set_part_num(1); table_schema.set_part_level(PARTITION_LEVEL_ONE); diff --git a/src/share/inner_table/ob_inner_table_schema.15251_15300.cpp b/src/share/inner_table/ob_inner_table_schema.15251_15300.cpp index 38cc7fce79..404e51a5a5 100644 --- a/src/share/inner_table/ob_inner_table_schema.15251_15300.cpp +++ b/src/share/inner_table/ob_inner_table_schema.15251_15300.cpp @@ -7600,21 +7600,6 @@ int ObInnerTableSchema::all_virtual_trans_scheduler_ora_schema(ObTableSchema &ta false); //is_autoincrement } - if (OB_SUCC(ret)) { - ADD_COLUMN_SCHEMA("XA_TRANS_ID", //column_name - ++column_id, //column_id - 0, //rowkey_id - 0, //index_id - 0, //part_key_pos - ObVarcharType, //column_type - CS_TYPE_UTF8MB4_BIN, //column_collation_type - 1024, //column_length - 2, //column_precision - -1, //column_scale - false, //is_nullable - false); //is_autoincrement - } - if (OB_SUCC(ret)) { ADD_COLUMN_SCHEMA("COORDINATOR", //column_name ++column_id, //column_id @@ -7641,7 +7626,7 @@ int ObInnerTableSchema::all_virtual_trans_scheduler_ora_schema(ObTableSchema &ta 1024, //column_length 2, //column_precision -1, //column_scale - false, //is_nullable + true, //is_nullable false); //is_autoincrement } @@ -7671,7 +7656,7 @@ int ObInnerTableSchema::all_virtual_trans_scheduler_ora_schema(ObTableSchema &ta 38, //column_length 38, //column_precision 0, //column_scale - false, //is_nullable + true, //is_nullable false); //is_autoincrement } @@ -7765,6 +7750,36 @@ int ObInnerTableSchema::all_virtual_trans_scheduler_ora_schema(ObTableSchema &ta false); //is_autoincrement } + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("REF_CNT", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("TX_DESC_ADDR", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + 20, //column_length + 2, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + if (OB_SUCC(ret)) { ADD_COLUMN_SCHEMA("SAVEPOINTS", //column_name ++column_id, //column_id @@ -7776,7 +7791,7 @@ int ObInnerTableSchema::all_virtual_trans_scheduler_ora_schema(ObTableSchema &ta 1024, //column_length 2, //column_precision -1, //column_scale - false, //is_nullable + true, //is_nullable false); //is_autoincrement } @@ -7824,6 +7839,51 @@ int ObInnerTableSchema::all_virtual_trans_scheduler_ora_schema(ObTableSchema &ta false, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("GTRID", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_BINARY, //column_collation_type + 128, //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("BQUAL", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_BINARY, //column_collation_type + 128, //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("FORMAT_ID", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + false, //is_nullable + false); //is_autoincrement + } if (OB_SUCC(ret)) { table_schema.get_part_option().set_part_num(1); table_schema.set_part_level(PARTITION_LEVEL_ONE); diff --git a/src/share/inner_table/ob_inner_table_schema.21351_21400.cpp b/src/share/inner_table/ob_inner_table_schema.21351_21400.cpp index 4e54cb43ea..89f89719e9 100644 --- a/src/share/inner_table/ob_inner_table_schema.21351_21400.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21351_21400.cpp @@ -210,7 +210,7 @@ int ObInnerTableSchema::gv_ob_transaction_schedulers_schema(ObTableSchema &table table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT tenant_id AS TENANT_ID, svr_ip AS SVR_IP, svr_port AS SVR_PORT, session_id AS SESSION_ID, trans_id AS TX_ID, CASE WHEN state = 0 THEN 'INVALID' WHEN state = 1 THEN 'IDLE' WHEN state = 2 THEN 'EXPLICIT_ACTIVE' WHEN state = 3 THEN 'IMPLICIT_ACTIVE' WHEN state = 4 THEN 'ROLLBACK_SAVEPOINT' WHEN state = 5 THEN 'IN_TERMINATE' WHEN state = 6 THEN 'ABORTED' WHEN state = 7 THEN 'ROLLED_BACK' WHEN state = 8 THEN 'COMMIT_TIMEOUT' WHEN state = 9 THEN 'COMMIT_UNKNOWN' WHEN state = 10 THEN 'COMMITTED' WHEN state = 11 THEN 'SUB_PREPARING' WHEN state = 12 THEN 'SUB_PREPARED' WHEN state = 13 THEN 'SUB_COMMITTING' WHEN state = 14 THEN 'SUB_COMMITTED' WHEN state = 15 THEN 'SUB_ROLLBACKING' WHEN state = 16 THEN 'SUB_ROLLBACKED' ELSE 'UNKNOWN' END AS STATE, cluster_id AS CLUSTER_ID, XA_trans_id AS XA_TX_ID, coordinator AS COORDINATOR, participants AS PARTICIPANTS, CASE WHEN isolation_level = -1 THEN 'INVALID' WHEN isolation_level = 0 THEN 'READ UNCOMMITTED' WHEN isolation_level = 1 THEN 'READ COMMITTED' WHEN isolation_level = 2 THEN 'REPEATABLE READ' WHEN isolation_level = 3 THEN 'SERIALIZABLE' ELSE 'UNKNOWN' END AS ISOLATION_LEVEL, snapshot_version AS SNAPSHOT_VERSION, CASE WHEN access_mode = -1 THEN 'INVALID' WHEN access_mode = 0 THEN 'READ_WRITE' WHEN access_mode = 1 THEN 'READ_ONLY' ELSE 'UNKNOWN' END AS ACCESS_MODE, tx_op_sn AS TX_OP_SN, flag AS FLAG, active_time AS ACTIVE_TIME, expire_time AS EXPIRE_TIME, timeout_us AS TIMEOUT_US, savepoints AS SAVEPOINTS, savepoints_total_cnt AS SAVEPOINTS_TOTAL_CNT, CASE WHEN can_early_lock_release = 0 THEN 'FALSE' WHEN can_early_lock_release = 1 THEN 'TRUE' ELSE 'UNKNOWN' END AS CAN_EARLY_LOCK_RELEASE FROM oceanbase.__all_virtual_trans_scheduler )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT tenant_id AS TENANT_ID, svr_ip AS SVR_IP, svr_port AS SVR_PORT, session_id AS SESSION_ID, trans_id AS TX_ID, CASE WHEN state = 0 THEN 'INVALID' WHEN state = 1 THEN 'IDLE' WHEN state = 2 THEN 'EXPLICIT_ACTIVE' WHEN state = 3 THEN 'IMPLICIT_ACTIVE' WHEN state = 4 THEN 'ROLLBACK_SAVEPOINT' WHEN state = 5 THEN 'IN_TERMINATE' WHEN state = 6 THEN 'ABORTED' WHEN state = 7 THEN 'ROLLED_BACK' WHEN state = 8 THEN 'COMMIT_TIMEOUT' WHEN state = 9 THEN 'COMMIT_UNKNOWN' WHEN state = 10 THEN 'COMMITTED' WHEN state = 11 THEN 'SUB_PREPARING' WHEN state = 12 THEN 'SUB_PREPARED' WHEN state = 13 THEN 'SUB_COMMITTING' WHEN state = 14 THEN 'SUB_COMMITTED' WHEN state = 15 THEN 'SUB_ROLLBACKING' WHEN state = 16 THEN 'SUB_ROLLBACKED' ELSE 'UNKNOWN' END AS STATE, cluster_id AS CLUSTER_ID, coordinator AS COORDINATOR, participants AS PARTICIPANTS, CASE WHEN isolation_level = -1 THEN 'INVALID' WHEN isolation_level = 0 THEN 'READ UNCOMMITTED' WHEN isolation_level = 1 THEN 'READ COMMITTED' WHEN isolation_level = 2 THEN 'REPEATABLE READ' WHEN isolation_level = 3 THEN 'SERIALIZABLE' ELSE 'UNKNOWN' END AS ISOLATION_LEVEL, snapshot_version AS SNAPSHOT_VERSION, CASE WHEN access_mode = -1 THEN 'INVALID' WHEN access_mode = 0 THEN 'READ_WRITE' WHEN access_mode = 1 THEN 'READ_ONLY' ELSE 'UNKNOWN' END AS ACCESS_MODE, tx_op_sn AS TX_OP_SN, active_time AS ACTIVE_TIME, expire_time AS EXPIRE_TIME, CASE WHEN can_early_lock_release = 0 THEN 'FALSE' WHEN can_early_lock_release = 1 THEN 'TRUE' ELSE 'UNKNOWN' END AS CAN_EARLY_LOCK_RELEASE, format_id AS FORMATID, HEX(gtrid) AS GLOBALID, HEX(bqual) AS BRANCHID FROM oceanbase.__all_virtual_trans_scheduler )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.28151_28200.cpp b/src/share/inner_table/ob_inner_table_schema.28151_28200.cpp index da2dffbecf..d3a5949022 100644 --- a/src/share/inner_table/ob_inner_table_schema.28151_28200.cpp +++ b/src/share/inner_table/ob_inner_table_schema.28151_28200.cpp @@ -360,7 +360,7 @@ int ObInnerTableSchema::gv_ob_transaction_schedulers_ora_schema(ObTableSchema &t table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT tenant_id AS TENANT_ID, svr_ip AS SVR_IP, svr_port AS SVR_PORT, session_id AS SESSION_ID, trans_id AS TX_ID, CASE WHEN state = 0 THEN 'INVALID' WHEN state = 1 THEN 'IDLE' WHEN state = 2 THEN 'EXPLICIT_ACTIVE' WHEN state = 3 THEN 'IMPLICIT_ACTIVE' WHEN state = 4 THEN 'ROLLBACK_SAVEPOINT' WHEN state = 5 THEN 'IN_TERMINATE' WHEN state = 6 THEN 'ABORTED' WHEN state = 7 THEN 'ROLLED_BACK' WHEN state = 8 THEN 'COMMIT_TIMEOUT' WHEN state = 9 THEN 'COMMIT_UNKNOWN' WHEN state = 10 THEN 'COMMITTED' WHEN state = 11 THEN 'SUB_PREPARING' WHEN state = 12 THEN 'SUB_PREPARED' WHEN state = 13 THEN 'SUB_COMMITTING' WHEN state = 14 THEN 'SUB_COMMITTED' WHEN state = 15 THEN 'SUB_ROLLBACKING' WHEN state = 16 THEN 'SUB_ROLLBACKED' ELSE 'UNKNOWN' END AS STATE, cluster_id AS CLUSTER_ID, XA_trans_id AS XA_TX_ID, coordinator AS COORDINATOR, participants AS PARTICIPANTS, CASE WHEN isolation_level = -1 THEN 'INVALID' WHEN isolation_level = 0 THEN 'READ UNCOMMITTED' WHEN isolation_level = 1 THEN 'READ COMMITTED' WHEN isolation_level = 2 THEN 'REPEATABLE READ' WHEN isolation_level = 3 THEN 'SERIALIZABLE' ELSE 'UNKNOWN' END AS ISOLATION_LEVEL, snapshot_version AS SNAPSHOT_VERSION, CASE WHEN access_mode = -1 THEN 'INVALID' WHEN access_mode = 0 THEN 'READ_WRITE' WHEN access_mode = 1 THEN 'READ_ONLY' ELSE 'UNKNOWN' END AS ACCESS_MODE, tx_op_sn AS TX_OP_SN, flag AS FLAG, active_time AS ACTIVE_TIME, expire_time AS EXPIRE_TIME, timeout_us AS TIMEOUT_US, savepoints AS SAVEPOINTS, savepoints_total_cnt AS SAVEPOINTS_TOTAL_CNT, CASE WHEN can_early_lock_release = 0 THEN 'FALSE' WHEN can_early_lock_release = 1 THEN 'TRUE' ELSE 'UNKNOWN' END AS CAN_EARLY_LOCK_RELEASE FROM SYS.ALL_VIRTUAL_TRANS_SCHEDULER )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT tenant_id AS TENANT_ID, svr_ip AS SVR_IP, svr_port AS SVR_PORT, session_id AS SESSION_ID, trans_id AS TX_ID, CAST (CASE WHEN state = 0 THEN 'INVALID' WHEN state = 1 THEN 'IDLE' WHEN state = 2 THEN 'EXPLICIT_ACTIVE' WHEN state = 3 THEN 'IMPLICIT_ACTIVE' WHEN state = 4 THEN 'ROLLBACK_SAVEPOINT' WHEN state = 5 THEN 'IN_TERMINATE' WHEN state = 6 THEN 'ABORTED' WHEN state = 7 THEN 'ROLLED_BACK' WHEN state = 8 THEN 'COMMIT_TIMEOUT' WHEN state = 9 THEN 'COMMIT_UNKNOWN' WHEN state = 10 THEN 'COMMITTED' WHEN state = 11 THEN 'SUB_PREPARING' WHEN state = 12 THEN 'SUB_PREPARED' WHEN state = 13 THEN 'SUB_COMMITTING' WHEN state = 14 THEN 'SUB_COMMITTED' WHEN state = 15 THEN 'SUB_ROLLBACKING' WHEN state = 16 THEN 'SUB_ROLLBACKED' ELSE 'UNKNOWN' END AS VARCHAR2(18)) AS STATE, cluster_id AS CLUSTER_ID, coordinator AS COORDINATOR, participants AS PARTICIPANTS, CAST (CASE WHEN isolation_level = -1 THEN 'INVALID' WHEN isolation_level = 0 THEN 'READ UNCOMMITTED' WHEN isolation_level = 1 THEN 'READ COMMITTED' WHEN isolation_level = 2 THEN 'REPEATABLE READ' WHEN isolation_level = 3 THEN 'SERIALIZABLE' ELSE 'UNKNOWN' END AS VARCHAR2(16)) AS ISOLATION_LEVEL, snapshot_version AS SNAPSHOT_VERSION, CAST (CASE WHEN access_mode = -1 THEN 'INVALID' WHEN access_mode = 0 THEN 'READ_WRITE' WHEN access_mode = 1 THEN 'READ_ONLY' ELSE 'UNKNOWN' END AS VARCHAR2(10)) AS ACCESS_MODE, tx_op_sn AS TX_OP_SN, active_time AS ACTIVE_TIME, expire_time AS EXPIRE_TIME, CAST (CASE WHEN can_early_lock_release = 0 THEN 'FALSE' WHEN can_early_lock_release = 1 THEN 'TRUE' ELSE 'UNKNOWN' END AS VARCHAR2(7)) AS CAN_EARLY_LOCK_RELEASE, format_id AS FORMATID, RAWTOHEX(gtrid) AS GLOBALID, RAWTOHEX(bqual) AS BRANCHID FROM SYS.ALL_VIRTUAL_TRANS_SCHEDULER )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema_def.py b/src/share/inner_table/ob_inner_table_schema_def.py index 1afe51eae5..760ffe2ebf 100644 --- a/src/share/inner_table/ob_inner_table_schema_def.py +++ b/src/share/inner_table/ob_inner_table_schema_def.py @@ -6562,21 +6562,25 @@ def_table_schema( ('trans_id', 'int'), ('state', 'int'), ('cluster_id', 'int'), - ('XA_trans_id', 'varchar:1024'), ('coordinator', 'int'), - ('participants', 'varchar:1024'), + ('participants', 'varchar:1024', 'true'), ('isolation_level', 'int'), - ('snapshot_version', 'int'), + ('snapshot_version', 'uint', 'true'), ('access_mode', 'int'), ('tx_op_sn', 'int'), ('flag', 'int'), ('active_time', 'timestamp', 'true'), ('expire_time', 'timestamp', 'true'), ('timeout_us', 'int'), - ('savepoints', 'varchar:1024'), + ('ref_cnt', 'int'), + ('tx_desc_addr', 'varchar:20'), + ('savepoints', 'varchar:1024', 'true'), ('savepoints_total_cnt', 'int'), ('internal_abort_cause', 'int'), ('can_early_lock_release', 'bool'), + ('gtrid', 'varbinary:128', 'true'), + ('bqual', 'varbinary:128', 'true'), + ('format_id', 'int', 'false', '1'), ], partition_columns = ['svr_ip', 'svr_port'], vtable_route_policy = 'distributed', @@ -25165,7 +25169,6 @@ def_table_schema( ELSE 'UNKNOWN' END AS STATE, cluster_id AS CLUSTER_ID, - XA_trans_id AS XA_TX_ID, coordinator AS COORDINATOR, participants AS PARTICIPANTS, CASE @@ -25184,17 +25187,16 @@ def_table_schema( ELSE 'UNKNOWN' END AS ACCESS_MODE, tx_op_sn AS TX_OP_SN, - flag AS FLAG, active_time AS ACTIVE_TIME, expire_time AS EXPIRE_TIME, - timeout_us AS TIMEOUT_US, - savepoints AS SAVEPOINTS, - savepoints_total_cnt AS SAVEPOINTS_TOTAL_CNT, CASE WHEN can_early_lock_release = 0 THEN 'FALSE' WHEN can_early_lock_release = 1 THEN 'TRUE' ELSE 'UNKNOWN' - END AS CAN_EARLY_LOCK_RELEASE + END AS CAN_EARLY_LOCK_RELEASE, + format_id AS FORMATID, + HEX(gtrid) AS GLOBALID, + HEX(bqual) AS BRANCHID FROM oceanbase.__all_virtual_trans_scheduler """.replace("\n", " "), ) @@ -48324,7 +48326,7 @@ def_table_schema( svr_port AS SVR_PORT, session_id AS SESSION_ID, trans_id AS TX_ID, - CASE + CAST (CASE WHEN state = 0 THEN 'INVALID' WHEN state = 1 THEN 'IDLE' WHEN state = 2 THEN 'EXPLICIT_ACTIVE' @@ -48343,38 +48345,36 @@ def_table_schema( WHEN state = 15 THEN 'SUB_ROLLBACKING' WHEN state = 16 THEN 'SUB_ROLLBACKED' ELSE 'UNKNOWN' - END AS STATE, + END AS VARCHAR2(18)) AS STATE, cluster_id AS CLUSTER_ID, - XA_trans_id AS XA_TX_ID, coordinator AS COORDINATOR, participants AS PARTICIPANTS, - CASE + CAST (CASE WHEN isolation_level = -1 THEN 'INVALID' WHEN isolation_level = 0 THEN 'READ UNCOMMITTED' WHEN isolation_level = 1 THEN 'READ COMMITTED' WHEN isolation_level = 2 THEN 'REPEATABLE READ' WHEN isolation_level = 3 THEN 'SERIALIZABLE' ELSE 'UNKNOWN' - END AS ISOLATION_LEVEL, + END AS VARCHAR2(16)) AS ISOLATION_LEVEL, snapshot_version AS SNAPSHOT_VERSION, - CASE + CAST (CASE WHEN access_mode = -1 THEN 'INVALID' WHEN access_mode = 0 THEN 'READ_WRITE' WHEN access_mode = 1 THEN 'READ_ONLY' ELSE 'UNKNOWN' - END AS ACCESS_MODE, + END AS VARCHAR2(10)) AS ACCESS_MODE, tx_op_sn AS TX_OP_SN, - flag AS FLAG, active_time AS ACTIVE_TIME, expire_time AS EXPIRE_TIME, - timeout_us AS TIMEOUT_US, - savepoints AS SAVEPOINTS, - savepoints_total_cnt AS SAVEPOINTS_TOTAL_CNT, - CASE + CAST (CASE WHEN can_early_lock_release = 0 THEN 'FALSE' WHEN can_early_lock_release = 1 THEN 'TRUE' ELSE 'UNKNOWN' - END AS CAN_EARLY_LOCK_RELEASE + END AS VARCHAR2(7)) AS CAN_EARLY_LOCK_RELEASE, + format_id AS FORMATID, + RAWTOHEX(gtrid) AS GLOBALID, + RAWTOHEX(bqual) AS BRANCHID FROM SYS.ALL_VIRTUAL_TRANS_SCHEDULER """.replace("\n", " "), ) diff --git a/src/storage/tx/ob_trans_define_v4.cpp b/src/storage/tx/ob_trans_define_v4.cpp index 4514ccffb4..b2d0bb8590 100644 --- a/src/storage/tx/ob_trans_define_v4.cpp +++ b/src/storage/tx/ob_trans_define_v4.cpp @@ -155,7 +155,9 @@ DEF_TO_STRING(ObTxSavePoint) } J_COMMA(); J_KV(K_(scn)); + J_COMMA(); J_KV(K_(session_id)); + J_COMMA(); J_KV(K_(user_create)); J_OBJ_END(); return pos; diff --git a/src/storage/tx/ob_trans_functor.h b/src/storage/tx/ob_trans_functor.h index 8fc09500e3..5dae988374 100644 --- a/src/storage/tx/ob_trans_functor.h +++ b/src/storage/tx/ob_trans_functor.h @@ -1230,13 +1230,12 @@ public: { int tmp_ret = common::OB_SUCCESS; bool bool_ret = false; - ObTransID tx_id; if (OB_ISNULL(tx_desc)) { tmp_ret = OB_INVALID_ARGUMENT; TRANS_LOG_RET(WARN, tmp_ret, "invalid argument tx_desc", KP(tx_desc)); } else { - tx_id = tx_desc->tx_id_; + ObTransID &tx_id = tx_desc->tx_id_; if (!tx_id.is_valid()) { tmp_ret = OB_INVALID_ARGUMENT; TRANS_LOG_RET(WARN, tmp_ret, "invalid argument tx_id", K(tx_id), KP(tx_desc)); @@ -1261,13 +1260,15 @@ public: tx_desc->coord_id_, copy_parts, tx_desc->isolation_, - tx_desc->snapshot_version_.get_val_for_tx(true), + tx_desc->snapshot_version_, tx_desc->access_mode_, tx_desc->op_sn_, tx_desc->flags_.v_, tx_desc->active_ts_, tx_desc->expire_ts_, tx_desc->timeout_us_, + tx_desc->ref_, + tx_desc, copy_savepoints, tx_desc->abort_cause_, tx_desc->can_elr_))) { diff --git a/src/storage/tx/ob_tx_stat.cpp b/src/storage/tx/ob_tx_stat.cpp index 889991b3bd..55b55bfc74 100644 --- a/src/storage/tx/ob_tx_stat.cpp +++ b/src/storage/tx/ob_tx_stat.cpp @@ -156,13 +156,15 @@ int ObTxSchedulerStat::init(const uint64_t tenant_id, const share::ObLSID &coord_id, const ObTxPartList &parts, const ObTxIsolationLevel &isolation, - const int64_t snapshot_version, + const share::SCN &snapshot_version, const ObTxAccessMode &access_mode, const uint64_t op_sn, const uint64_t flag, const int64_t active_ts, const int64_t expire_ts, const int64_t timeout_us, + const int32_t ref_cnt, + const void* const tx_desc_addr, const ObTxSavePointList &savepoints, const int16_t abort_cause, const bool can_elr) @@ -193,6 +195,8 @@ int ObTxSchedulerStat::init(const uint64_t tenant_id, active_ts_ = active_ts; expire_ts_ = expire_ts; timeout_us_ = timeout_us; + ref_cnt_ = ref_cnt; + tx_desc_addr_ = tx_desc_addr; abort_cause_ = abort_cause; can_elr_ = can_elr; } @@ -212,13 +216,15 @@ void ObTxSchedulerStat::reset() coord_id_.reset(); parts_.reset(); isolation_ = ObTxIsolationLevel::INVALID; - snapshot_version_ = -1; + snapshot_version_.reset(); access_mode_ = ObTxAccessMode::INVL; op_sn_ = -1; flag_ = 0; active_ts_ = -1; expire_ts_ = -1; timeout_us_ = -1; + ref_cnt_ = -1; + tx_desc_addr_ = (void*)0; savepoints_.reset(); abort_cause_ = 0; can_elr_ = false; @@ -247,8 +253,8 @@ int64_t ObTxSchedulerStat::get_parts_str(char* buf, const int64_t buf_len) int ObTxSchedulerStat::get_valid_savepoints(const ObTxSavePointList &savepoints) { int ret = OB_SUCCESS; - for (int i = 0; i < savepoints.count(); i++) { - if (savepoints.at(i).is_savepoint() || savepoints.at(i).is_snapshot()) { + for (int i = 0; OB_SUCC(ret) && i < savepoints.count(); i++) { + if (savepoints.at(i).is_savepoint()) { if (OB_FAIL(savepoints_.push_back(savepoints.at(i)))) { TRANS_LOG(WARN, "failed to push into savepoints array", KR(ret)); } diff --git a/src/storage/tx/ob_tx_stat.h b/src/storage/tx/ob_tx_stat.h index 1939d901e7..febb4f83e8 100644 --- a/src/storage/tx/ob_tx_stat.h +++ b/src/storage/tx/ob_tx_stat.h @@ -140,13 +140,15 @@ public: const share::ObLSID &coord_id, const ObTxPartList &parts, const ObTxIsolationLevel &isolation, - const int64_t snapshot_version, + const share::SCN &snapshot_version, const ObTxAccessMode &access_mode, const uint64_t op_sn, const uint64_t flag, const int64_t active_ts, const int64_t expire_ts, const int64_t timeout_us, + const int32_t ref_cnt, + const void* const tx_desc_addr, const ObTxSavePointList &savepoints, const int16_t abort_cause, const bool can_elr); @@ -156,7 +158,8 @@ public: K_(isolation), K_(snapshot_version), K_(access_mode), K_(op_sn), K_(flag), K_(active_ts), K_(expire_ts), - K_(timeout_us), K_(savepoints), + K_(timeout_us), K_(ref_cnt), + K_(tx_desc_addr), K_(savepoints), K_(abort_cause), K_(can_elr)); int64_t get_parts_str(char* buf, const int64_t buf_len); int get_valid_savepoints(const ObTxSavePointList &savepoints); @@ -173,13 +176,15 @@ public: share::ObLSID coord_id_; ObTxPartList parts_; ObTxIsolationLevel isolation_; - int64_t snapshot_version_; + share::SCN snapshot_version_; ObTxAccessMode access_mode_; uint64_t op_sn_; uint64_t flag_; int64_t active_ts_; int64_t expire_ts_; int64_t timeout_us_; + int32_t ref_cnt_; + const void *tx_desc_addr_; ObTxSavePointList savepoints_; int16_t abort_cause_; bool can_elr_;