This is an automated email from the ASF dual-hosted git repository. dataroaring pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push: new c30c1d2436d [branch-2.1] Picks "[opt](delete) Delete job should retry for failure that is not DELETE_INVALID_XXX #37834" (#38032) c30c1d2436d is described below commit c30c1d2436ddeda108c3197b5b34eee4c5778860 Author: bobhan1 <bh2444151...@outlook.com> AuthorDate: Thu Jul 18 14:50:30 2024 +0800 [branch-2.1] Picks "[opt](delete) Delete job should retry for failure that is not DELETE_INVALID_XXX #37834" (#38032) ## Proposed changes picks https://github.com/apache/doris/pull/37834 and https://github.com/apache/doris/pull/38043 --- be/src/olap/delete_handler.cpp | 31 ++++++------- be/src/olap/push_handler.cpp | 4 ++ be/test/olap/delete_handler_test.cpp | 52 +++++++++++----------- .../java/org/apache/doris/master/MasterImpl.java | 8 ++-- .../test_delete_from_timeout.out | 8 ++++ .../test_delete_from_timeout.groovy | 27 ++++++----- 6 files changed, 75 insertions(+), 55 deletions(-) diff --git a/be/src/olap/delete_handler.cpp b/be/src/olap/delete_handler.cpp index 8d85eb84bab..2ab3786b4d0 100644 --- a/be/src/olap/delete_handler.cpp +++ b/be/src/olap/delete_handler.cpp @@ -96,7 +96,7 @@ Status DeleteHandler::generate_delete_predicate(const TabletSchema& schema, dp->param<std::string>("error_msg")); }) if (conditions.empty()) { - return Status::Error<DELETE_INVALID_PARAMETERS>( + return Status::Error<ErrorCode::INVALID_ARGUMENT>( "invalid parameters for store_cond. condition_size={}", conditions.size()); } @@ -127,7 +127,7 @@ Status DeleteHandler::generate_delete_predicate(const TabletSchema& schema, if (TCondition tmp; !DeleteHandler::parse_condition(condition_str, &tmp)) { LOG(WARNING) << "failed to parse condition_str, condtion=" << ThriftDebugString(condition); - return Status::Error<DELETE_INVALID_CONDITION>( + return Status::Error<ErrorCode::INVALID_ARGUMENT>( "failed to parse condition_str, condtion={}", ThriftDebugString(condition)); } VLOG_NOTICE << __PRETTY_FUNCTION__ << " condition_str: " << condition_str; @@ -232,8 +232,8 @@ Status DeleteHandler::check_condition_valid(const TabletSchema& schema, const TC // Check whether the column exists int32_t field_index = schema.field_index(cond.column_name); if (field_index < 0) { - return Status::Error<DELETE_INVALID_CONDITION>("field is not existent. [field_index={}]", - field_index); + return Status::Error<ErrorCode::INVALID_ARGUMENT>("field is not existent. [field_index={}]", + field_index); } // Delete condition should only applied on key columns or duplicate key table, and @@ -242,21 +242,21 @@ Status DeleteHandler::check_condition_valid(const TabletSchema& schema, const TC if (column.type() == FieldType::OLAP_FIELD_TYPE_DOUBLE || column.type() == FieldType::OLAP_FIELD_TYPE_FLOAT) { - return Status::Error<DELETE_INVALID_CONDITION>("data type is float or double."); + return Status::Error<ErrorCode::INVALID_ARGUMENT>("data type is float or double."); } // Check operator and operands size are matched. if ("*=" != cond.condition_op && "!*=" != cond.condition_op && cond.condition_values.size() != 1) { - return Status::Error<DELETE_INVALID_CONDITION>("invalid condition value size. [size={}]", - cond.condition_values.size()); + return Status::Error<ErrorCode::INVALID_ARGUMENT>("invalid condition value size. [size={}]", + cond.condition_values.size()); } // Check each operand is valid for (const auto& condition_value : cond.condition_values) { if (!is_condition_value_valid(column, cond.condition_op, condition_value)) { - return Status::Error<DELETE_INVALID_CONDITION>("invalid condition value. [value={}]", - condition_value); + return Status::Error<ErrorCode::INVALID_ARGUMENT>("invalid condition value. [value={}]", + condition_value); } } @@ -270,15 +270,16 @@ Status DeleteHandler::check_condition_valid(const TabletSchema& schema, const TC const auto& err_msg = fmt::format("column id does not exists in table={}, schema version={},", schema.table_id(), schema.schema_version()); - return Status::Error<DELETE_INVALID_CONDITION>(err_msg); + return Status::Error<ErrorCode::INVALID_ARGUMENT>(err_msg); } if (!iequal(schema.column_by_uid(cond.column_unique_id).name(), cond.column_name)) { const auto& err_msg = fmt::format( - "colum name={} does not belongs to column uid={}, which column name={}, " + "colum name={} does not belongs to column uid={}, which " + "column name={}, " "delete_cond.column_name ={}", cond.column_name, cond.column_unique_id, schema.column_by_uid(cond.column_unique_id).name(), cond.column_name); - return Status::Error<DELETE_INVALID_CONDITION>(err_msg); + return Status::Error<ErrorCode::INVALID_ARGUMENT>(err_msg); } return Status::OK(); @@ -286,7 +287,7 @@ Status DeleteHandler::check_condition_valid(const TabletSchema& schema, const TC Status DeleteHandler::parse_condition(const DeleteSubPredicatePB& sub_cond, TCondition* condition) { if (!sub_cond.has_column_name() || !sub_cond.has_op() || !sub_cond.has_cond_value()) { - return Status::Error<DELETE_INVALID_PARAMETERS>( + return Status::Error<ErrorCode::INVALID_ARGUMENT>( "fail to parse condition. condition={} {} {}", sub_cond.column_name(), sub_cond.op(), sub_cond.cond_value()); } @@ -332,8 +333,8 @@ Status DeleteHandler::parse_condition(const std::string& condition_str, TConditi << "]"; } if (!matched) { - return Status::Error<DELETE_INVALID_PARAMETERS>("fail to sub condition. condition={}", - condition_str); + return Status::Error<ErrorCode::INVALID_ARGUMENT>("fail to sub condition. condition={}", + condition_str); } condition->column_name = what[1].str(); diff --git a/be/src/olap/push_handler.cpp b/be/src/olap/push_handler.cpp index 09e4228c37c..0bf3a23f0ab 100644 --- a/be/src/olap/push_handler.cpp +++ b/be/src/olap/push_handler.cpp @@ -118,6 +118,10 @@ Status PushHandler::_do_streaming_ingestion(TabletSharedPtr tablet, const TPushR } std::shared_lock base_migration_rlock(tablet->get_migration_lock(), std::try_to_lock); + DBUG_EXECUTE_IF("PushHandler::_do_streaming_ingestion.try_lock_fail", { + return Status::Error<TRY_LOCK_FAILED>( + "PushHandler::_do_streaming_ingestion get lock failed"); + }) if (!base_migration_rlock.owns_lock()) { return Status::Error<TRY_LOCK_FAILED>( "PushHandler::_do_streaming_ingestion get lock failed"); diff --git a/be/test/olap/delete_handler_test.cpp b/be/test/olap/delete_handler_test.cpp index f36aeac84cd..b30db5abe03 100644 --- a/be/test/olap/delete_handler_test.cpp +++ b/be/test/olap/delete_handler_test.cpp @@ -438,7 +438,7 @@ TEST_F(TestDeleteConditionHandler, StoreCondInvalidParameters) { DeletePredicatePB del_pred; Status failed_res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred); - EXPECT_EQ(Status::Error<DELETE_INVALID_PARAMETERS>(""), failed_res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), failed_res); } // 检测过滤条件中指定的列不存在,或者列不符合要求 @@ -454,7 +454,7 @@ TEST_F(TestDeleteConditionHandler, StoreCondNonexistentColumn) { DeletePredicatePB del_pred; Status failed_res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), failed_res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), failed_res); // 'v'是value列 conditions.clear(); @@ -661,7 +661,7 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_1; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_1); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); // 测试k1的值越下界,k1类型为int8 conditions[0].condition_values.clear(); @@ -669,7 +669,7 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_2; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_2); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); // 测试k2的值越上界,k2类型为int16 conditions[0].condition_values.clear(); @@ -678,7 +678,7 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_3; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_3); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); // 测试k2的值越下界,k2类型为int16 conditions[0].condition_values.clear(); @@ -686,7 +686,7 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_4; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_4); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); // 测试k3的值越上界,k3类型为int32 conditions[0].condition_values.clear(); @@ -695,7 +695,7 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_5; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_5); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); // 测试k3的值越下界,k3类型为int32 conditions[0].condition_values.clear(); @@ -703,7 +703,7 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_6; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_6); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); // 测试k4的值越上界,k2类型为int64 conditions[0].condition_values.clear(); @@ -712,7 +712,7 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_7; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_7); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); // 测试k4的值越下界,k1类型为int64 conditions[0].condition_values.clear(); @@ -720,7 +720,7 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_8; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_8); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); // 测试k5的值越上界,k5类型为int128 conditions[0].condition_values.clear(); @@ -729,7 +729,7 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_9; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_9); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); // 测试k5的值越下界,k5类型为int128 conditions[0].condition_values.clear(); @@ -737,7 +737,7 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_10; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_10); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); // 测试k9整数部分长度过长,k9类型为decimal, precision=6, frac=3 conditions[0].condition_values.clear(); @@ -746,7 +746,7 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_11; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_11); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); // 测试k9小数部分长度过长,k9类型为decimal, precision=6, frac=3 conditions[0].condition_values.clear(); @@ -754,7 +754,7 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_12; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_12); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); // 测试k9没有小数部分,但包含小数点 conditions[0].condition_values.clear(); @@ -762,7 +762,7 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_13; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_13); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); // 测试k10类型的过滤值不符合对应格式,k10为date conditions[0].condition_values.clear(); @@ -771,21 +771,21 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_14; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_14); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); conditions[0].condition_values.clear(); conditions[0].condition_values.push_back("2013-64-01"); DeletePredicatePB del_pred_15; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_15); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); conditions[0].condition_values.clear(); conditions[0].condition_values.push_back("2013-01-40"); DeletePredicatePB del_pred_16; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_16); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); // 测试k11类型的过滤值不符合对应格式,k11为datetime conditions[0].condition_values.clear(); @@ -794,42 +794,42 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_17; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_17); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); conditions[0].condition_values.clear(); conditions[0].condition_values.push_back("2013-64-01 00:00:00"); DeletePredicatePB del_pred_18; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_18); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); conditions[0].condition_values.clear(); conditions[0].condition_values.push_back("2013-01-40 00:00:00"); DeletePredicatePB del_pred_19; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_19); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); conditions[0].condition_values.clear(); conditions[0].condition_values.push_back("2013-01-01 24:00:00"); DeletePredicatePB del_pred_20; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_20); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); conditions[0].condition_values.clear(); conditions[0].condition_values.push_back("2013-01-01 00:60:00"); DeletePredicatePB del_pred_21; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_21); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); conditions[0].condition_values.clear(); conditions[0].condition_values.push_back("2013-01-01 00:00:60"); DeletePredicatePB del_pred_22; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_22); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); // 测试k12和k13类型的过滤值过长,k12,k13类型分别为string(64), varchar(64) conditions[0].condition_values.clear(); @@ -841,7 +841,7 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_23; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_23); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); conditions[0].condition_values.clear(); conditions[0].column_name = "k13"; @@ -852,7 +852,7 @@ TEST_F(TestDeleteConditionHandler2, InvalidConditionValue) { DeletePredicatePB del_pred_24; res = DeleteHandler::generate_delete_predicate(*tablet->tablet_schema(), conditions, &del_pred_24); - EXPECT_EQ(Status::Error<DELETE_INVALID_CONDITION>(""), res); + EXPECT_EQ(Status::Error<INVALID_ARGUMENT>(""), res); } class TestDeleteHandler : public testing::Test { diff --git a/fe/fe-core/src/main/java/org/apache/doris/master/MasterImpl.java b/fe/fe-core/src/main/java/org/apache/doris/master/MasterImpl.java index 12d908ff317..507378851a0 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/master/MasterImpl.java +++ b/fe/fe-core/src/main/java/org/apache/doris/master/MasterImpl.java @@ -305,10 +305,10 @@ public class MasterImpl { if (request.getTaskStatus().getStatusCode() != TStatusCode.OK) { if (pushTask.getPushType() == TPushType.DELETE) { - // DeleteHandler may return status code DELETE_INVALID_CONDITION and DELETE_INVALID_PARAMETERS, - // we don't need to retry if meet them. - // note that they will be converted to TStatusCode.INTERNAL_ERROR when being sent from be to fe - if (request.getTaskStatus().getStatusCode() == TStatusCode.INTERNAL_ERROR) { + // we don't need to retry if the returned status code is DELETE_INVALID_CONDITION + // or DELETE_INVALID_PARAMETERS + // note that they will be converted to TStatusCode.INVALID_ARGUMENT when being sent from be to fe + if (request.getTaskStatus().getStatusCode() == TStatusCode.INVALID_ARGUMENT) { pushTask.countDownToZero(request.getTaskStatus().getStatusCode(), task.getBackendId() + ": " + request.getTaskStatus().getErrorMsgs().toString()); AgentTaskQueue.removeTask(backendId, TTaskType.REALTIME_PUSH, signature); diff --git a/regression-test/data/fault_injection_p0/test_delete_from_timeout.out b/regression-test/data/fault_injection_p0/test_delete_from_timeout.out new file mode 100644 index 00000000000..1703506a5af --- /dev/null +++ b/regression-test/data/fault_injection_p0/test_delete_from_timeout.out @@ -0,0 +1,8 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +false -9999782574499444.2 -25 +true 99.9 234 + +-- !sql -- +true 99.9 234 + diff --git a/regression-test/suites/fault_injection_p0/test_delete_from_timeout.groovy b/regression-test/suites/fault_injection_p0/test_delete_from_timeout.groovy index 2d5bf41b3db..7d1efdc9782 100644 --- a/regression-test/suites/fault_injection_p0/test_delete_from_timeout.groovy +++ b/regression-test/suites/fault_injection_p0/test_delete_from_timeout.groovy @@ -34,26 +34,33 @@ suite("test_delete_from_timeout","nonConcurrent") { GetDebugPoint().clearDebugPointsForAllBEs() try { - sql "insert into ${tableName} values(1, 99.9, 234);" + sql "insert into ${tableName} values(1, 99.9, 234), (false, -9999782574499444.2, -25);" + qt_sql "select * from ${tableName} order by col1, col2, col3;" + GetDebugPoint().enableDebugPointForAllBEs("DeleteHandler::generate_delete_predicate.inject_failure", - [error_code: -1900 /* DELETE_INVALID_CONDITION */, error_msg: "data type is float or double."]) + [error_code: 33 /* INVALID_ARGUMENT */, error_msg: "invalid parameters for store_cond. condition_size=1"]) test { sql """delete from ${tableName} where col1 = "false" and col2 = "-9999782574499444.2" and col3 = "-25"; """ - exception "data type is float or double." + exception "invalid parameters for store_cond. condition_size=1" } GetDebugPoint().clearDebugPointsForAllBEs() - GetDebugPoint().enableDebugPointForAllBEs("DeleteHandler::generate_delete_predicate.inject_failure", - [error_code: -1903 /* DELETE_INVALID_PARAMETERS */, error_msg: "invalid parameters for store_cond. condition_size=1"]) - test { - sql """delete from ${tableName} where col1 = "false" and col2 = "-9999782574499444.2" and col3 = "-25"; """ - exception "invalid parameters for store_cond. condition_size=1" + GetDebugPoint().enableDebugPointForAllBEs("PushHandler::_do_streaming_ingestion.try_lock_fail") + + t1 = Thread.start { + sleep(15000) + GetDebugPoint().disableDebugPointForAllBEs("PushHandler::_do_streaming_ingestion.try_lock_fail") } + + sql """delete from ${tableName} where col1 = "false" and col2 = "-9999782574499444.2" and col3 = "-25"; """ + t1.join() + qt_sql "select * from ${tableName} order by col1, col2, col3;" + } catch (Exception e) { logger.info(e.getMessage()) - AssertTrue(false) + assertTrue(false) } finally { - GetDebugPoint().disableDebugPointForAllBEs("DeleteHandler::generate_delete_predicate.inject_failure") + GetDebugPoint().clearDebugPointsForAllBEs() } } \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org