From 83f23276584a3b29f559e7a18e5f632229e7eab0 Mon Sep 17 00:00:00 2001 From: "Meir Shpilraien (Spielrein)" Date: Mon, 7 Feb 2022 14:49:36 +0200 Subject: [PATCH] Avoid random ports on parallelis. (#155) * Avoid random ports on parallelis. When parallelism is used, there is no need for random ports. Each processes gets a port to use from the father processes and keep using it for all the test. This helps to avoid port collission. * test fixes * initialize start port with Defaults.port --- RLTest/__main__.py | 14 +++++++------- RLTest/env.py | 5 ++++- RLTest/redis_cluster.py | 2 +- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/RLTest/__main__.py b/RLTest/__main__.py index 45b0521..f9cff9c 100644 --- a/RLTest/__main__.py +++ b/RLTest/__main__.py @@ -425,9 +425,6 @@ def __init__(self): self.require_clean_exit = False self.parallelism = self.args.parallelism - if self.parallelism > 1: - self.args.randomize_ports = True - Defaults.randomize_ports = True def _convertArgsType(self): pass @@ -640,7 +637,8 @@ def execute(self): for test in self.loader: jobs.put(test, block=False) - def run_jobs(jobs, results): + def run_jobs(jobs, results, port): + Defaults.port = port done = 0 while True: try: @@ -684,11 +682,13 @@ def run_jobs(jobs, results): results = Queue() if self.parallelism == 1: - run_jobs(jobs, results) + run_jobs(jobs, results, Defaults.port) else : - processes = [] + processes = [] + currPort = Defaults.port for i in range(self.parallelism): - p = Process(target=run_jobs, args=(jobs,results)) + p = Process(target=run_jobs, args=(jobs,results,currPort)) + currPort += 30 # safe distance for cluster and replicas processes.append(p) p.start() diff --git a/RLTest/env.py b/RLTest/env.py index 580931e..4090657 100644 --- a/RLTest/env.py +++ b/RLTest/env.py @@ -130,6 +130,7 @@ class Defaults: oss_password = None cluster_node_timeout = None curr_test_name = None + port=6379 def getKwargs(self): kwargs = { @@ -203,6 +204,7 @@ def __init__(self, testName=None, testDescription=None, module=None, self.dmcBinaryPath = expandBinary(dmcBinaryPath) if dmcBinaryPath else Defaults.proxy_binary self.redisEnterpriseBinaryPath = expandBinary(redisEnterpriseBinaryPath) if redisEnterpriseBinaryPath else Defaults.re_binary self.clusterNodeTimeout = clusterNodeTimeout if clusterNodeTimeout else Defaults.cluster_node_timeout + self.port = Defaults.port self.assertionFailedSummary = [] @@ -298,7 +300,8 @@ def getEnvKwargs(self): 'tlsCertFile': self.tlsCertFile, 'tlsKeyFile': self.tlsKeyFile, 'tlsCaCertFile': self.tlsCaCertFile, - 'clusterNodeTimeout': self.clusterNodeTimeout + 'clusterNodeTimeout': self.clusterNodeTimeout, + 'port': self.port } return kwargs diff --git a/RLTest/redis_cluster.py b/RLTest/redis_cluster.py index 34452e8..d24d3c9 100644 --- a/RLTest/redis_cluster.py +++ b/RLTest/redis_cluster.py @@ -21,7 +21,7 @@ def __init__(self, **kwargs): useSlaves = kwargs.get('useSlaves', False) self.useTLS = kwargs['useTLS'] self.decodeResponses = kwargs.get('decodeResponses', False) - startPort = 20000 + startPort = kwargs.pop('port', 10000) totalRedises = self.shardsCount * (2 if useSlaves else 1) randomizePorts = kwargs.pop('randomizePorts', False) for i in range(0, totalRedises, (2 if useSlaves else 1)):