From 5004501b607e7be09197601314c13c0b44e3e474 Mon Sep 17 00:00:00 2001 From: shenyushi Date: Tue, 4 Mar 2025 15:53:40 +0800 Subject: [PATCH] Fix import with index. --- src/storage/new_txn/new_txn.cpp | 4 +++- src/storage/new_txn/new_txn_data.cpp | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/storage/new_txn/new_txn.cpp b/src/storage/new_txn/new_txn.cpp index 9ce288e257..7fce336be6 100644 --- a/src/storage/new_txn/new_txn.cpp +++ b/src/storage/new_txn/new_txn.cpp @@ -1267,7 +1267,9 @@ Status NewTxn::PrepareCommit() { } case WalCommandType::DUMP_INDEX: case WalCommandType::APPEND: - case WalCommandType::DELETE: + case WalCommandType::DELETE: { + break; + } case WalCommandType::IMPORT: { auto *import_cmd = static_cast(command.get()); Status status = CommitImport(import_cmd); diff --git a/src/storage/new_txn/new_txn_data.cpp b/src/storage/new_txn/new_txn_data.cpp index 0dba9b9e7e..d4242c5cd0 100644 --- a/src/storage/new_txn/new_txn_data.cpp +++ b/src/storage/new_txn/new_txn_data.cpp @@ -107,6 +107,7 @@ Status NewTxn::Import(const String &db_name, const String &table_name, const Vec return status; } + SizeT segment_row_cnt = 0; for (SizeT j = 0; j < input_blocks.size(); ++j) { const SharedPtr &input_block = input_blocks[j]; if (!input_block->Finalized()) { @@ -159,6 +160,28 @@ Status NewTxn::Import(const String &db_name, const String &table_name, const Vec if (!status.ok()) { return status; } + segment_row_cnt += row_cnt; + } + status = segment_meta->SetRowCnt(segment_row_cnt); + if (!status.ok()) { + return status; + } + + Vector *index_id_strs_ptr = nullptr; + Vector *index_names_ptr = nullptr; + status = table_meta.GetIndexIDs(index_id_strs_ptr, &index_names_ptr); + if (!status.ok()) { + return status; + } + for (SizeT i = 0; i < index_id_strs_ptr->size(); ++i) { + const String &index_id_str = (*index_id_strs_ptr)[i]; + const String &index_name = (*index_names_ptr)[i]; + TableIndexMeeta table_index_meta(index_id_str, table_meta, table_meta.kv_instance()); + + status = this->PopulateIndex(db_name, table_name, index_name, table_index_meta, *segment_meta); + if (!status.ok()) { + return status; + } } auto import_command = MakeShared(db_name, table_name, WalSegmentInfo(*segment_meta));