From 4199e546c0c5b5f79aa764f2027f298eedb020b0 Mon Sep 17 00:00:00 2001 From: Lwy_Robb Date: Sat, 29 Nov 2025 11:23:26 +0800 Subject: [PATCH] =?UTF-8?q?bugfix:=20group=E4=BF=9D=E5=BA=8F&=E5=BC=82?= =?UTF-8?q?=E6=9E=84=E8=B0=83=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../schedule_decision/queue/time_sorted_queue.h | 7 ++++++- functionsystem/src/common/utils/struct_transfer.h | 14 +++++++++++++- .../unit/common/utils/struct_transfer_test.cpp | 5 ++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/functionsystem/src/common/schedule_decision/queue/time_sorted_queue.h b/functionsystem/src/common/schedule_decision/queue/time_sorted_queue.h index 888782f..c0d4834 100644 --- a/functionsystem/src/common/schedule_decision/queue/time_sorted_queue.h +++ b/functionsystem/src/common/schedule_decision/queue/time_sorted_queue.h @@ -23,7 +23,12 @@ namespace functionsystem::schedule_decision { inline bool operator>(const std::shared_ptr &r, const std::shared_ptr &l) { - return r->CreatedTimestamp() > l->CreatedTimestamp(); + const auto &rt = r->CreatedTimestamp(); + const auto < = l->CreatedTimestamp(); + if (rt == lt) { + return r->GetRequestId() > l->GetRequestId(); + } + return rt > lt; } using TimePriorityQueue = std::priority_queue, std::vector>, std::greater>>; diff --git a/functionsystem/src/common/utils/struct_transfer.h b/functionsystem/src/common/utils/struct_transfer.h index c40e438..30f58e0 100644 --- a/functionsystem/src/common/utils/struct_transfer.h +++ b/functionsystem/src/common/utils/struct_transfer.h @@ -641,6 +641,7 @@ static int GetRuntimeRecoverTimes(const resources::InstanceInfo &instanceInfo) } auto required = scheduleReq->instance().resources().resources(); + std::vector taggedHeteroKey; for (const auto &res : required) { auto resourceNameFields = litebus::strings::Split(res.first, "/"); if (resourceNameFields.size() != HETERO_RESOURCE_FIELD_NUM) { @@ -656,8 +657,19 @@ static int GetRuntimeRecoverTimes(const resources::InstanceInfo &instanceInfo) (*createOpt)["func-" + vendor + "-DEVICE-IDS"] = deviceIDsStr; YRLOG_INFO("{}|{}: {} will be allocated to instance: {}", vendor, scheduleReq->requestid(), deviceIDsStr, scheduleReq->instance().instanceid()); + taggedHeteroKey.emplace_back(res.first); + } + if (scheduleReq->mutable_instance()->scheduleoption().target() == resources::CreateTarget::RESOURCE_GROUP + && !taggedHeteroKey.empty()) { + YRLOG_INFO("{}|{}|update heteroInfo result for bundle of resource group, ({}) would be removed", + scheduleReq->requestid(), scheduleReq->instance().instanceid(), + fmt::join(taggedHeteroKey.begin(), taggedHeteroKey.end(), ",")); + // resource group the origin request should be removed + for (auto key : taggedHeteroKey) { + auto required = scheduleReq->mutable_instance()->mutable_resources(); + required->mutable_resources()->erase(key); + } } - // add hetero schedule result to instance info (for instance recover) auto *resources = scheduleReq->mutable_instance()->mutable_resources()->mutable_resources(); for (const auto &allocated : result.allocatedVectors) { diff --git a/functionsystem/tests/unit/common/utils/struct_transfer_test.cpp b/functionsystem/tests/unit/common/utils/struct_transfer_test.cpp index 543c109..289d953 100644 --- a/functionsystem/tests/unit/common/utils/struct_transfer_test.cpp +++ b/functionsystem/tests/unit/common/utils/struct_transfer_test.cpp @@ -79,7 +79,7 @@ TEST_F(StructTransferTest, MergeScheduleResultToRequest) *req->mutable_instance() = scheduleInstance; req->set_requestid(scheduleInstance.requestid()); req->set_traceid("traceID_" + litebus::uuid_generator::UUID::GetRandomUUID().ToString()); - + req->mutable_instance()->mutable_scheduleoption()->set_target(resources::CreateTarget::RESOURCE_GROUP); schedule_decision::ScheduleResult result; result.id = DEFAULT_UNIT_ID; result.unitID = DEFAULT_UNIT_ID; @@ -107,6 +107,9 @@ TEST_F(StructTransferTest, MergeScheduleResultToRequest) ASSERT_NE(heteroResource, resources.end()); EXPECT_EQ(heteroResource->second.type(), resource_view::ValueType::Value_Type_VECTORS); EXPECT_EQ(heteroResource->second.name(), DEFAULT_CARD_TYPE); + // rg which should be removed + EXPECT_EQ(resources.find(view_utils::DEFAULT_NPU_TYPE + "/" + resource_view::HETEROGENEOUS_CARDNUM_KEY), + resources.end()); const auto& heteroVectors = heteroResource->second.vectors().values(); auto heteroCategory = heteroVectors.find(resource_view::HETEROGENEOUS_MEM_KEY); -- Gitee