This is an automated email from the ASF dual-hosted git repository. dataroaring pushed a commit to branch branch-3.0 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push: new 935c6dcab38 [cherry-pick](branch-3.0) Pick "[Fix](core) Fix null ptr introduced by #42949 (#46074)" (#48346) 935c6dcab38 is described below commit 935c6dcab38e796b3c9ed74aef6eb9402ec1860c Author: abmdocrt <lianyuk...@selectdb.com> AuthorDate: Wed Feb 26 16:53:13 2025 +0800 [cherry-pick](branch-3.0) Pick "[Fix](core) Fix null ptr introduced by #42949 (#46074)" (#48346) Pick #46074 In PR #42949, during the rowset ID initialization process, we used a random ID to replace the rowset ID that failed during serialization. However, the generation of random IDs depends on the storage engine, which hasn't been initialized during the rowset ID initialization process, leading to a core dump. This PR fixes this issue by uniformly using MAX_ROWSET_ID-1 to replace the failed rowset ID. This approach is safe because the rowset ID generator won't generate such a large ID, and we can consider all rowsets with rowset ID equal to MAX_ROWSET_ID-1 as failed initialization rowsets that should rely on multiple replicas for automatic recovery. --- be/src/olap/olap_common.h | 4 +--- be/src/olap/rowset/unique_rowset_id_generator.cpp | 9 --------- be/test/olap/rowset/rowset_meta_test.cpp | 10 ++++++++++ 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/be/src/olap/olap_common.h b/be/src/olap/olap_common.h index b2e63a777ba..bb20c4c0a7b 100644 --- a/be/src/olap/olap_common.h +++ b/be/src/olap/olap_common.h @@ -419,8 +419,6 @@ using ColumnId = uint32_t; using UniqueIdSet = std::set<uint32_t>; // Column unique Id -> column id map using UniqueIdToColumnIdMap = std::map<ColumnId, ColumnId>; -struct RowsetId; -RowsetId next_rowset_id(); // 8 bit rowset id version // 56 bit, inc number from 1 @@ -441,7 +439,7 @@ struct RowsetId { if (ec != std::errc {}) [[unlikely]] { if (config::force_regenerate_rowsetid_on_start_error) { LOG(WARNING) << "failed to init rowset id: " << rowset_id_str; - high = next_rowset_id().hi; + high = MAX_ROWSET_ID - 1; } else { LOG(FATAL) << "failed to init rowset id: " << rowset_id_str; } diff --git a/be/src/olap/rowset/unique_rowset_id_generator.cpp b/be/src/olap/rowset/unique_rowset_id_generator.cpp index 49e07e58359..0ac7f63837a 100644 --- a/be/src/olap/rowset/unique_rowset_id_generator.cpp +++ b/be/src/olap/rowset/unique_rowset_id_generator.cpp @@ -17,17 +17,8 @@ #include "olap/rowset/unique_rowset_id_generator.h" -#include <atomic> - -#include "olap/storage_engine.h" -#include "runtime/exec_env.h" - namespace doris { -RowsetId next_rowset_id() { - return ExecEnv::GetInstance()->storage_engine().next_rowset_id(); -} - UniqueRowsetIdGenerator::UniqueRowsetIdGenerator(const UniqueId& backend_uid) : _backend_uid(backend_uid), _inc_id(1) {} diff --git a/be/test/olap/rowset/rowset_meta_test.cpp b/be/test/olap/rowset/rowset_meta_test.cpp index 881ce383810..cb1b2865c14 100644 --- a/be/test/olap/rowset/rowset_meta_test.cpp +++ b/be/test/olap/rowset/rowset_meta_test.cpp @@ -21,6 +21,7 @@ #include <gmock/gmock-matchers.h> #include <gtest/gtest-message.h> #include <gtest/gtest-test-part.h> +#include <gtest/gtest.h> #include <filesystem> #include <fstream> @@ -113,4 +114,13 @@ TEST_F(RowsetMetaTest, TestInitWithInvalidData) { EXPECT_FALSE(rowset_meta.init("invalid pb meta data")); } +TEST_F(RowsetMetaTest, TestRowsetIdInit) { + RowsetId id {}; + config::force_regenerate_rowsetid_on_start_error = true; + std::string_view rowset_id_str = "test"; + id.init(rowset_id_str); + // 0x100000000000000 - 0x01 + EXPECT_EQ(id.to_string(), "72057594037927935"); +} + } // namespace doris --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org