mirror of https://github.com/apache/druid.git
Randomly choose a server when multiple best servers are available (#3822)
* Randomly choose a server when multiple best servers are available * Use one pass instead of two * Fix code style issues
This commit is contained in:
parent
3c63cff57a
commit
a5f82e8acf
|
@ -32,6 +32,7 @@ import io.druid.timeline.DataSegment;
|
||||||
import org.apache.commons.math3.util.FastMath;
|
import org.apache.commons.math3.util.FastMath;
|
||||||
import org.joda.time.Interval;
|
import org.joda.time.Interval;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
|
@ -348,13 +349,20 @@ public class CostBalancerStrategy implements BalancerStrategy
|
||||||
}
|
}
|
||||||
|
|
||||||
final ListenableFuture<List<Pair<Double, ServerHolder>>> resultsFuture = Futures.allAsList(futures);
|
final ListenableFuture<List<Pair<Double, ServerHolder>>> resultsFuture = Futures.allAsList(futures);
|
||||||
|
final List<Pair<Double, ServerHolder>> bestServers = new ArrayList<>();
|
||||||
|
bestServers.add(bestServer);
|
||||||
try {
|
try {
|
||||||
for (Pair<Double, ServerHolder> server : resultsFuture.get()) {
|
for (Pair<Double, ServerHolder> server : resultsFuture.get()) {
|
||||||
if (server.lhs < bestServer.lhs) {
|
if (server.lhs <= bestServers.get(0).lhs) {
|
||||||
bestServer = server;
|
if (server.lhs < bestServers.get(0).lhs) {
|
||||||
|
bestServers.clear();
|
||||||
|
}
|
||||||
|
bestServers.add(server);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Randomly choose a server from the best servers
|
||||||
|
bestServer = bestServers.get((int) Math.random() * bestServers.size());
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
log.makeAlert(e, "Cost Balancer Multithread strategy wasn't able to complete cost computation.").emit();
|
log.makeAlert(e, "Cost Balancer Multithread strategy wasn't able to complete cost computation.").emit();
|
||||||
|
|
Loading…
Reference in New Issue