Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Duplicate
-
1.0.0
-
None
-
None
Description
numMaxRegionsPerTable will be updated in BaseLoadBalancer.regionMoved(...) as:
void regionMoved(int region, int oldServer, int newServer) { .... int tableIndex = regionIndexToTableIndex[region]; if (oldServer >= 0) { numRegionsPerServerPerTable[oldServer][tableIndex]--; } numRegionsPerServerPerTable[newServer][tableIndex]++; //check whether this caused maxRegionsPerTable in the new Server to be updated if (numRegionsPerServerPerTable[newServer][tableIndex] > numMaxRegionsPerTable[tableIndex]) { numRegionsPerServerPerTable[newServer][tableIndex] = numMaxRegionsPerTable[tableIndex]; // ==> should be: numMaxRegionsPerTable[tableIndex] = numRegionsPerServerPerTable[newServer][tableIndex]; } else if (oldServer >= 0 && (numRegionsPerServerPerTable[oldServer][tableIndex] + 1) == numMaxRegionsPerTable[tableIndex]) { //recompute maxRegionsPerTable since the previous value was coming from the old server // ===> should reset numMaxRegionsPerTable[tableIndex] before recompute : numMaxRegionsPerTable[tableIndex] = 0; for (int serverIndex = 0 ; serverIndex < numRegionsPerServerPerTable.length; serverIndex++) { if (numRegionsPerServerPerTable[serverIndex][tableIndex] > numMaxRegionsPerTable[tableIndex]) { numMaxRegionsPerTable[tableIndex] = numRegionsPerServerPerTable[serverIndex][tableIndex]; } } }
It seems that numMaxRegionsPerTable is not updated correctly as shown above.