]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
qa: use curl in wait_for_radosgw() in util/rgw.py 28598/head
authorAli Maredia <amaredia@redhat.com>
Wed, 12 Jun 2019 20:12:47 +0000 (16:12 -0400)
committerCasey Bodley <cbodley@redhat.com>
Mon, 17 Jun 2019 14:24:07 +0000 (10:24 -0400)
Signed-off-by: Ali Maredia <amaredia@redhat.com>
(cherry picked from commit 9c6afa3fb570629a57612f250a6a4890a65cbc6e)

qa/tasks/rgw.py
qa/tasks/rgw_multisite.py
qa/tasks/util/rgw.py

index babfa5d5bc97432080a63d750086f3322e7e6a2e..26a174e4e2623f525a2d82a6e5189c599763093d 100644 (file)
@@ -140,7 +140,8 @@ def start_rgw(ctx, config, clients):
         endpoint = ctx.rgw.role_endpoints[client]
         url = endpoint.url()
         log.info('Polling {client} until it starts accepting connections on {url}'.format(client=client, url=url))
-        wait_for_radosgw(url)
+        (remote,) = ctx.cluster.only(client).remotes.iterkeys()
+        wait_for_radosgw(url, remote)
 
     try:
         yield
index c39cb935fb3ebb8cbc81bff1c92cff22e814c5e1..a41238daa0419792384bb85681f8a04548ee5dee 100644 (file)
@@ -226,7 +226,7 @@ class Gateway(multisite.Gateway):
         """ (re)start the daemon """
         self.daemon.restart()
         # wait until startup completes
-        wait_for_radosgw(self.endpoint())
+        wait_for_radosgw(self.endpoint(), self.remote)
 
     def stop(self):
         """ stop the daemon """
index ab76b50a2282f84a181e19373ee6d959add8dc51..ee79208cc5bd726514c8350faa44e957d2eb8385 100644 (file)
@@ -2,6 +2,7 @@ from cStringIO import StringIO
 import logging
 import json
 import requests
+import time
 
 from requests.packages.urllib3 import PoolManager
 from requests.packages.urllib3.util import Retry
@@ -70,12 +71,29 @@ def get_user_successful_ops(out, user):
         return 0
     return get_user_summary(out, user)['total']['successful_ops']
 
-def wait_for_radosgw(url):
+def wait_for_radosgw(url, remote):
     """ poll the given url until it starts accepting connections
 
     add_daemon() doesn't wait until radosgw finishes startup, so this is used
     to avoid racing with later tasks that expect radosgw to be up and listening
     """
-    # use a connection pool with retry/backoff to poll until it starts listening
-    http = PoolManager(retries=Retry(connect=8, backoff_factor=1))
-    http.request('GET', url)
+    # TODO: use '--retry-connrefused --retry 8' when teuthology is running on
+    # Centos 8 and other OS's with an updated version of curl
+    curl_cmd = ['curl',
+                url]
+    exit_status = 0
+    num_retries = 8
+    for seconds in range(num_retries):
+        proc = remote.run(
+            args=curl_cmd,
+            check_status=False,
+            stdout=StringIO(),
+            stderr=StringIO(),
+            stdin=StringIO(),
+            )
+        exit_status = proc.exitstatus
+        if exit_status == 0:
+            break
+        time.sleep(2**seconds)
+
+    assert exit_status == 0