From 33f670706c4f67a084e30ad49ffa6bf5c59e62ea Mon Sep 17 00:00:00 2001 From: SanmuWangZJU Date: Thu, 10 Mar 2022 17:55:16 +0800 Subject: [PATCH] [virtual_table] add column to expose the commit timestamp of eldest clog --- .../ob_all_virtual_server_clog_stat.cpp | 19 +++++++++++++++++++ .../ob_all_virtual_server_clog_stat.h | 3 ++- .../ob_inner_table_schema.11051_11100.cpp | 15 +++++++++++++++ .../inner_table/ob_inner_table_schema_def.py | 1 + 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/observer/virtual_table/ob_all_virtual_server_clog_stat.cpp b/src/observer/virtual_table/ob_all_virtual_server_clog_stat.cpp index b6a5a17f12..dbf299a425 100644 --- a/src/observer/virtual_table/ob_all_virtual_server_clog_stat.cpp +++ b/src/observer/virtual_table/ob_all_virtual_server_clog_stat.cpp @@ -149,6 +149,25 @@ int ObAllVirtualServerClogStat::inner_get_next_row(ObNewRow*& row) cells[cell_idx].set_varchar(ObZoneStatus::get_status_str(locality_info.local_zone_status_)); break; } + case SVR_MIN_LOG_TIMESTAMP: { + if (OB_ISNULL(clog_mgr)) { + cells[cell_idx].set_int(OB_INVALID_TIMESTAMP); + } else { + // display server_min_log_ts 60s ahead of ts get from clog_mgr + static int64_t DISPLAY_AHEAD_TIME = 60 * 1000 * 1000; + int64_t svr_min_log_ts = OB_INVALID_TIMESTAMP; + if (OB_FAIL(clog_mgr->get_server_min_log_ts(svr_min_log_ts))) { + SERVER_LOG(WARN, "get_svr_min_log_ts failed", KR(ret), K(svr_min_log_ts)); + svr_min_log_ts = OB_INVALID_TIMESTAMP; + ret = OB_SUCCESS; + } else { + // svr_min_log_ts is min clog ts on this server, the log may not confirmed + svr_min_log_ts += DISPLAY_AHEAD_TIME; + } + cells[cell_idx].set_int(svr_min_log_ts); + } + break; + } default: { ret = OB_ERR_UNEXPECTED; SERVER_LOG(WARN, "invalid column id", K(ret), K(cell_idx), K(output_column_ids_), K(col_id)); diff --git a/src/observer/virtual_table/ob_all_virtual_server_clog_stat.h b/src/observer/virtual_table/ob_all_virtual_server_clog_stat.h index df3ce7dff5..a9c7f99d95 100644 --- a/src/observer/virtual_table/ob_all_virtual_server_clog_stat.h +++ b/src/observer/virtual_table/ob_all_virtual_server_clog_stat.h @@ -42,7 +42,8 @@ private: IDC, ZONE_TYPE, MERGE_STATUS, - ZONE_STATUS + ZONE_STATUS, + SVR_MIN_LOG_TIMESTAMP }; common::ObAddr* addr_; common::ObString ipstr_; diff --git a/src/share/inner_table/ob_inner_table_schema.11051_11100.cpp b/src/share/inner_table/ob_inner_table_schema.11051_11100.cpp index 62df107ee9..273f88caff 100644 --- a/src/share/inner_table/ob_inner_table_schema.11051_11100.cpp +++ b/src/share/inner_table/ob_inner_table_schema.11051_11100.cpp @@ -6454,6 +6454,21 @@ int ObInnerTableSchema::all_virtual_server_clog_stat_schema(ObTableSchema &table false, //is_nullable false); //is_autoincrement } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("svr_min_log_timestamp", //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)) { table_schema.get_part_option().set_part_func_type(PARTITION_FUNC_TYPE_HASH); if (OB_FAIL(table_schema.get_part_option().set_part_expr("hash (addr_to_partition_id(svr_ip, svr_port))"))) { 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 8572fdceeb..5f5058de81 100644 --- a/src/share/inner_table/ob_inner_table_schema_def.py +++ b/src/share/inner_table/ob_inner_table_schema_def.py @@ -7233,6 +7233,7 @@ def_table_schema( ('zone_type', 'varchar:MAX_ZONE_INFO_LENGTH'), ('merge_status', 'varchar:MAX_ZONE_INFO_LENGTH'), ('zone_status', 'varchar:MAX_ZONE_INFO_LENGTH'), + ('svr_min_log_timestamp', 'int'), ], partition_columns = ['svr_ip', 'svr_port'], ) -- GitLab