You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kp...@apache.org on 2016/09/30 20:19:45 UTC
qpid-interop-test git commit: QPIDIT-40: Improvement to terminate and
kill code based on testing, also some pylint-suggested tidy-ups
Repository: qpid-interop-test
Updated Branches:
refs/heads/master f5d177d05 -> 5dc10051e
QPIDIT-40: Improvement to terminate and kill code based on testing, also some pylint-suggested tidy-ups
Project: http://git-wip-us.apache.org/repos/asf/qpid-interop-test/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-interop-test/commit/5dc10051
Tree: http://git-wip-us.apache.org/repos/asf/qpid-interop-test/tree/5dc10051
Diff: http://git-wip-us.apache.org/repos/asf/qpid-interop-test/diff/5dc10051
Branch: refs/heads/master
Commit: 5dc10051e27922896c73deb9fdf05b18e4315c87
Parents: f5d177d
Author: Kim van der Riet <kp...@apache.org>
Authored: Fri Sep 30 16:19:30 2016 -0400
Committer: Kim van der Riet <kp...@apache.org>
Committed: Fri Sep 30 16:19:30 2016 -0400
----------------------------------------------------------------------
src/python/qpid-interop-test/shims.py | 60 ++++++++++++++------
.../types/simple_type_tests.py | 39 ++++++-------
2 files changed, 62 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/5dc10051/src/python/qpid-interop-test/shims.py
----------------------------------------------------------------------
diff --git a/src/python/qpid-interop-test/shims.py b/src/python/qpid-interop-test/shims.py
index a2a48dd..1110d47 100644
--- a/src/python/qpid-interop-test/shims.py
+++ b/src/python/qpid-interop-test/shims.py
@@ -23,6 +23,7 @@ Module containing worker thread classes and shims
from json import loads
from os import getenv, path
from subprocess import Popen, PIPE, CalledProcessError
+from sys import stdout
from threading import Thread
from time import sleep
@@ -43,32 +44,55 @@ class ShimWorkerThread(Thread):
return self.return_obj
def join_or_kill(self, timeout):
+ """
+ Wait for thread to join after timeout (seconds). If still alive, it is then terminated, then if still alive,
+ killed
+ """
self.join(timeout)
if self.is_alive():
- print '\n Thread %s (pid=%d) alive after timeout, terminating...' % (self.name, self.proc.pid),
- self.proc.terminate()
- sleep(1)
- if self.is_alive():
- print ' Thread %s (pid=%d) alive after terminate, killing...' % (self.name, self.proc.pid),
- self.proc.kill()
- sleep(1)
- if self.is_alive():
- print ' ERROR: Thread %s (pid=%d) alive after kill' % (self.name, self.proc.pid)
+ if self._terminate_loop():
+ if self._kill_loop():
+ print '\n ERROR: Thread %s (pid=%d) alive after kill' % (self.name, self.proc.pid)
+ stdout.flush()
else:
print 'Killed'
+ stdout.flush()
else:
print 'Terminated'
+ stdout.flush()
+
+ def _terminate_loop(self, num_attempts=2, wait_time=2):
+ cnt = 0
+ while cnt < num_attempts and self.is_alive():
+ cnt += 1
+ print '\n Thread %s (pid=%d) alive after timeout, terminating (try #%d)...' % (self.name, self.proc.pid,
+ cnt),
+ stdout.flush()
+ self.proc.terminate()
+ sleep(wait_time)
+ return self.is_alive()
+
+ def _kill_loop(self, num_attempts=5, wait_time=5):
+ cnt = 0
+ while cnt < num_attempts and self.is_alive():
+ cnt += 1
+ print '\n Thread %s (pid=%d) alive after terminate, killing (try #%d)...' % (self.name, self.proc.pid,
+ cnt),
+ stdout.flush()
+ self.proc.kill()
+ sleep(wait_time)
+ return self.is_alive()
class Sender(ShimWorkerThread):
"""Sender class for multi-threaded send"""
- def __init__(self, use_shell_flag, send_shim_args, broker_addr, queue_name, type, json_test_str):
- super(Sender, self).__init__('sender_thread')
+ def __init__(self, use_shell_flag, send_shim_args, broker_addr, queue_name, msg_type, json_test_str):
+ super(Sender, self).__init__('sender_thread_%s' % queue_name)
if send_shim_args is None:
print 'ERROR: Sender: send_shim_args == None'
self.use_shell_flag = use_shell_flag
self.arg_list.extend(send_shim_args)
- self.arg_list.extend([broker_addr, queue_name, type, json_test_str])
+ self.arg_list.extend([broker_addr, queue_name, msg_type, json_test_str])
def run(self):
"""Thread starts here"""
@@ -84,12 +108,12 @@ class Sender(ShimWorkerThread):
class Receiver(ShimWorkerThread):
"""Receiver class for multi-threaded receive"""
- def __init__(self, receive_shim_args, broker_addr, queue_name, type, json_test_str):
+ def __init__(self, receive_shim_args, broker_addr, queue_name, msg_type, json_test_str):
super(Receiver, self).__init__('receiver_thread')
if receive_shim_args is None:
print 'ERROR: Receiver: receive_shim_args == None'
self.arg_list.extend(receive_shim_args)
- self.arg_list.extend([broker_addr, queue_name, type, json_test_str])
+ self.arg_list.extend([broker_addr, queue_name, msg_type, json_test_str])
def run(self):
"""Thread starts here"""
@@ -124,13 +148,13 @@ class Shim(object):
self.receive_params = None
self.use_shell_flag = False
- def create_sender(self, broker_addr, queue_name, type, json_test_str):
+ def create_sender(self, broker_addr, queue_name, msg_type, json_test_str):
"""Create a new sender instance"""
- return Sender(self.use_shell_flag, self.send_params, broker_addr, queue_name, type, json_test_str)
+ return Sender(self.use_shell_flag, self.send_params, broker_addr, queue_name, msg_type, json_test_str)
- def create_receiver(self, broker_addr, queue_name, type, json_test_str):
+ def create_receiver(self, broker_addr, queue_name, msg_type, json_test_str):
"""Create a new receiver instance"""
- return Receiver(self.receive_params, broker_addr, queue_name, type, json_test_str)
+ return Receiver(self.receive_params, broker_addr, queue_name, msg_type, json_test_str)
class ProtonPythonShim(Shim):
"""Shim for qpid-proton Python client"""
http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/5dc10051/src/python/qpid-interop-test/types/simple_type_tests.py
----------------------------------------------------------------------
diff --git a/src/python/qpid-interop-test/types/simple_type_tests.py b/src/python/qpid-interop-test/types/simple_type_tests.py
index 17d4470..0482f2e 100755
--- a/src/python/qpid-interop-test/types/simple_type_tests.py
+++ b/src/python/qpid-interop-test/types/simple_type_tests.py
@@ -200,25 +200,26 @@ class AmqpPrimitiveTypes(TestTypeMap):
'short:8',
'short:9'] * 10
],
- 'map': [# Enpty map
- {},
- # Map with string keys
- {'string:one': 'ubyte:1',
- 'string:two': 'ushort:2'},
- # Map with other AMQP simple types as keys
- {'none:': 'string:None',
- 'string:None': 'none:',
- 'string:One': 'long:-1234567890',
- 'short:2': 'int:2',
- 'boolean:True': 'string:True',
- 'string:False': 'boolean:False',
- #['string:AAA', 'ushort:5951']: 'string:list value',
- #{'byte:-55': 'ubyte:200',
- # 'boolean:True': 'string:Hello, world!'}: 'symbol:map.value',
- #'string:list': [],
- 'string:map': {'char:A': 'int:1',
- 'char:B': 'int:2'}},
- ],
+ 'map': [
+ # Enpty map
+ {},
+ # Map with string keys
+ {'string:one': 'ubyte:1',
+ 'string:two': 'ushort:2'},
+ # Map with other AMQP simple types as keys
+ {'none:': 'string:None',
+ 'string:None': 'none:',
+ 'string:One': 'long:-1234567890',
+ 'short:2': 'int:2',
+ 'boolean:True': 'string:True',
+ 'string:False': 'boolean:False',
+ #['string:AAA', 'ushort:5951']: 'string:list value',
+ #{'byte:-55': 'ubyte:200',
+ # 'boolean:True': 'string:Hello, world!'}: 'symbol:map.value',
+ #'string:list': [],
+ 'string:map': {'char:A': 'int:1',
+ 'char:B': 'int:2'}},
+ ],
# TODO: Support all AMQP types in array (including keys)
#'array': [[],
# [1, 2, 3],
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org