# This "test" is used by autotest_lib.server.standalone_profilers to start
# and stop profilers on a collection of hosts at approximately the same
# time by synchronizing using barriers.
from autotest_lib.client.bin import test
from autotest_lib.client.common_lib import barrier
class profiler_sync(test.test):
version = 1
def execute(self, timeout_sync, timeout_start, timeout_stop,
hostid, masterid, all_ids):
"""
@param timeout_sync: Seconds to wait for the synchronization of all
hosts that will be launching profilers. (local_sync_profilers)
@param timeout_start: Seconds to wait for each of the initial
sync_profilers and start_profilers barriers between this
host and the master to be reached.
@param timeout_stop: Seconds to wait for this host and the master to
reach each of the stop_profilers and finish_profilers barriers.
@param hostid: This host's id (typically the hostname).
@param masterid: The master barrier host id where autoserv is running.
@param all_ids: A list of all hosts to synchronize profilers on.
"""
profilers = self.job.profilers
barrier_server = barrier.listen_server(port=11920)
b0 = self.job.barrier(hostid, "sync_profilers", timeout_start,
listen_server=barrier_server)
b0.rendezvous_servers(masterid, hostid)
b1 = self.job.barrier(hostid, "start_profilers", timeout_start,
listen_server=barrier_server)
b1.rendezvous_servers(masterid, hostid)
b2 = self.job.barrier(hostid, "local_sync_profilers", timeout_sync)
b2.rendezvous(*all_ids)
profilers.start(self)
b3 = self.job.barrier(hostid, "stop_profilers", timeout_stop,
listen_server=barrier_server)
b3.rendezvous_servers(masterid, hostid)
profilers.stop(self)
profilers.report(self)
b4 = self.job.barrier(hostid, "finish_profilers", timeout_stop,
listen_server=barrier_server)
b4.rendezvous_servers(masterid, hostid)
barrier_server.close()