From f95855069f830ff3dd0d29a37009bee0d5797393 Mon Sep 17 00:00:00 2001 From: Monk-Liu <1152761042@qq.com> Date: Fri, 9 Feb 2024 06:23:06 +0000 Subject: [PATCH] [bugfix]: for already commited tablet, shouldn't append related lob tablet. --- src/storage/ddl/ob_complement_data_task.cpp | 2 +- src/storage/ddl/ob_direct_insert_sstable_ctx_new.cpp | 3 ++- src/storage/ddl/ob_direct_load_struct.cpp | 3 ++- src/storage/ddl/ob_direct_load_struct.h | 7 ++++++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/storage/ddl/ob_complement_data_task.cpp b/src/storage/ddl/ob_complement_data_task.cpp index 19a3eca48..6ea7346e2 100644 --- a/src/storage/ddl/ob_complement_data_task.cpp +++ b/src/storage/ddl/ob_complement_data_task.cpp @@ -1433,7 +1433,7 @@ int ObComplementWriteTask::append_row(ObScan *scan) LOG_WARN("tmp_row is nullptr", K(ret)); } else if (OB_FAIL(add_extra_rowkey(rowkey_column_cnt, extra_rowkey_cnt, *tmp_row))) { LOG_WARN("fail to add extra rowkey", K(ret)); - } else if (OB_FAIL(append_lob(rowkey_column_cnt, extra_rowkey_cnt, row_iter, lob_allocator))) { + } else if (!ddl_committed && OB_FAIL(append_lob(rowkey_column_cnt, extra_rowkey_cnt, row_iter, lob_allocator))) { LOG_WARN("append lob into macro block failed", K(ret)); } else if (OB_FAIL(new_row_builder.build(write_row_, tmp_store_row))) { } else if (OB_FAIL(ObRowReshapeUtil::reshape_table_rows( diff --git a/src/storage/ddl/ob_direct_insert_sstable_ctx_new.cpp b/src/storage/ddl/ob_direct_insert_sstable_ctx_new.cpp index 8b0b43d3e..34500cec3 100644 --- a/src/storage/ddl/ob_direct_insert_sstable_ctx_new.cpp +++ b/src/storage/ddl/ob_direct_insert_sstable_ctx_new.cpp @@ -827,10 +827,11 @@ int ObTenantDirectLoadMgr::check_and_process_finished_tablet( } if (OB_SUCC(ret) && nullptr != row_iter) { const ObDatumRow *row = nullptr; + const bool skip_lob = true; while (OB_SUCC(ret)) { if (OB_FAIL(THIS_WORKER.check_status())) { LOG_WARN("check status failed", K(ret)); - } else if (OB_FAIL(row_iter->get_next_row(row))) { + } else if (OB_FAIL(static_cast(row_iter)->get_next_row(skip_lob, row))) { if (OB_ITER_END == ret) { ret = OB_SUCCESS; break; diff --git a/src/storage/ddl/ob_direct_load_struct.cpp b/src/storage/ddl/ob_direct_load_struct.cpp index fa91c6ac0..06f26aa84 100644 --- a/src/storage/ddl/ob_direct_load_struct.cpp +++ b/src/storage/ddl/ob_direct_load_struct.cpp @@ -85,6 +85,7 @@ int ObDDLInsertRowIterator::close_lob_sstable_slice() } int ObDDLInsertRowIterator::get_next_row( + const bool skip_lob, const blocksstable::ObDatumRow *&row) { int ret = OB_SUCCESS; @@ -162,7 +163,7 @@ int ObDDLInsertRowIterator::get_next_row( } } - if (OB_SUCC(ret) && lob_column_idxs.count() > 0) { + if (OB_SUCC(ret) && !skip_lob && lob_column_idxs.count() > 0) { //handle lob if (lob_id_cache_.remain_count() < lob_column_idxs.count()) { if (OB_FAIL(switch_to_new_lob_slice())) { diff --git a/src/storage/ddl/ob_direct_load_struct.h b/src/storage/ddl/ob_direct_load_struct.h index b8590cfd5..116e56ad3 100644 --- a/src/storage/ddl/ob_direct_load_struct.h +++ b/src/storage/ddl/ob_direct_load_struct.h @@ -273,7 +273,12 @@ public: const int64_t context_id, const int64_t parallel_idx); virtual ~ObDDLInsertRowIterator(); - virtual int get_next_row(const blocksstable::ObDatumRow *&row) override; + virtual int get_next_row(const blocksstable::ObDatumRow *&row) override + { + const bool skip_lob = false; + return get_next_row(skip_lob, row); + } + int get_next_row(const bool skip_lob, const blocksstable::ObDatumRow *&row); TO_STRING_KV(K_(ls_id), K_(current_tablet_id), K_(current_row), K_(is_slice_empty), K_(is_next_row_cached), K_(rowkey_count), K_(snapshot_version), K_(lob_slice_id), K_(lob_id_cache), K_(context_id)); public: