It is necessary for adding syncdata class.
Signed-off-by: Jiří Župka <[email protected]>
---
client/common_lib/base_barrier.py | 2 +-
client/common_lib/base_utils.py | 65 ++++++++++++++++++
.../kvm/tests/migration_with_file_transfer.py | 6 +-
client/tests/kvm/tests/migration_with_reboot.py | 4 +-
client/tests/kvm/tests/nic_bonding.py | 9 ++-
client/tests/kvm/tests/vmstop.py | 6 +-
client/virt/tests/nic_promisc.py | 5 +-
client/virt/tests/nicdriver_unload.py | 4 +-
client/virt/tests/ntttcp.py | 2 +-
client/virt/virt_test_utils.py | 2 +-
client/virt/virt_utils.py | 69 +-------------------
11 files changed, 88 insertions(+), 86 deletions(-)
diff --git a/client/common_lib/base_barrier.py
b/client/common_lib/base_barrier.py
index d20916a..df4da49 100644
--- a/client/common_lib/base_barrier.py
+++ b/client/common_lib/base_barrier.py
@@ -50,7 +50,7 @@ class listen_server(object):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((self.address, self.port))
- sock.listen(10)
+ sock.listen(100)
return sock
diff --git a/client/common_lib/base_utils.py b/client/common_lib/base_utils.py
index 972d18a..c40e5dc 100644
--- a/client/common_lib/base_utils.py
+++ b/client/common_lib/base_utils.py
@@ -817,6 +817,71 @@ def run_parallel(commands, timeout=None,
ignore_status=False,
return [bg_job.result for bg_job in bg_jobs]
+class InterruptedThread(Thread):
+ """
+ Run a function in a background thread.
+ """
+ def __init__(self, target, args=(), kwargs={}):
+ """
+ Initialize the instance.
+
+ @param target: Function to run in the thread.
+ @param args: Arguments to pass to target.
+ @param kwargs: Keyword arguments to pass to target.
+ """
+ Thread.__init__(self)
+ self._target = target
+ self._args = args
+ self._kwargs = kwargs
+
+
+ def run(self):
+ """
+ Run target (passed to the constructor). No point in calling this
+ function directly. Call start() to make this function run in a new
+ thread.
+ """
+ self._e = None
+ self._retval = None
+ try:
+ try:
+ self._retval = self._target(*self._args, **self._kwargs)
+ except Exception:
+ self._e = sys.exc_info()
+ raise
+ finally:
+ # Avoid circular references (start() may be called only once so
+ # it's OK to delete these)
+ del self._target, self._args, self._kwargs
+
+
+ def join(self, timeout=None, suppress_exception=False):
+ """
+ Join the thread. If target raised an exception, re-raise it.
+ Otherwise, return the value returned by target.
+
+ @param timeout: Timeout value to pass to threading.Thread.join().
+ @param suppress_exception: If True, don't re-raise the exception.
+ """
+ Thread.join(self, timeout)
+ try:
+ if self._e:
+ if not suppress_exception:
+ # Because the exception was raised in another thread, we
+ # need to explicitly insert the current context into it
+ s = error.exception_context(self._e[1])
+ s = error.join_contexts(error.get_context(), s)
+ error.set_exception_context(self._e[1], s)
+ raise self._e[0], self._e[1], self._e[2]
+ else:
+ return self._retval
+ finally:
+ # Avoid circular references (join() may be called multiple times
+ # so we can't delete these)
+ self._e = None
+ self._retval = None
+
+
@deprecated
def run_bg(command):
"""Function deprecated. Please use BgJob class instead."""
diff --git a/client/tests/kvm/tests/migration_with_file_transfer.py
b/client/tests/kvm/tests/migration_with_file_transfer.py
index 075148d..073b87e 100644
--- a/client/tests/kvm/tests/migration_with_file_transfer.py
+++ b/client/tests/kvm/tests/migration_with_file_transfer.py
@@ -56,13 +56,13 @@ def run_migration_with_file_transfer(test, params, env):
error.context("transferring file to guest while migrating",
logging.info)
- bg = virt_utils.Thread(vm.copy_files_to, (host_path, guest_path),
- dict(verbose=True, timeout=transfer_timeout))
+ bg = utils.InterruptedThread(vm.copy_files_to, (host_path, guest_path),
+ dict(verbose=True, timeout=transfer_timeout))
run_and_migrate(bg)
error.context("transferring file back to host while migrating",
logging.info)
- bg = virt_utils.Thread(vm.copy_files_from,
+ bg = utils.InterruptedThread(vm.copy_files_from,
(guest_path, host_path_returned),
dict(verbose=True, timeout=transfer_timeout))
run_and_migrate(bg)
diff --git a/client/tests/kvm/tests/migration_with_reboot.py
b/client/tests/kvm/tests/migration_with_reboot.py
index b291a83..6ee2da5 100644
--- a/client/tests/kvm/tests/migration_with_reboot.py
+++ b/client/tests/kvm/tests/migration_with_reboot.py
@@ -1,4 +1,4 @@
-from autotest_lib.client.virt import virt_utils
+from autotest_lib.client.common_lib import utils
def run_migration_with_reboot(test, params, env):
@@ -27,7 +27,7 @@ def run_migration_with_reboot(test, params, env):
try:
# Reboot the VM in the background
- bg = virt_utils.Thread(vm.reboot, (session,))
+ bg = utils.InterruptedThread(vm.reboot, (session,))
bg.start()
try:
while bg.isAlive():
diff --git a/client/tests/kvm/tests/nic_bonding.py
b/client/tests/kvm/tests/nic_bonding.py
index 891bd98..d1f1732 100644
--- a/client/tests/kvm/tests/nic_bonding.py
+++ b/client/tests/kvm/tests/nic_bonding.py
@@ -1,7 +1,7 @@
import logging, time
from autotest_lib.client.virt.tests import file_transfer
-from autotest_lib.client.virt import virt_test_utils, virt_utils, aexpect
-from autotest_lib.client.common_lib import error
+from autotest_lib.client.virt import virt_test_utils, aexpect
+from autotest_lib.client.common_lib import error, utils
def run_nic_bonding(test, params, env):
@@ -54,8 +54,9 @@ def run_nic_bonding(test, params, env):
file_transfer.run_file_transfer(test, params, env)
logging.info("Failover test with file transfer")
- transfer_thread = virt_utils.Thread(file_transfer.run_file_transfer,
- (test, params, env))
+ transfer_thread = utils.InterruptedThread(
+ file_transfer.run_file_transfer,
+ (test, params, env))
try:
transfer_thread.start()
while transfer_thread.isAlive():
diff --git a/client/tests/kvm/tests/vmstop.py b/client/tests/kvm/tests/vmstop.py
index c9ac72b..79d2db1 100644
--- a/client/tests/kvm/tests/vmstop.py
+++ b/client/tests/kvm/tests/vmstop.py
@@ -1,7 +1,6 @@
import logging, time, os
from autotest_lib.client.common_lib import error
from autotest_lib.client.bin import utils
-from autotest_lib.client.virt import virt_utils
def run_vmstop(test, params, env):
@@ -35,8 +34,9 @@ def run_vmstop(test, params, env):
utils.run("dd if=/dev/zero of=/tmp/file bs=1M count=%s" % file_size)
# Transfer file from host to guest, we didn't expect the finish of
# transfer, we just let it to be a kind of stress in guest.
- bg = virt_utils.Thread(vm.copy_files_to, ("/tmp/file", guest_path),
- dict(verbose=True, timeout=60))
+ bg = utils.InterruptedThread(vm.copy_files_to,
+ ("/tmp/file", guest_path),
+ dict(verbose=True, timeout=60))
logging.info("Start the background transfer")
bg.start()
diff --git a/client/virt/tests/nic_promisc.py b/client/virt/tests/nic_promisc.py
index 7e9a343..6b15ca5 100644
--- a/client/virt/tests/nic_promisc.py
+++ b/client/virt/tests/nic_promisc.py
@@ -26,8 +26,9 @@ def run_nic_promisc(test, params, env):
vm.get_mac_address(0))
try:
- transfer_thread = virt_utils.Thread(file_transfer.run_file_transfer,
- (test, params, env))
+ transfer_thread = utils.InterruptedThread(
+ file_transfer.run_file_transfer,
+ (test, params, env))
transfer_thread.start()
while transfer_thread.isAlive():
session_serial.cmd("ip link set %s promisc on" % ethname)
diff --git a/client/virt/tests/nicdriver_unload.py
b/client/virt/tests/nicdriver_unload.py
index 20a92a7..085b30d 100644
--- a/client/virt/tests/nicdriver_unload.py
+++ b/client/virt/tests/nicdriver_unload.py
@@ -42,8 +42,8 @@ def run_nicdriver_unload(test, params, env):
try:
threads = []
for t in range(int(params.get("sessions_num", "10"))):
- thread = virt_utils.Thread(file_transfer.run_file_transfer,
- (test, params, env))
+ thread = utils.InterruptedThread(file_transfer.run_file_transfer,
+ (test, params, env))
thread.start()
threads.append(thread)
diff --git a/client/virt/tests/ntttcp.py b/client/virt/tests/ntttcp.py
index dab2e1f..83fb3b9 100644
--- a/client/virt/tests/ntttcp.py
+++ b/client/virt/tests/ntttcp.py
@@ -155,7 +155,7 @@ def run_ntttcp(test, params, env):
return list
try:
- bg = virt_utils.Thread(receiver, ())
+ bg = utils.InterruptedThread(receiver, ())
bg.start()
if bg.isAlive():
sender()
diff --git a/client/virt/virt_test_utils.py b/client/virt/virt_test_utils.py
index f4f3a5c..313e51c 100644
--- a/client/virt/virt_test_utils.py
+++ b/client/virt/virt_test_utils.py
@@ -607,7 +607,7 @@ def run_autotest(vm, session, control_path, timeout,
outputdir, params):
mig_timeout = float(params.get("mig_timeout", "3600"))
mig_protocol = params.get("migration_protocol", "tcp")
- bg = virt_utils.Thread(session.cmd_output,
+ bg = utils.InterruptedThread(session.cmd_output,
kwargs={'cmd': "bin/autotest control",
'timeout': timeout,
'print_func': logging.info})
diff --git a/client/virt/virt_utils.py b/client/virt/virt_utils.py
index 15384af..7a35f83 100644
--- a/client/virt/virt_utils.py
+++ b/client/virt/virt_utils.py
@@ -1444,71 +1444,6 @@ def archive_as_tarball(source_dir, dest_dir,
tarball_name=None,
tarball.close()
-class Thread(threading.Thread):
- """
- Run a function in a background thread.
- """
- def __init__(self, target, args=(), kwargs={}):
- """
- Initialize the instance.
-
- @param target: Function to run in the thread.
- @param args: Arguments to pass to target.
- @param kwargs: Keyword arguments to pass to target.
- """
- threading.Thread.__init__(self)
- self._target = target
- self._args = args
- self._kwargs = kwargs
-
-
- def run(self):
- """
- Run target (passed to the constructor). No point in calling this
- function directly. Call start() to make this function run in a new
- thread.
- """
- self._e = None
- self._retval = None
- try:
- try:
- self._retval = self._target(*self._args, **self._kwargs)
- except Exception:
- self._e = sys.exc_info()
- raise
- finally:
- # Avoid circular references (start() may be called only once so
- # it's OK to delete these)
- del self._target, self._args, self._kwargs
-
-
- def join(self, timeout=None, suppress_exception=False):
- """
- Join the thread. If target raised an exception, re-raise it.
- Otherwise, return the value returned by target.
-
- @param timeout: Timeout value to pass to threading.Thread.join().
- @param suppress_exception: If True, don't re-raise the exception.
- """
- threading.Thread.join(self, timeout)
- try:
- if self._e:
- if not suppress_exception:
- # Because the exception was raised in another thread, we
- # need to explicitly insert the current context into it
- s = error.exception_context(self._e[1])
- s = error.join_contexts(error.get_context(), s)
- error.set_exception_context(self._e[1], s)
- raise self._e[0], self._e[1], self._e[2]
- else:
- return self._retval
- finally:
- # Avoid circular references (join() may be called multiple times
- # so we can't delete these)
- self._e = None
- self._retval = None
-
-
def parallel(targets):
"""
Run multiple functions in parallel.
@@ -1523,9 +1458,9 @@ def parallel(targets):
threads = []
for target in targets:
if isinstance(target, tuple) or isinstance(target, list):
- t = Thread(*target)
+ t = utils.InterruptedThread(*target)
else:
- t = Thread(target)
+ t = utils.InterruptedThread(target)
threads.append(t)
t.start()
return [t.join() for t in threads]
--
1.7.7.6
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html