in benchmark/benchmark/remote.py [0:0]
def _select_hosts(self, bench_parameters):
# Collocate the primary and its workers on the same machine.
if bench_parameters.collocate:
nodes = max(bench_parameters.nodes)
# Ensure there are enough hosts.
hosts = self.manager.hosts()
if sum(len(x) for x in hosts.values()) < nodes:
return []
# Select the hosts in different data centers.
ordered = zip(*hosts.values())
ordered = [x for y in ordered for x in y]
return ordered[:nodes]
# Spawn the primary and each worker on a different machine. Each
# authority runs in a single data center.
else:
primaries = max(bench_parameters.nodes)
# Ensure there are enough hosts.
hosts = self.manager.hosts()
if len(hosts.keys()) < primaries:
return []
for ips in hosts.values():
if len(ips) < bench_parameters.workers + 1:
return []
# Ensure the primary and its workers are in the same region.
selected = []
for region in list(hosts.keys())[:primaries]:
ips = list(hosts[region])[:bench_parameters.workers + 1]
selected.append(ips)
return selected