diff --git a/fdbserver/DDRelocationQueue.actor.cpp b/fdbserver/DDRelocationQueue.actor.cpp index d028420dbd..93693f1e2b 100644 --- a/fdbserver/DDRelocationQueue.actor.cpp +++ b/fdbserver/DDRelocationQueue.actor.cpp @@ -1297,9 +1297,9 @@ ACTOR Future dataDistributionRelocator(DDQueue* self, TeamSelect destTeamSelect; if (!rd.wantsNewServers) { - destTeamSelect = TeamSelect::WANT_SRCSERVERS; + destTeamSelect = TeamSelect::WANT_COMPLETE_SRCS; } else if (wantTrueBest) { - destTeamSelect = TeamSelect::WANT_TRUEBEST; + destTeamSelect = TeamSelect::WANT_TRUE_BEST; } else { destTeamSelect = TeamSelect::ANY; } @@ -2148,12 +2148,12 @@ ACTOR Future BgDDLoadRebalance(DDQueue* self, int teamCollectionIndex, Dat if (self->priority_relocations[ddPriority] < SERVER_KNOBS->DD_REBALANCE_PARALLELISM) { bool mcMove = isDataMovementForMountainChopper(reason); - GetTeamRequest srcReq = GetTeamRequest(mcMove ? TeamSelect::WANT_TRUEBEST : TeamSelect::ANY, + GetTeamRequest srcReq = GetTeamRequest(mcMove ? TeamSelect::WANT_TRUE_BEST : TeamSelect::ANY, PreferLowerDiskUtil::False, TeamMustHaveShards::True, ForReadBalance(readRebalance), PreferLowerReadUtil::False); - GetTeamRequest destReq = GetTeamRequest(!mcMove ? TeamSelect::WANT_TRUEBEST : TeamSelect::ANY, + GetTeamRequest destReq = GetTeamRequest(!mcMove ? TeamSelect::WANT_TRUE_BEST : TeamSelect::ANY, PreferLowerDiskUtil::True, TeamMustHaveShards::False, ForReadBalance(readRebalance), diff --git a/fdbserver/DDTeamCollection.actor.cpp b/fdbserver/DDTeamCollection.actor.cpp index 85c8363147..ca1b084466 100644 --- a/fdbserver/DDTeamCollection.actor.cpp +++ b/fdbserver/DDTeamCollection.actor.cpp @@ -295,7 +295,7 @@ public: } // Note: this block does not apply any filters from the request - if (req.teamSelect == TeamSelect::WANT_SRCSERVERS) { + if (req.teamSelect == TeamSelect::WANT_COMPLETE_SRCS) { auto healthyTeam = self->findTeamFromServers(req.completeSources, /* wantHealthy=*/true); if (healthyTeam.present()) { req.reply.send(std::make_pair(healthyTeam, foundSrc)); @@ -303,7 +303,7 @@ public: } } - if (req.teamSelect == TeamSelect::WANT_TRUEBEST) { + if (req.teamSelect == TeamSelect::WANT_TRUE_BEST) { ASSERT(!bestOption.present()); auto& startIndex = req.preferLowerDiskUtil ? self->lowestUtilizationTeam : self->highestUtilizationTeam; if (startIndex >= self->teams.size()) { @@ -5726,7 +5726,7 @@ public: */ std::vector completeSources{ UID(1, 0), UID(2, 0), UID(3, 0) }; - state GetTeamRequest req(TeamSelect::WANT_SRCSERVERS, PreferLowerDiskUtil::True, TeamMustHaveShards::False); + state GetTeamRequest req(TeamSelect::WANT_COMPLETE_SRCS, PreferLowerDiskUtil::True, TeamMustHaveShards::False); req.completeSources = completeSources; wait(collection->getTeam(req)); @@ -5777,7 +5777,7 @@ public: */ std::vector completeSources{ UID(1, 0), UID(2, 0), UID(3, 0), UID(4, 0) }; - state GetTeamRequest req(TeamSelect::WANT_SRCSERVERS, PreferLowerDiskUtil::True, TeamMustHaveShards::False); + state GetTeamRequest req(TeamSelect::WANT_COMPLETE_SRCS, PreferLowerDiskUtil::True, TeamMustHaveShards::False); req.completeSources = completeSources; wait(collection->getTeam(req)); @@ -5826,7 +5826,7 @@ public: std::vector completeSources{ UID(1, 0), UID(2, 0), UID(3, 0) }; - state GetTeamRequest req(TeamSelect::WANT_TRUEBEST, PreferLowerDiskUtil::True, TeamMustHaveShards::False); + state GetTeamRequest req(TeamSelect::WANT_TRUE_BEST, PreferLowerDiskUtil::True, TeamMustHaveShards::False); req.completeSources = completeSources; wait(collection->getTeam(req)); @@ -5874,7 +5874,7 @@ public: */ std::vector completeSources{ UID(1, 0), UID(2, 0), UID(3, 0) }; - state GetTeamRequest req(TeamSelect::WANT_TRUEBEST, PreferLowerDiskUtil::False, TeamMustHaveShards::False); + state GetTeamRequest req(TeamSelect::WANT_TRUE_BEST, PreferLowerDiskUtil::False, TeamMustHaveShards::False); req.completeSources = completeSources; wait(collection->getTeam(req)); @@ -5924,7 +5924,7 @@ public: */ std::vector completeSources{ UID(1, 0), UID(2, 0), UID(3, 0) }; - state GetTeamRequest req(TeamSelect::WANT_TRUEBEST, PreferLowerDiskUtil::True, TeamMustHaveShards::False); + state GetTeamRequest req(TeamSelect::WANT_TRUE_BEST, PreferLowerDiskUtil::True, TeamMustHaveShards::False); req.completeSources = completeSources; wait(collection->getTeam(req)); @@ -5979,7 +5979,7 @@ public: */ std::vector completeSources{ UID(1, 0), UID(2, 0), UID(3, 0) }; - state GetTeamRequest req(TeamSelect::WANT_TRUEBEST, PreferLowerDiskUtil::True, TeamMustHaveShards::False); + state GetTeamRequest req(TeamSelect::WANT_TRUE_BEST, PreferLowerDiskUtil::True, TeamMustHaveShards::False); req.completeSources = completeSources; wait(collection->getTeam(req)); @@ -6022,14 +6022,14 @@ public: auto forReadBalance = ForReadBalance::True; std::vector completeSources{ UID(1, 0), UID(2, 0), UID(3, 0) }; - state GetTeamRequest req(TeamSelect::WANT_TRUEBEST, + state GetTeamRequest req(TeamSelect::WANT_TRUE_BEST, preferLowerDiskUtil, teamMustHaveShards, forReadBalance, PreferLowerReadUtil::True); req.completeSources = completeSources; - state GetTeamRequest reqHigh(TeamSelect::WANT_TRUEBEST, + state GetTeamRequest reqHigh(TeamSelect::WANT_TRUE_BEST, PreferLowerDiskUtil::False, teamMustHaveShards, forReadBalance, @@ -6092,7 +6092,7 @@ public: std::vector completeSources{ UID(1, 0), UID(2, 0), UID(3, 0) }; - state GetTeamRequest req(TeamSelect::WANT_TRUEBEST, PreferLowerDiskUtil::True, TeamMustHaveShards::False); + state GetTeamRequest req(TeamSelect::WANT_TRUE_BEST, PreferLowerDiskUtil::True, TeamMustHaveShards::False); req.completeSources = completeSources; wait(collection->getTeam(req)); diff --git a/fdbserver/include/fdbserver/DataDistributionTeam.h b/fdbserver/include/fdbserver/DataDistributionTeam.h index 3f1de403e5..8dfa6e3ac0 100644 --- a/fdbserver/include/fdbserver/DataDistributionTeam.h +++ b/fdbserver/include/fdbserver/DataDistributionTeam.h @@ -72,24 +72,24 @@ FDB_DECLARE_BOOLEAN_PARAM(FindTeamByServers); class TeamSelect { public: enum Value : int8_t { - ANY = 0, // Any other situations - WANT_SRCSERVERS, // Ask for srcTeam - WANT_TRUEBEST, // Ask for the most or least utilized team + ANY = 0, // Any other situations except for the next two + WANT_COMPLETE_SRCS, // Try best to select a healthy team consists of servers in completeSources + WANT_TRUE_BEST, // Ask for the most or least utilized team in the cluster }; TeamSelect() : value(ANY) {} TeamSelect(Value v) : value(v) {} std::string toString() const { switch (value) { - case WANT_SRCSERVERS: - return "Want_SrcServers"; - case WANT_TRUEBEST: - return "Want_TrueBest"; + case WANT_COMPLETE_SRCS: + return "Want_Complete_Srcs"; + case WANT_TRUE_BEST: + return "Want_True_Best"; case ANY: return "Any"; } } - bool operator==(const TeamSelect& tmpTeamSelect) { return (int)value == (int)tmpTeamSelect.value; } + bool operator==(const TeamSelect& tmpTeamSelect) { return value == tmpTeamSelect.value; } private: Value value; @@ -104,8 +104,15 @@ struct GetTeamRequest { double inflightPenalty; bool findTeamByServers; Optional keys; + + // completeSources have all shards in the key range being considered for movement, src have at least 1 shard in the + // key range for movement. From the point of set, completeSources is the Intersection set of several , + // while src is the Union set of them. E.g. keyRange = [Shard_1, Shard_2), and Shard_1 is located at {Server_1, + // Server_2, Server_3}, Shard_2 is located at {Server_2, Server_3, Server_4}. completeSources = {Server_2, + // Server_3}, src = {Server_1, Server_2, Server_3, Server_4} std::vector completeSources; std::vector src; + Promise>, bool>> reply; typedef Reference TeamRef; @@ -122,7 +129,7 @@ struct GetTeamRequest { forReadBalance(forReadBalance), preferLowerReadUtil(preferLowerReadUtil), inflightPenalty(inflightPenalty), findTeamByServers(FindTeamByServers::False), keys(keys) {} GetTeamRequest(std::vector servers) - : teamSelect(TeamSelect::WANT_SRCSERVERS), preferLowerDiskUtil(PreferLowerDiskUtil::False), + : teamSelect(TeamSelect::WANT_COMPLETE_SRCS), preferLowerDiskUtil(PreferLowerDiskUtil::False), teamMustHaveShards(TeamMustHaveShards::False), forReadBalance(ForReadBalance::False), preferLowerReadUtil(PreferLowerReadUtil::False), inflightPenalty(1.0), findTeamByServers(FindTeamByServers::True), src(std::move(servers)) {}