barrier cleanups:
* renames barrier.py to base_barrier.py and adds a barrier.py
stub to import from base_barrier and override with site_barrier
if found. barrier_unittest.py is renamed to match.
* Move BarrierAbortError to the error module with everything else.
* Add a rendezvous_servers abort=True from the server test case.
* Moved get_sync_control_file() from common_lib.utils to
server.base_utils where it belongs to avoid a circular
import of utils importing barrier.
Signed-off-by: Gregory Smith <gps@google.com>
git-svn-id: http://test.kernel.org/svn/autotest/trunk@4444 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/client/common_lib/utils.py b/client/common_lib/utils.py
index 2ceca35..1113ca0 100644
--- a/client/common_lib/utils.py
+++ b/client/common_lib/utils.py
@@ -8,7 +8,7 @@
import hashlib
except ImportError:
import md5, sha
-from autotest_lib.client.common_lib import error, barrier, logging_manager
+from autotest_lib.client.common_lib import error, logging_manager
def deprecated(func):
"""This is a decorator which can be used to mark functions as deprecated.
@@ -761,112 +761,6 @@
return cpu_percent, to_return
-"""
-This function is used when there is a need to run more than one
-job simultaneously starting exactly at the same time. It basically returns
-a modified control file (containing the synchronization code prepended)
-whenever it is ready to run the control file. The synchronization
-is done using barriers to make sure that the jobs start at the same time.
-
-Here is how the synchronization is done to make sure that the tests
-start at exactly the same time on the client.
-sc_bar is a server barrier and s_bar, c_bar are the normal barriers
-
- Job1 Job2 ...... JobN
- Server: | sc_bar
- Server: | s_bar ...... s_bar
- Server: | at.run() at.run() ...... at.run()
- ----------|------------------------------------------------------
- Client | sc_bar
- Client | c_bar c_bar ...... c_bar
- Client | <run test> <run test> ...... <run test>
-
-
-PARAMS:
- control_file : The control file which to which the above synchronization
- code would be prepended to
- host_name : The host name on which the job is going to run
- host_num (non negative) : A number to identify the machine so that we have
- different sets of s_bar_ports for each of the machines.
- instance : The number of the job
- num_jobs : Total number of jobs that are going to run in parallel with
- this job starting at the same time
- port_base : Port number that is used to derive the actual barrier ports.
-
-RETURN VALUE:
- The modified control file.
-
-"""
-def get_sync_control_file(control, host_name, host_num,
- instance, num_jobs, port_base=63100):
- sc_bar_port = port_base
- c_bar_port = port_base
- if host_num < 0:
- print "Please provide a non negative number for the host"
- return None
- s_bar_port = port_base + 1 + host_num # The set of s_bar_ports are
- # the same for a given machine
-
- sc_bar_timeout = 180
- s_bar_timeout = c_bar_timeout = 120
-
- # The barrier code snippet is prepended into the conrol file
- # dynamically before at.run() is called finally.
- control_new = []
-
- # jobid is the unique name used to identify the processes
- # trying to reach the barriers
- jobid = "%s#%d" % (host_name, instance)
-
- rendv = []
- # rendvstr is a temp holder for the rendezvous list of the processes
- for n in range(num_jobs):
- rendv.append("'%s#%d'" % (host_name, n))
- rendvstr = ",".join(rendv)
-
- if instance == 0:
- # Do the setup and wait at the server barrier
- # Clean up the tmp and the control dirs for the first instance
- control_new.append('if os.path.exists(job.tmpdir):')
- control_new.append("\t system('umount -f %s > /dev/null"
- "2> /dev/null' % job.tmpdir,"
- "ignore_status=True)")
- control_new.append("\t system('rm -rf ' + job.tmpdir)")
- control_new.append(
- 'b0 = job.barrier("%s", "sc_bar", %d, port=%d)'
- % (jobid, sc_bar_timeout, sc_bar_port))
- control_new.append(
- 'b0.rendezvous_servers("PARALLEL_MASTER", "%s")'
- % jobid)
-
- elif instance == 1:
- # Wait at the server barrier to wait for instance=0
- # process to complete setup
- b0 = barrier.barrier("PARALLEL_MASTER", "sc_bar", sc_bar_timeout,
- port=sc_bar_port)
- b0.rendezvous_servers("PARALLEL_MASTER", jobid)
-
- if(num_jobs > 2):
- b1 = barrier.barrier(jobid, "s_bar", s_bar_timeout,
- port=s_bar_port)
- b1.rendezvous(rendvstr)
-
- else:
- # For the rest of the clients
- b2 = barrier.barrier(jobid, "s_bar", s_bar_timeout, port=s_bar_port)
- b2.rendezvous(rendvstr)
-
- # Client side barrier for all the tests to start at the same time
- control_new.append('b1 = job.barrier("%s", "c_bar", %d, port=%d)'
- % (jobid, c_bar_timeout, c_bar_port))
- control_new.append("b1.rendezvous(%s)" % rendvstr)
-
- # Stick in the rest of the control file
- control_new.append(control)
-
- return "\n".join(control_new)
-
-
def get_arch(run_function=run):
"""
Get the hardware architecture of the machine.