Skip to content

Commit

Permalink
Merge pull request #247 from wayyoungboy/2.2.0-qulei
Browse files Browse the repository at this point in the history
fix some rca scene
  • Loading branch information
wayyoungboy committed Jun 12, 2024
2 parents de39574 + ee86674 commit 51701a4
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 32 deletions.
2 changes: 2 additions & 0 deletions handler/rca/rca_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,8 @@ def export(self):
self.stdio.verbose("save record to {0}".format(record_file_name))
with open(record_file_name, "w") as f:
for record in self.records:
if record.records is None or len(record.records) == 0:
continue
record_data = record.export_record()
f.write(record_data.get_string())
f.write("\n")
Expand Down
10 changes: 4 additions & 6 deletions handler/rca/scene/clog_disk_full_scene.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ def verbose(self, info):

def execute(self):
try:
init_record = RCA_ResultRecord(self.stdio)
# get log_disk_utilization_threshold
sql = "select SVR_IP,SVR_PORT,TENANT_ID,value/100 as value from oceanbase.GV$OB_PARAMETERS where name = 'log_disk_utilization_threshold';"
self.verbose("get log_disk_utilization_threshold execute_sql is {0}".format(sql))
Expand All @@ -75,7 +74,7 @@ def execute(self):
self.verbose("the tenant_id clog_disk_full is {0}".format(tenant_ids_data_sql))
tenant_ids_data = tenant_ids_data_sql
if len(tenant_ids_data) <= 0:
init_record.add_record("Not find tenant_ids about clog_disk_full.")
self.record.add_record("Not find tenant_ids about clog_disk_full.")
raise RCANotNeedExecuteException("Not find tenant_ids about clog_disk_full.")
self.verbose("tenant_ids about clog_disk_full is {0}".format(tenant_ids_data))
# find ls,node by tenant_id
Expand All @@ -90,12 +89,11 @@ def execute(self):
for ls_data in ls_datas:
tenant_ls_datas.append({"tenant_id": tenant_id, "ls_id": ls_data["ls_id"], "ip": ls_data["svr_ip"], "port": ls_data["svr_port"]})
if len(tenant_ls_datas) <= 0:
init_record.add_record("Not find tenant_ls_datas about clog_disk_full.")
self.record.add_record("Not find tenant_ls_datas about clog_disk_full.")
raise RCANotNeedExecuteException("Not find tenant_ls_datas about clog_disk_full.")
self.verbose("tenant_ls_datas is {0}".format(tenant_ls_datas))
init_record.add_record("tenant_ls_datas is {0}".format(tenant_ls_datas))
init_record.add_suggest("init data end. Please check the other record.")
self.Result.records.append(init_record)
self.record.add_record("tenant_ls_datas is {0}".format(tenant_ls_datas))
self.record.add_suggest("init data end. Please check the other record.")
for tenant_ls_data in tenant_ls_datas:
record = RCA_ResultRecord(self.stdio)
record.add_record("check error tenant_ls_data is {0}".format(tenant_ls_data))
Expand Down
42 changes: 20 additions & 22 deletions handler/rca/scene/ddl_disk_full_scene.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,8 @@ def verbose(self, info):

def execute(self):
try:
record = RCA_ResultRecord()
record.add_record("table_id is {0}".format(self.table_id))
record.add_record("tenant_id is {0}".format(self.tenant_id))
self.record.add_record("table_id is {0}".format(self.table_id))
self.record.add_record("tenant_id is {0}".format(self.tenant_id))
# get estimated_data_size
self.verbose("start to get estimated_data_size...")
## if the action is not add_index
Expand All @@ -99,38 +98,38 @@ def execute(self):
self.verbose("execute_sql is {0}".format(sql))
tablet_size_data = self.ob_connector.execute_sql(sql)
self.verbose("tablet_size_data is {0}".format(tablet_size_data))
record.add_record("tablet_size_data is {0}".format(tablet_size_data))
self.record.add_record("tablet_size_data is {0}".format(tablet_size_data))
if len(tablet_size_data) <= 0 or tablet_size_data[0][2] is None:
raise RCAExecuteException("can not find tablet size info or estimated_data_size. please check the data:{0}.".format(tablet_size_data))
self.estimated_size = tablet_size_data
self.verbose("estimated_size is {0}".format(self.estimated_size))
record.add_record("estimated_size is {0}".format(self.estimated_size))
self.record.add_record("estimated_size is {0}".format(self.estimated_size))

# get estimated_size to self.estimated_size
if self.action_type is not None and self.action_type == "add_index":
self.verbose("start add_index_action")
record.add_record("index_name is {0}".format(self.index_name))
record.add_record("action_type is {0}".format(self.action_type))
self.record.add_record("index_name is {0}".format(self.index_name))
self.record.add_record("action_type is {0}".format(self.action_type))
## if the action is add_index
sql = "select table_id from oceanbase.__all_virtual_table_history where tenant_id = '{0}' and data_table_id = '{1}' and table_name like '%{2}%';".format(self.tenant_id, self.table_id, self.index_name)
self.verbose("execute_sql is {0}".format(sql))
self.index_table_id = self.ob_connector.execute_sql(sql)[0][0]
self.verbose("index_table_id is {0}".format(self.index_table_id))
record.add_record("index_table_id is {0}".format(self.index_table_id))
self.record.add_record("index_table_id is {0}".format(self.index_table_id))

# Query the sum of the lengths of all columns in the main table
sql = "select table_id, sum(data_length) from oceanbase.__all_virtual_column_history where tenant_id = '{0}' and table_id = '{1}';".format(self.tenant_id, self.table_id)
self.verbose("execute_sql is {0}".format(sql))
main_table_sum_of_data_length = int(self.ob_connector.execute_sql(sql)[0][1])
self.verbose("main_table_sum_of_data_length is {0}".format(main_table_sum_of_data_length))
record.add_record("main_table_sum_of_data_length is {0}".format(main_table_sum_of_data_length))
self.record.add_record("main_table_sum_of_data_length is {0}".format(main_table_sum_of_data_length))

# The sum of the lengths of all columns in the query index
sql = "select table_id, sum(data_length) from oceanbase.__all_virtual_column_history where tenant_id = '{0}' and table_id = '{1}';".format(self.tenant_id, self.index_table_id)
self.verbose("execute_sql is {0}".format(sql))
index_table_sum_of_data_length = int(self.ob_connector.execute_sql(sql)[0][1])
self.verbose("index_table_sum_of_data_length is {0}".format(index_table_sum_of_data_length))
record.add_record("index_table_sum_of_data_length is {0}".format(index_table_sum_of_data_length))
self.record.add_record("index_table_sum_of_data_length is {0}".format(index_table_sum_of_data_length))

#
new_estimated_size = []
Expand All @@ -148,43 +147,42 @@ def execute(self):
target_server_port = estimated_size[1]
target_server_estimated_size = int(estimated_size[2])
self.verbose("On target_server_ip is {0}, target_server_port is {1}, target_server_estimated_size is {2}".format(target_server_ip, target_server_port, target_server_estimated_size))
record.add_record("On target_server_ip is {0}, target_server_port is {1}, target_server_estimated_size is {2}".format(target_server_ip, target_server_port, target_server_estimated_size))
self.record.add_record("On target_server_ip is {0}, target_server_port is {1}, target_server_estimated_size is {2}".format(target_server_ip, target_server_port, target_server_estimated_size))

# get target_server_total_size and target_server_used_size
target_server_data = self.ob_connector.execute_sql("select total_size, used_size from oceanbase.__all_virtual_disk_stat where svr_ip = '{0}' and svr_port = {1};".format(target_server_ip, target_server_port))
target_server_total_size = int(target_server_data[0][0])
self.verbose("target_server_total_size is {0}".format(target_server_total_size))
record.add_record("target_server_total_size is {0}".format(target_server_total_size))
self.record.add_record("target_server_total_size is {0}".format(target_server_total_size))

target_server_used_size = int(target_server_data[0][1])
self.verbose("target_server_used_size is {0}".format(target_server_used_size))
record.add_record("target_server_used_size is {0}".format(target_server_used_size))
self.record.add_record("target_server_used_size is {0}".format(target_server_used_size))

# get data_disk_usage_limit_percentage
sql = "SELECT VALUE FROM oceanbase.GV$OB_PARAMETERS WHERE SVR_IP='{0}' and SVR_PORT='{1}' and NAME LIKE \"data_disk_usage_limit_percentage\"".format(target_server_ip, target_server_port)
self.verbose("execute_sql is {0}".format(sql))
data_disk_usage_limit_percentage = int(self.ob_connector.execute_sql(sql)[0][0])
# data_disk_usage_limit_percentage is a Cluster level configuration items
self.verbose("data_disk_usage_limit_percentage is {0}".format(data_disk_usage_limit_percentage))
record.add_record("data_disk_usage_limit_percentage is {0}".format(data_disk_usage_limit_percentage))
if self.observer_version == "4.3.0.0" or StringUtils.compare_versions_greater(self.observer_version, "4.3.0.0"):
self.record.add_record("data_disk_usage_limit_percentage is {0}".format(data_disk_usage_limit_percentage))
if self.observer_version == "4.2.3.0" or StringUtils.compare_versions_greater(self.observer_version, "4.2.3.0"):
target_server_estimated_size = int(target_server_estimated_size * 15 / 10)
else:
target_server_estimated_size = int(target_server_estimated_size * 55 / 10)
self.verbose("target_server_estimated_size is {0}".format(target_server_estimated_size))
record.add_record("target_server_estimated_size is {0}".format(target_server_estimated_size))
self.record.add_record("target_server_estimated_size is {0}".format(target_server_estimated_size))

available_disk_space = int(target_server_total_size / 100 * data_disk_usage_limit_percentage - target_server_used_size)
self.verbose("available_disk_space is {0}".format(available_disk_space))
record.add_record("available_disk_space is {0}".format(available_disk_space))
self.record.add_record("available_disk_space is {0}".format(available_disk_space))

if target_server_estimated_size - available_disk_space > 0:
record.add_record("target_server_estimated_size - available_disk_space is {0}".format(target_server_estimated_size - available_disk_space))
record.add_suggest("the disk space of server({0}:{1}) disk is not enough. please add the server disk".format(target_server_ip, target_server_port))
self.record.add_record("target_server_estimated_size - available_disk_space is {0}".format(target_server_estimated_size - available_disk_space))
self.record.add_suggest("the disk space of server({0}:{1}) disk is not enough. please add the server disk".format(target_server_ip, target_server_port))
else:
record.add_record("target_server_estimated_size - available_disk_space is {0}".format(target_server_estimated_size - available_disk_space))
record.add_suggest("the disk space of server({0}:{1}) is enough. Don't warn ".format(target_server_ip, target_server_port))
self.Result.records.append(record)
self.record.add_record("target_server_estimated_size - available_disk_space is {0}".format(target_server_estimated_size - available_disk_space))
self.record.add_suggest("the disk space of server({0}:{1}) is enough. Don't warn ".format(target_server_ip, target_server_port))
except Exception as e:
raise RCAExecuteException("DDlDiskFullScene execute error: {0}".format(e))
finally:
Expand Down
14 changes: 12 additions & 2 deletions handler/rca/scene/transaction_execute_timeout_scene.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,20 +114,30 @@ def execute_statement(self):
match = re.search(r'current_time=(\d+)', line)
if match:
cur_query_start_time = match.group(1)
self.record.add_record("current_time is {0}".format(cur_query_start_time))
elif "query_start_time" in line:
match = re.search(r'query_start_time=(\d+)', line)
if match:
cur_query_start_time = match.group(1)
if cur_query_start_time is not None:
self.record.add_record("cur_query_start_time is {0}".format(cur_query_start_time))
break
with open(log_name, 'r', encoding='utf-8') as f:
content = f.readlines()
for line in content:
if "timeout_timestamp" in line:
match = re.search(r'timeout_timestamp=(\d+)', line)
if match:
timeout_timestamp = match.group(1)
self.record.add_record("timeout_timestamp is {0}".format(timeout_timestamp))
break
if cur_query_start_time is None or timeout_timestamp is None:
self.record.add_record("can not find cur_query_start_time or timeout_timestamp")
self.record.add_suggest("Can not find cur_query_start_time or timeout_timestamp")
return
self.record.add_record("cur_query_start_time is {0}, timeout_timestamp is {1}".format(cur_query_start_time, timeout_timestamp))
if int(timeout_timestamp or 0) - int(cur_query_start_time or 0) >= int(ob_query_timeout or 0):
self.record.add_record("timeout_timestamp - cur_query_start_time={0} >= ob_query_timeout".format(int(timeout_timestamp or 0) - int(cur_query_start_time or 0)))
self.record.add_suggest("Meets expectations")
self.record.add_suggest("Meets expectations. If you still have any doubts about this, you can contact the Oceanbase community.")
else:
self.record.add_record("timeout_timestamp - cur_query_start_time={0} =< ob_query_timeout".format(int(timeout_timestamp or 0) - int(cur_query_start_time or 0)))
self.record.add_suggest("Not meet expectations. Please send it to Oceanbase Community")
Expand Down
1 change: 0 additions & 1 deletion handler/rca/scene/transaction_other_error_scene.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,6 @@ def execute(self):
raise RCAExecuteException("TransactionOtherErrorScene execute error: {0}".format(e))
finally:
self.stdio.verbose("end TransactionOtherErrorScene execute")
self.Result.records.append(self.record)

def get_scene_info(self):
return {
Expand Down
1 change: 0 additions & 1 deletion handler/rca/scene/transaction_wait_timeout_scene.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,6 @@ def execute(self):
raise RCAExecuteException("TransactionWaitTimeoutScene execute error: {0}".format(e))
finally:
self.stdio.verbose("end TransactionWaitTimeoutScene execute")
self.Result.records.append(self.record)

def get_scene_info(self):
return {
Expand Down

0 comments on commit 51701a4

Please sign in to comment.