From a2f07a7c48a8f6b9e275afb128fd927cd4946ffd Mon Sep 17 00:00:00 2001 From: obdev Date: Mon, 6 Jan 2025 05:46:05 +0000 Subject: [PATCH] [CP] WR ignore OB_ERR_PRIMARY_KEY_DUPLICATE and OB_ERR_DATA_TRUNCATED --- src/share/wr/ob_wr_collector.cpp | 58 ++++++++++++++++++++++++-------- src/share/wr/ob_wr_collector.h | 1 + 2 files changed, 45 insertions(+), 14 deletions(-) diff --git a/src/share/wr/ob_wr_collector.cpp b/src/share/wr/ob_wr_collector.cpp index c96b02b5f..e02633eb8 100644 --- a/src/share/wr/ob_wr_collector.cpp +++ b/src/share/wr/ob_wr_collector.cpp @@ -535,13 +535,12 @@ int ObWrCollector::collect_ash() if (OB_SUCC(ret) && dml_splicer.get_row_count() >= WR_ASH_INSERT_BATCH_SIZE) { collected_ash_row_count += dml_splicer.get_row_count(); if (OB_FAIL(write_to_wr(dml_splicer, OB_WR_ACTIVE_SESSION_HISTORY_TNAME, tenant_id))) { - if (ret == OB_ERR_PRIMARY_KEY_DUPLICATE) { - ret = OB_SUCCESS; + if (OB_FAIL(check_if_ignore_errorcode(ret))) { + LOG_WARN("failed to batch write to wr", KR(ret)); + } else { collected_ash_row_count -= dml_splicer.get_row_count(); dml_splicer.reset(); - LOG_WARN("failed to batch write to wr because of duplicated key", KR(ret)); - } else { - LOG_WARN("failed to batch write to wr", KR(ret)); + LOG_WARN("failed to batch write to wr but ignore error", KR(ret)); } } } @@ -549,13 +548,12 @@ int ObWrCollector::collect_ash() if (OB_SUCC(ret) && dml_splicer.get_row_count() > 0) { collected_ash_row_count += dml_splicer.get_row_count(); if (OB_FAIL(write_to_wr(dml_splicer, OB_WR_ACTIVE_SESSION_HISTORY_TNAME, tenant_id))) { - if (ret == OB_ERR_PRIMARY_KEY_DUPLICATE) { - ret = OB_SUCCESS; + if (OB_FAIL(check_if_ignore_errorcode(ret))) { + LOG_WARN("failed to batch write remaining part to wr", KR(ret)); + } else { collected_ash_row_count -= dml_splicer.get_row_count(); dml_splicer.reset(); - LOG_WARN("failed to batch write to wr because of duplicated key", KR(ret)); - } else { - LOG_WARN("failed to batch write to wr", KR(ret)); + LOG_WARN("failed to batch write remaining part to wr but ignore error", KR(ret)); } } } @@ -1093,7 +1091,13 @@ int ObWrCollector::collect_sqlstat() if (OB_SUCC(ret) && dml_splicer.get_row_count() >= WR_INSERT_SQL_STAT_BATCH_SIZE) { collected_sqlstat_row_count += dml_splicer.get_row_count(); if (OB_FAIL(write_to_wr(dml_splicer, OB_WR_SQLSTAT_TNAME, tenant_id))) { - LOG_WARN("failed to batch write to wr", KR(ret)); + if (OB_FAIL(check_if_ignore_errorcode(ret))) { + LOG_WARN("failed to batch write to wr", KR(ret)); + } else { + collected_sqlstat_row_count -= dml_splicer.get_row_count(); + dml_splicer.reset(); + LOG_WARN("failed to batch write to wr but ignore error", KR(ret)); + } } } } @@ -1102,7 +1106,13 @@ int ObWrCollector::collect_sqlstat() if (OB_SUCC(ret) && dml_splicer.get_row_count() > 0) { collected_sqlstat_row_count += dml_splicer.get_row_count(); if (OB_FAIL(write_to_wr(dml_splicer, OB_WR_SQLSTAT_TNAME, tenant_id))) { - LOG_WARN("failed to batch write remaining part to wr", KR(ret)); + if (OB_FAIL(check_if_ignore_errorcode(ret))) { + LOG_WARN("failed to batch write remaining part to wr", KR(ret)); + } else { + collected_sqlstat_row_count -= dml_splicer.get_row_count(); + dml_splicer.reset(); + LOG_WARN("failed to batch write remaining part to wr but ignore error", KR(ret)); + } } } } @@ -1461,13 +1471,23 @@ int ObWrCollector::collect_sql_plan() } if (OB_SUCC(ret) && dml_splicer.get_row_count() >= WR_SQL_PLAN_BATCH_SIZE) { if (OB_FAIL(write_to_wr(dml_splicer, OB_WR_SQL_PLAN_TNAME, tenant_id, need_insert_ignore))) { - LOG_WARN("failed to batch write to wr", KR(ret)); + if (OB_FAIL(check_if_ignore_errorcode(ret))) { + LOG_WARN("failed to batch write to wr", KR(ret)); + } else { + dml_splicer.reset(); + LOG_WARN("failed to batch write to wr but ignore error", KR(ret)); + } } } } if (OB_SUCC(ret) && dml_splicer.get_row_count() > 0 && OB_FAIL(write_to_wr(dml_splicer, OB_WR_SQL_PLAN_TNAME, tenant_id, need_insert_ignore))) { - LOG_WARN("failed to batch write remaining part to wr", KR(ret)); + if (OB_FAIL(check_if_ignore_errorcode(ret))) { + LOG_WARN("failed to batch write remaining part to wr", KR(ret)); + } else { + dml_splicer.reset(); + LOG_WARN("failed to batch write remaining part to wr but ignore error", KR(ret)); + } } } } @@ -1605,6 +1625,16 @@ int ObWrCollector::get_begin_interval_time(int64_t &begin_interval_time) return ret; } +int ObWrCollector::check_if_ignore_errorcode(int error_code) +{ + int ret = error_code; + if (error_code == OB_ERR_PRIMARY_KEY_DUPLICATE || error_code == OB_ERR_DATA_TRUNCATED || + error_code == OB_ERR_INCORRECT_STRING_VALUE) { + ret = OB_SUCCESS; + } + return ret; +} + int ObWrDeleter::do_delete() { int ret = OB_SUCCESS; diff --git a/src/share/wr/ob_wr_collector.h b/src/share/wr/ob_wr_collector.h index da0789d19..7e4716169 100644 --- a/src/share/wr/ob_wr_collector.h +++ b/src/share/wr/ob_wr_collector.h @@ -429,6 +429,7 @@ private: int update_last_snapshot_end_time(); static bool is_can_retry(const int err); + int check_if_ignore_errorcode(int error_code); int64_t snap_id_; int64_t snapshot_begin_time_; int64_t snapshot_end_time_;