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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]