From 0562c99d51e4668c9e8b80e6fe993e0b14d0aed0 Mon Sep 17 00:00:00 2001 From: "shenyunlong.syl" Date: Mon, 5 Feb 2024 09:47:13 +0000 Subject: [PATCH] [CP] [OBKV] Fix operation with lob object report -4016 when local retrying & core when print request Co-authored-by: IHEII <602280108@qq.com> --- .../ob_table_batch_execute_processor.cpp | 4 ++-- src/observer/table/ob_table_cg_service.cpp | 19 +++++++++---------- src/observer/table/ob_table_context.cpp | 7 ++----- .../table/ob_table_execute_processor.cpp | 6 +++--- .../ob_table_query_and_mutate_processor.cpp | 6 ++---- 5 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/observer/table/ob_table_batch_execute_processor.cpp b/src/observer/table/ob_table_batch_execute_processor.cpp index 8cbcb972ed..033d2d7ca1 100644 --- a/src/observer/table/ob_table_batch_execute_processor.cpp +++ b/src/observer/table/ob_table_batch_execute_processor.cpp @@ -262,10 +262,10 @@ int ObTableBatchExecuteP::try_process() #ifndef NDEBUG // debug mode - LOG_INFO("[TABLE] execute batch operation", K(ret), K_(arg), K_(result), "timeout", rpc_pkt_->get_timeout(), K_(retry_count)); + LOG_INFO("[TABLE] execute batch operation", K(ret), K_(result), K_(retry_count)); #else // release mode - LOG_TRACE("[TABLE] execute batch operation", K(ret), K_(arg), K_(result), "timeout", rpc_pkt_->get_timeout(), K_(retry_count), + LOG_TRACE("[TABLE] execute batch operation", K(ret), K_(result), K_(retry_count), "receive_ts", get_receive_timestamp()); #endif return ret; diff --git a/src/observer/table/ob_table_cg_service.cpp b/src/observer/table/ob_table_cg_service.cpp index 800046dbdc..d38e3e32c7 100644 --- a/src/observer/table/ob_table_cg_service.cpp +++ b/src/observer/table/ob_table_cg_service.cpp @@ -16,6 +16,7 @@ #include "sql/code_generator/ob_static_engine_cg.h" #include "share/system_variable/ob_system_variable.h" // for ObBinlogRowImage::FULL #include "sql/engine/expr/ob_expr_autoinc_nextval.h" // for ObAutoincNextvalExtra +#include "sql/engine/expr/ob_expr_lob_utils.h" using namespace oceanbase::common; using namespace oceanbase::share; @@ -885,17 +886,15 @@ int ObTableExprCgService::write_datum(ObTableCtx &ctx, { int ret = OB_SUCCESS; - if (is_lob_storage(obj.get_type()) && (obj.has_lob_header() != expr.obj_meta_.has_lob_header())) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("fail to check lob header", K(ret), K(expr), K(obj)); + ObDatum &datum = expr.locate_datum_for_write(eval_ctx); + if (OB_FAIL(datum.from_obj(obj))) { + LOG_WARN("fail to convert object from datum", K(ret), K(obj)); + } else if (is_lob_storage(obj.get_type()) && OB_FAIL(ob_adjust_lob_datum(datum, obj.get_meta(), expr.obj_meta_, allocator))) { + // `ob_adjust_lob_datum()` will try to adjust datum form in_meta into out_meta + LOG_WARN("fail to adjust lob datum", K(ret), K(datum), K(obj)); } else { - ObDatum &datum = expr.locate_datum_for_write(eval_ctx); - if (OB_FAIL(datum.from_obj(obj))) { - LOG_WARN("fail to convert object from datum", K(ret), K(obj)); - } else { - expr.get_eval_info(eval_ctx).evaluated_ = true; - expr.get_eval_info(eval_ctx).projected_ = true; - } + expr.get_eval_info(eval_ctx).evaluated_ = true; + expr.get_eval_info(eval_ctx).projected_ = true; } return ret; diff --git a/src/observer/table/ob_table_context.cpp b/src/observer/table/ob_table_context.cpp index c415b2b35b..16351c8831 100644 --- a/src/observer/table/ob_table_context.cpp +++ b/src/observer/table/ob_table_context.cpp @@ -479,15 +479,12 @@ int ObTableCtx::convert_lob(ObIAllocator &allocator, ObObj &obj) { int ret = OB_SUCCESS; - ObString full_data; if (obj.is_persist_lob()) { // do nothing - } else if (obj.has_lob_header()) { + } else if (obj.has_lob_header()) { // we add lob header in write_datum ret = OB_ERR_UNEXPECTED; - LOG_USER_ERROR(OB_ERR_UNEXPECTED, "lob object should have lob header"); + LOG_USER_ERROR(OB_ERR_UNEXPECTED, "lob object should not have lob header"); LOG_WARN("object should not have lob header", K(ret), K(obj)); - } else if (OB_FAIL(ObTextStringResult::ob_convert_obj_temporay_lob(obj, allocator))) { // add lob header - LOG_WARN("fail to add lob header to obj", K(ret), K(obj)); } return ret; diff --git a/src/observer/table/ob_table_execute_processor.cpp b/src/observer/table/ob_table_execute_processor.cpp index fae0c502a7..516ae0907b 100644 --- a/src/observer/table/ob_table_execute_processor.cpp +++ b/src/observer/table/ob_table_execute_processor.cpp @@ -279,11 +279,11 @@ int ObTableApiExecuteP::try_process() #ifndef NDEBUG // debug mode - LOG_INFO("[TABLE] execute operation", K(ret), K_(arg), K_(result), "timeout", rpc_pkt_->get_timeout(), K_(retry_count)); + LOG_INFO("[TABLE] execute operation", K(ret), K_(result), K_(retry_count)); #else // release mode - LOG_TRACE("[TABLE] execute operation", K(ret), K_(arg), K_(result), - "timeout", rpc_pkt_->get_timeout(), "receive_ts", get_receive_timestamp(), K_(retry_count)); + LOG_TRACE("[TABLE] execute operation", K(ret), K_(result), + "receive_ts", get_receive_timestamp(), K_(retry_count)); #endif return ret; } diff --git a/src/observer/table/ob_table_query_and_mutate_processor.cpp b/src/observer/table/ob_table_query_and_mutate_processor.cpp index 9c2eabc96c..fb97f9f281 100644 --- a/src/observer/table/ob_table_query_and_mutate_processor.cpp +++ b/src/observer/table/ob_table_query_and_mutate_processor.cpp @@ -1034,12 +1034,10 @@ int ObTableQueryAndMutateP::try_process() } #ifndef NDEBUG // debug mode - LOG_INFO("[TABLE] execute query_and_mutate", K(ret), K_(arg), K(rpc_timeout), - K_(retry_count)); + LOG_INFO("[TABLE] execute query_and_mutate", K(ret), K(rpc_timeout), K_(retry_count)); #else // release mode - LOG_TRACE("[TABLE] execute query_and_mutate", K(ret), K_(arg), - K(rpc_timeout), K_(retry_count), + LOG_TRACE("[TABLE] execute query_and_mutate", K(ret), K(rpc_timeout), K_(retry_count), "receive_ts", get_receive_timestamp()); #endif return ret;