From de5bcaf58809b1011b42dd393c93497c45fa9ddf Mon Sep 17 00:00:00 2001 From: Meng Xu Date: Mon, 1 Jul 2019 21:11:23 -0700 Subject: [PATCH] minTeamNumber for server and machine cannot be uint64_t Because the consistency check will try to conver the value to int64_t. If no server exists, the variable will not be updated and thus get overflowed when it is converted to int64_t --- fdbserver/DataDistribution.actor.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index c3a3e1a622..6c2c6acd2e 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -1596,28 +1596,28 @@ struct DDTeamCollection : ReferenceCounted { return totalHealthyMachineCount; } - std::pair calculateMinMaxServerTeamNumOnServer() { - uint64_t minTeamNumber = std::numeric_limits::max(); - uint64_t maxTeamNumber = 0; + std::pair calculateMinMaxServerTeamNumOnServer() { + int64_t minTeamNumber = std::numeric_limits::max(); + int64_t maxTeamNumber = 0; for (auto& server : server_info) { if (server_status.get(server.first).isUnhealthy()) { continue; } - minTeamNumber = std::min(server.second->teams.size(), minTeamNumber); - maxTeamNumber = std::max(server.second->teams.size(), maxTeamNumber); + minTeamNumber = std::min((int64_t) server.second->teams.size(), minTeamNumber); + maxTeamNumber = std::max((int64_t) server.second->teams.size(), maxTeamNumber); } return std::make_pair(minTeamNumber, maxTeamNumber); } - std::pair calculateMinMaxMachineTeamNumOnMachine() { - uint64_t minTeamNumber = std::numeric_limits::max(); - uint64_t maxTeamNumber = 0; + std::pair calculateMinMaxMachineTeamNumOnMachine() { + int64_t minTeamNumber = std::numeric_limits::max(); + int64_t maxTeamNumber = 0; for (auto& machine : machine_info) { if (!isMachineHealthy(machine.second)) { continue; } - minTeamNumber = std::min(machine.second->machineTeams.size(), minTeamNumber); - maxTeamNumber = std::max(machine.second->machineTeams.size(), maxTeamNumber); + minTeamNumber = std::min((int64_t) machine.second->machineTeams.size(), minTeamNumber); + maxTeamNumber = std::max((int64_t) machine.second->machineTeams.size(), maxTeamNumber); } return std::make_pair(minTeamNumber, maxTeamNumber); }