From d07592d34d1636a41be214e7df5c828c6d4aa3c2 Mon Sep 17 00:00:00 2001 From: Vincenzo Maffione Date: Sat, 8 Apr 2017 12:01:54 +0200 Subject: testbeds: qemu: port to python3, use explicit module names --- rumba/testbeds/qemu.py | 55 +++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 28 deletions(-) (limited to 'rumba/testbeds/qemu.py') diff --git a/rumba/testbeds/qemu.py b/rumba/testbeds/qemu.py index 49bfcc2..8079f28 100644 --- a/rumba/testbeds/qemu.py +++ b/rumba/testbeds/qemu.py @@ -17,14 +17,13 @@ # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301 USA -from Queue import Empty -from getpass import getpass, getuser -from multiprocessing import Process, Queue, cpu_count -from os import geteuid -from time import sleep +import getpass +import multiprocessing +import time +import subprocess +import os import rumba.model as mod -from subprocess import Popen, check_call, CalledProcessError class Testbed(mod.Testbed): @@ -58,10 +57,10 @@ class Testbed(mod.Testbed): if not error_queue.empty(): break print('DEBUG: executing >> {}'.format(command)) - check_call(command.split()) + subprocess.check_call(command.split()) results_queue.put("Command chain ran correctly.") - except CalledProcessError as e: + except subprocess.CalledProcessError as e: error_queue.put(str(e)) def swap_in(self, experiment): @@ -69,23 +68,23 @@ class Testbed(mod.Testbed): :type experiment mod.Experiment :param experiment: The experiment running """ - if geteuid() != 0: - pw = getpass('[sudo] password for {}:'.format(getuser())) + if os.geteuid() != 0: + pw = getpass.getpass('[sudo] password for {}:'.format(getpass.getuser())) if '"' in pw or "'" in pw: print('Illegal password: contains " or \'') raise Exception('Not authenticated') else: try: - check_call("sudo -v -p '{}'".format(pw).split()) - except CalledProcessError: + subprocess.check_call("sudo -v -p '{}'".format(pw).split()) + except subprocess.CalledProcessError: raise Exception('Not authenticated') print("[QEMU testbed] swapping in") # Building bridges and taps shim_processes = [] - r_queue = Queue() - e_queue = Queue() + r_queue = multiprocessing.Queue() + e_queue = multiprocessing.Queue() print(experiment.dif_ordering) for shim in experiment.dif_ordering: command_list = [] @@ -129,7 +128,7 @@ class Testbed(mod.Testbed): if not e_queue.empty(): break # Launch commands asynchronously - process = Process(target=self._run_command_chain, args=(command_list, r_queue, e_queue)) + process = multiprocessing.Process(target=self._run_command_chain, args=(command_list, r_queue, e_queue)) shim_processes.append(process) process.start() @@ -150,12 +149,12 @@ class Testbed(mod.Testbed): if result == "Command chain ran correctly.": over_processes += 1 print('DEBUG: %s of %s processes completed.' % (over_processes, total_processes)) - except Empty: + except: max_waiting_time -= 1 # Building vms - boot_batch_size = max(1, cpu_count() // 2) + boot_batch_size = max(1, multiprocessing.cpu_count() // 2) booting_budget = boot_batch_size boot_backoff = 12 base_port = 2222 @@ -217,17 +216,17 @@ class Testbed(mod.Testbed): booting_budget -= 1 if booting_budget <= 0: print('Sleeping for {} seconds to give the machines time to boot up.'.format(boot_backoff)) - sleep(boot_backoff) + time.sleep(boot_backoff) booting_budget = boot_batch_size with open(self.qemu_folder + '/qemu_out{}'.format(vmid), 'w') as out_file: print('DEBUG: executing >> {}'.format(command)) - self.boot_processes.append(Popen(command.split(), stdout=out_file)) + self.boot_processes.append(subprocess.Popen(command.split(), stdout=out_file)) pass vmid += 1 - def swap_out(self): + def swap_out(self, experiment): """ :rtype str :return: The script to tear down the experiment @@ -241,8 +240,8 @@ class Testbed(mod.Testbed): process.wait() port_processes = [] - error_queue = Queue() - results_queue = Queue() + error_queue = multiprocessing.Queue() + results_queue = multiprocessing.Queue() for vm_name, vm in self.vms.items(): for port in vm['ports']: tap = port['tap_id'] @@ -255,7 +254,7 @@ class Testbed(mod.Testbed): 'sudo ip tuntap del mode tap name %(tap)s' % {'tap': tap, 'br': shim.name} ).split('\n') - process = Process(target=self._run_command_chain, args=(commands, results_queue, error_queue)) + process = multiprocessing.Process(target=self._run_command_chain, args=(commands, results_queue, error_queue)) port_processes.append(process) process.start() @@ -274,11 +273,11 @@ class Testbed(mod.Testbed): if result == "Command chain ran correctly.": over_processes += 1 print('DEBUG: %s of %s tear-down port processes completed.' % (over_processes, total_processes)) - except Empty: + except: max_waiting_time -= 1 - error_queue = Queue() - results_queue = Queue() + error_queue = multiprocessing.Queue() + results_queue = multiprocessing.Queue() shim_processes = [] for shim in self.shims: @@ -287,7 +286,7 @@ class Testbed(mod.Testbed): 'sudo brctl delbr %(br)s' % {'br': shim.name} ).split('\n') - process = Process(target=self._run_command_chain, args=(commands, results_queue, error_queue)) + process = multiprocessing.Process(target=self._run_command_chain, args=(commands, results_queue, error_queue)) shim_processes.append(process) process.start() @@ -306,5 +305,5 @@ class Testbed(mod.Testbed): if result == "Command chain ran correctly.": over_processes += 1 print('DEBUG: %s of %s tear-down shim processes completed.' % (over_processes, total_processes)) - except Empty: + except: max_waiting_time -= 1 -- cgit v1.2.3