From: Ali Maredia Date: Wed, 12 Jun 2019 20:12:47 +0000 (-0400) Subject: qa: use curl in wait_for_radosgw() in util/rgw.py X-Git-Tag: v13.2.7~292^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=686320c38b622e1fccc1c408fda2589daa009547;p=ceph.git qa: use curl in wait_for_radosgw() in util/rgw.py Signed-off-by: Ali Maredia (cherry picked from commit 9c6afa3fb570629a57612f250a6a4890a65cbc6e) --- diff --git a/qa/tasks/rgw.py b/qa/tasks/rgw.py index 13c82736338d3..f861b58d70e93 100644 --- a/qa/tasks/rgw.py +++ b/qa/tasks/rgw.py @@ -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 diff --git a/qa/tasks/rgw_multisite.py b/qa/tasks/rgw_multisite.py index a3697278ac26e..aad08db2afc37 100644 --- a/qa/tasks/rgw_multisite.py +++ b/qa/tasks/rgw_multisite.py @@ -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 """ diff --git a/qa/tasks/util/rgw.py b/qa/tasks/util/rgw.py index ab76b50a2282f..ee79208cc5bd7 100644 --- a/qa/tasks/util/rgw.py +++ b/qa/tasks/util/rgw.py @@ -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