Prevent balance-xor from de-allocating from bad paths

This commit is contained in:
Joseph Henry 2021-10-20 10:48:07 -07:00
parent b277e04efa
commit cc6de583be
No known key found for this signature in database
GPG Key ID: C45B33FF5EBC9344

View File

@ -1155,16 +1155,6 @@ void Bond::estimatePathQuality(int64_t now)
void Bond::processBalanceTasks(int64_t now)
{
char pathStr[64] = { 0 };
int totalAllocation = 0;
for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) {
if (! _paths[i].p) {
continue;
}
if (_paths[i].p && _paths[i].bonded && _paths[i].eligible) {
totalAllocation += _paths[i].allocation;
}
}
unsigned char minimumAllocationValue = (uint8_t)(0.33 * ((float)totalAllocation / (float)_numBondedPaths));
if (_allowFlowHashing) {
/**
@ -1209,7 +1199,18 @@ void Bond::processBalanceTasks(int64_t now)
* Re-allocate flows from under-performing
* NOTE: This could be part of the above block but was kept separate for clarity.
*/
if (_policy == ZT_BOND_POLICY_BALANCE_XOR || _policy == ZT_BOND_POLICY_BALANCE_AWARE) {
if (_policy == ZT_BOND_POLICY_BALANCE_AWARE) {
int totalAllocation = 0;
for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) {
if (! _paths[i].p) {
continue;
}
if (_paths[i].p && _paths[i].bonded && _paths[i].eligible) {
totalAllocation += _paths[i].allocation;
}
}
unsigned char minimumAllocationValue = (uint8_t)(0.33 * ((float)totalAllocation / (float)_numBondedPaths));
Mutex::Lock _l(_flows_m);
for (int i = 0; i < ZT_MAX_PEER_NETWORK_PATHS; ++i) {
if (! _paths[i].p) {
@ -1754,7 +1755,7 @@ void Bond::dumpPathStatus(int64_t now, int pathIdx)
{
char pathStr[64] = { 0 };
_paths[pathIdx].p->address().toString(pathStr);
log("path status: [%2d] alive:%d, eli:%d, bonded:%d, flows:%6d, lat:%10.3f, jitter:%10.3f, error:%6.4f, loss:%6.4f, age:%6d --- (%s/%s)",
log("path status: [%2d] alive:%d, eli:%d, bonded:%d, flows:%6d, lat:%10.3f, jitter:%10.3f, error:%6.4f, loss:%6.4f, age:%6d alloc:%d--- (%s/%s)",
pathIdx,
_paths[pathIdx].alive,
_paths[pathIdx].eligible,
@ -1765,6 +1766,7 @@ void Bond::dumpPathStatus(int64_t now, int pathIdx)
_paths[pathIdx].packetErrorRatio,
_paths[pathIdx].packetLossRatio,
_paths[pathIdx].p->age(now),
_paths[pathIdx].allocation,
getLink(_paths[pathIdx].p)->ifname().c_str(),
pathStr);
}