diff --git a/deps/oblib/src/lib/worker.cpp b/deps/oblib/src/lib/worker.cpp index a5b772597..716bd75ef 100644 --- a/deps/oblib/src/lib/worker.cpp +++ b/deps/oblib/src/lib/worker.cpp @@ -85,6 +85,29 @@ Worker::Status Worker::check_wait() return ret_status; } +const uint64_t OBCG_DEFAULT_GROUP_ID = 0; +const uint64_t USER_RESOURCE_GROUP_START_ID = 10000; +const uint64_t OB_INVALID_GROUP_ID = UINT64_MAX; +OB_INLINE bool is_user_group(const uint64_t group_id) +{ + return group_id >= USER_RESOURCE_GROUP_START_ID && group_id != OB_INVALID_GROUP_ID; +} + +OB_INLINE bool is_valid_resource_group(const uint64_t group_id) +{ + // other group or user group + return group_id == OBCG_DEFAULT_GROUP_ID || is_user_group(group_id); +} + +void Worker::set_group_id(int32_t group_id) +{ + const int64_t USER_RESOURCE_GROUP_START_ID = 10000; + if (OBCG_DEFAULT_GROUP_ID == group_id_ || (is_user_group(group_id_) && is_valid_resource_group(group_id))) { + group_id_ = group_id; + } else { + LOG_ERROR_RET(OB_INNER_STAT_ERROR, "group_id is unexpected", K(group_id_), K(group_id)); + } +} bool Worker::sched_wait() { diff --git a/deps/oblib/src/lib/worker.h b/deps/oblib/src/lib/worker.h index e9157d2b8..2ddacc7b1 100644 --- a/deps/oblib/src/lib/worker.h +++ b/deps/oblib/src/lib/worker.h @@ -81,7 +81,7 @@ public: OB_INLINE void set_curr_request_level(const int32_t level) { curr_request_level_ = level; } OB_INLINE int32_t get_curr_request_level() const { return curr_request_level_; } - OB_INLINE void set_group_id(int32_t group_id) { group_id_ = group_id; } + void set_group_id(int32_t group_id); OB_INLINE int32_t get_group_id() const { return group_id_; } OB_INLINE void set_rpc_stat_srv(void *rpc_stat_srv) { rpc_stat_srv_ = rpc_stat_srv; } diff --git a/src/share/io/ob_io_define.cpp b/src/share/io/ob_io_define.cpp index 8bf6a6b2d..6a9053ccd 100644 --- a/src/share/io/ob_io_define.cpp +++ b/src/share/io/ob_io_define.cpp @@ -170,7 +170,11 @@ ObIOMode ObIOFlag::get_mode() const void ObIOFlag::set_resource_group_id(const uint64_t group_id) { - group_id_ = group_id; + if (!is_valid_resource_group(group_id)) { + group_id_ = USER_RESOURCE_OTHER_GROUP_ID; + } else { + group_id_ = group_id; + } } void ObIOFlag::set_wait_event(int64_t wait_event_id) diff --git a/unittest/storage/test_io_manager.cpp b/unittest/storage/test_io_manager.cpp index 6839b8db1..796281458 100644 --- a/unittest/storage/test_io_manager.cpp +++ b/unittest/storage/test_io_manager.cpp @@ -177,12 +177,6 @@ TEST_F(TestIOStruct, IOFlag) flag2.set_mode((ObIOMode)88); ASSERT_FALSE(flag2.is_valid()); - // test io group - flag2 = flag; - ASSERT_TRUE(flag2.is_valid()); - flag2.set_resource_group_id(OB_INVALID_GROUP_ID); - ASSERT_FALSE(flag2.is_valid()); - // test wait event number flag2 = flag; ASSERT_TRUE(flag2.is_valid());