102fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh# This is used directly by server/tests/barriertest/control.srv 202fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh 302fc0b9199aa71c7f801aee4fcd4b86513e8facbmblighimport logging, time 4f20b9cd8a026723ff11204281d281eac7b06c81dmblighfrom autotest_lib.client.bin import test 5999fb13dcbf4de5e37ca2b3059ef1061b5faba43mblighfrom autotest_lib.client.common_lib import barrier, error 6e1417fa0334ac4e2ab6064e42de0bb891e561057mbligh 7e74782b6199beac161ebd9e9ccd2266a97434821mbligh 802fc0b9199aa71c7f801aee4fcd4b86513e8facbmblighclass barriertest(test.test): 902fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh version = 2 1002fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh 1102fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh 12999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh def run_once(self, our_addr, hostnames, master, timeout=120): 1302fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh # A reusable local server as we're using multiple barriers in one test. 1402fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh server = barrier.listen_server() 1502fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh 1602fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh # Basic barrier rendezvous test. 17999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh self.job.barrier(our_addr, 'First', timeout=timeout, 18999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh listen_server=server).rendezvous(*hostnames) 1902fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh logging.info('1. rendezvous "First" complete.') 2002fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh time.sleep(2) 2102fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh 2202fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh # A rendezvous_servers using a different master than the default. 23999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh self.job.barrier(our_addr, 'Second', timeout=timeout, 24999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh listen_server=server 2502fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh ).rendezvous_servers(hostnames[-1], *hostnames[:-1]) 2602fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh logging.info('2. rendezvous_servers "Second" complete.') 2702fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh time.sleep(2) 2802fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh 2902fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh # A regular rendezvous, this time testing the abort functionality. 3002fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh try: 31999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh self.job.barrier(our_addr, 'WillAbort', timeout=timeout, 3202fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh listen_server=server 3302fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh ).rendezvous(abort=True, *hostnames) 34999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh except error.BarrierAbortError: 3502fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh pass 36999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh except error.BarrierError, e: 37999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh # We did get an error from the barrier, but was is acceptable or 38999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh # not? Site code may not be able to indicate an explicit abort. 39999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh self.job.record('WARN', None, 'barriertest', 40999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh 'BarrierError %s instead of BarrierAbortError.' % e) 4102fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh else: 4202fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh raise error.TestFail('Explicit barrier rendezvous abort failed.') 43999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh logging.info('3. rendezvous(abort=True) complete.') 4402fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh time.sleep(2) 4502fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh 4602fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh # Now attempt a rendezvous_servers that also includes the server. 47999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh self.job.barrier(our_addr, 'FinalSync', timeout=timeout, 48999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh listen_server=server 4902fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh ).rendezvous_servers(master, *hostnames) 50999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh logging.info('4. rendezvous_servers "FinalSync" complete.') 51999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh time.sleep(2) 52999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh 53999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh # rendezvous_servers, aborted from the master. 54999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh try: 55999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh self.job.barrier(our_addr, 'WillAbortServers', timeout=timeout, 56999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh listen_server=server 57999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh ).rendezvous_servers(master, *hostnames) 58999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh except error.BarrierAbortError: 59999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh pass 60999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh except error.BarrierError, e: 61999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh # We did get an error from the barrier, but was is acceptable or 62999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh # not? Site code may not be able to indicate an explicit abort. 63999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh self.job.record('WARN', None, 'barriertest', 64999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh 'BarrierError %s instead of BarrierAbortError.' % e) 65999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh else: 66999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh raise error.TestFail('Explicit barrier rendezvous abort failed.') 67999fb13dcbf4de5e37ca2b3059ef1061b5faba43mbligh logging.info('5. rendezvous_servers(abort=True) complete.') 6802fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh time.sleep(2) 6902fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh 7002fc0b9199aa71c7f801aee4fcd4b86513e8facbmbligh server.close() 71