Skip to content

Commit c061b9b

Browse files
committed
Try to bind to a new port on fixture failure retries
1 parent bccac7b commit c061b9b

File tree

1 file changed

+21
-29
lines changed

1 file changed

+21
-29
lines changed

test/fixtures.py

+21-29
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def instance(cls):
105105
(host, port) = (parse.hostname, parse.port)
106106
fixture = ExternalService(host, port)
107107
else:
108-
(host, port) = ("127.0.0.1", get_open_port())
108+
(host, port) = ("127.0.0.1", None)
109109
fixture = cls(host, port)
110110

111111
fixture.open()
@@ -124,21 +124,18 @@ def kafka_run_class_env(self):
124124
return env
125125

126126
def out(self, message):
127-
log.info("*** Zookeeper [%s:%d]: %s", self.host, self.port, message)
127+
log.info("*** Zookeeper [%s:%s]: %s", self.host, self.port or '(auto)', message)
128128

129129
def open(self):
130130
self.tmp_dir = tempfile.mkdtemp()
131131
self.out("Running local instance...")
132132
log.info(" host = %s", self.host)
133-
log.info(" port = %s", self.port)
133+
log.info(" port = %s", self.port or '(auto)')
134134
log.info(" tmp_dir = %s", self.tmp_dir)
135135

136-
# Generate configs
136+
# Configure Zookeeper child process
137137
template = self.test_resource("zookeeper.properties")
138138
properties = os.path.join(self.tmp_dir, "zookeeper.properties")
139-
self.render_template(template, properties, vars(self))
140-
141-
# Configure Zookeeper child process
142139
args = self.kafka_run_class_args("org.apache.zookeeper.server.quorum.QuorumPeerMain", properties)
143140
env = self.kafka_run_class_env()
144141

@@ -148,13 +145,12 @@ def open(self):
148145
backoff = 1
149146
end_at = time.time() + max_timeout
150147
tries = 1
148+
auto_port = (self.port is None)
151149
while time.time() < end_at:
152-
self.out('Attempting to start (try #%d)' % tries)
153-
try:
154-
os.stat(properties)
155-
except:
156-
log.warning('Config %s not found -- re-rendering', properties)
157-
self.render_template(template, properties, vars(self))
150+
if auto_port:
151+
self.port = get_open_port()
152+
self.out('Attempting to start on port %d (try #%d)' % (self.port, tries))
153+
self.render_template(template, properties, vars(self))
158154
self.child = SpawnedService(args, env)
159155
self.child.start()
160156
timeout = min(timeout, max(end_at - time.time(), 0))
@@ -194,8 +190,6 @@ def instance(cls, broker_id, zk_host, zk_port, zk_chroot=None,
194190
(host, port) = (parse.hostname, parse.port)
195191
fixture = ExternalService(host, port)
196192
else:
197-
if port is None:
198-
port = get_open_port()
199193
# force IPv6 here because of a confusing point:
200194
#
201195
# - if the string "localhost" is passed, Kafka will *only* bind to the IPv4 address of localhost
@@ -245,7 +239,7 @@ def kafka_run_class_env(self):
245239
return env
246240

247241
def out(self, message):
248-
log.info("*** Kafka [%s:%d]: %s", self.host, self.port, message)
242+
log.info("*** Kafka [%s:%s]: %s", self.host, self.port or '(auto)', message)
249243

250244
def open(self):
251245
if self.running:
@@ -255,7 +249,7 @@ def open(self):
255249
self.tmp_dir = tempfile.mkdtemp()
256250
self.out("Running local instance...")
257251
log.info(" host = %s", self.host)
258-
log.info(" port = %s", self.port)
252+
log.info(" port = %s", self.port or '(auto)')
259253
log.info(" transport = %s", self.transport)
260254
log.info(" broker_id = %s", self.broker_id)
261255
log.info(" zk_host = %s", self.zk_host)
@@ -269,12 +263,6 @@ def open(self):
269263
os.mkdir(os.path.join(self.tmp_dir, "logs"))
270264
os.mkdir(os.path.join(self.tmp_dir, "data"))
271265

272-
# Generate configs
273-
template = self.test_resource("kafka.properties")
274-
properties = os.path.join(self.tmp_dir, "kafka.properties")
275-
self.render_template(template, properties, vars(self))
276-
277-
# Party!
278266
self.out("Creating Zookeeper chroot node...")
279267
args = self.kafka_run_class_args("org.apache.zookeeper.ZooKeeperMain",
280268
"-server", "%s:%d" % (self.zk_host, self.zk_port),
@@ -292,6 +280,8 @@ def open(self):
292280
self.out("Done!")
293281

294282
# Configure Kafka child process
283+
properties = os.path.join(self.tmp_dir, "kafka.properties")
284+
template = self.test_resource("kafka.properties")
295285
args = self.kafka_run_class_args("kafka.Kafka", properties)
296286
env = self.kafka_run_class_env()
297287

@@ -300,13 +290,15 @@ def open(self):
300290
backoff = 1
301291
end_at = time.time() + max_timeout
302292
tries = 1
293+
auto_port = (self.port is None)
303294
while time.time() < end_at:
304-
self.out('Attempting to start (try #%d)' % tries)
305-
try:
306-
os.stat(properties)
307-
except:
308-
log.warning('Config %s not found -- re-rendering', properties)
309-
self.render_template(template, properties, vars(self))
295+
# We have had problems with port conflicts on travis
296+
# so we will try a different port on each retry
297+
# unless the fixture was passed a specific port
298+
if auto_port:
299+
self.port = get_open_port()
300+
self.out('Attempting to start on port %d (try #%d)' % (self.port, tries))
301+
self.render_template(template, properties, vars(self))
310302
self.child = SpawnedService(args, env)
311303
self.child.start()
312304
timeout = min(timeout, max(end_at - time.time(), 0))

0 commit comments

Comments
 (0)