Эх сурвалжийг харах

Avoid waiting too long for a response after the build completes (#3698)

curl can wait for a long time for a response, potentially forever, so
there was no upper bound on how long each test.is_accepting_requests()
call could take.  Now each call is being limited to 5 seconds.

Also, our "while not accepting requests" loop was intended to wait up to
60 seconds for the app server to start accepting requests, but it was
actually giving it 60 chances to respond to a request, which might take
much longer than 60 seconds.  Now it's really waiting 60 seconds,
approximately.
Michael Hixson 7 жил өмнө
parent
commit
a2e53fdcd2

+ 6 - 8
toolset/benchmark/benchmarker.py

@@ -145,16 +145,14 @@ class Benchmarker:
                     prefix=log_prefix,
                     prefix=log_prefix,
                     file=benchmark_log)
                     file=benchmark_log)
 
 
-            slept = 0
-            max_sleep = 60
-            accepting_requests = False
-            while not accepting_requests and slept < max_sleep:
-                if not self.docker_helper.server_container_exists(
-                        container.id):
-                    break
+            max_time = time.time() + 60
+            while True:
                 accepting_requests = test.is_accepting_requests()
                 accepting_requests = test.is_accepting_requests()
+                if accepting_requests \
+                        or time.time() >= max_time \
+                        or not self.docker_helper.server_container_exists(container.id):
+                    break
                 time.sleep(1)
                 time.sleep(1)
-                slept += 1
 
 
             if not accepting_requests:
             if not accepting_requests:
                 self.docker_helper.stop([container, database_container])
                 self.docker_helper.stop([container, database_container])

+ 1 - 1
toolset/utils/docker_helper.py

@@ -339,7 +339,7 @@ class DockerHelper:
         try:
         try:
             self.client.containers.run(
             self.client.containers.run(
                 'techempower/tfb.wrk',
                 'techempower/tfb.wrk',
-                'curl %s' % url,
+                'curl --max-time 5 %s' % url,
                 remove=True,
                 remove=True,
                 log_config={'type': None},
                 log_config={'type': None},
                 network=self.benchmarker.config.network,
                 network=self.benchmarker.config.network,