Fix authentication error while polling for upload results
I'm not 100% sure that is the reason. But I think it worth trying. No-Presubmit: True Bug: webrtc:12223 Change-Id: Idc6a9006ce2e3c6d299ad56cd747faebfeff37ce Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/195003 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Andrey Logvin <landrey@webrtc.org> Cr-Commit-Position: refs/heads/master@{#32682}
This commit is contained in:

committed by
Commit Bot

parent
47a03e8743
commit
bce02a9467
@ -32,16 +32,19 @@ def _GenerateOauthToken():
|
||||
(p.stdout.read(), p.stderr.read()))
|
||||
|
||||
|
||||
def _SendHistogramSet(url, histograms, oauth_token):
|
||||
def _CreateHeaders(oauth_token):
|
||||
return {'Authorization': 'Bearer %s' % oauth_token}
|
||||
|
||||
|
||||
def _SendHistogramSet(url, histograms):
|
||||
"""Make a HTTP POST with the given JSON to the Performance Dashboard.
|
||||
|
||||
Args:
|
||||
url: URL of Performance Dashboard instance, e.g.
|
||||
"https://chromeperf.appspot.com".
|
||||
histograms: a histogram set object that contains the data to be sent.
|
||||
oauth_token: An oauth token to use for authorization.
|
||||
"""
|
||||
headers = {'Authorization': 'Bearer %s' % oauth_token}
|
||||
headers = _CreateHeaders(_GenerateOauthToken())
|
||||
|
||||
serialized = json.dumps(_ApplyHacks(histograms.AsDicts()), indent=4)
|
||||
|
||||
@ -61,7 +64,7 @@ def _SendHistogramSet(url, histograms, oauth_token):
|
||||
return response, content
|
||||
|
||||
|
||||
def _WaitForUploadConfirmation(url, oauth_token, upload_token, wait_timeout,
|
||||
def _WaitForUploadConfirmation(url, upload_token, wait_timeout,
|
||||
wait_polling_period):
|
||||
"""Make a HTTP GET requests to the Performance Dashboard untill upload
|
||||
status is known or the time is out.
|
||||
@ -69,7 +72,6 @@ def _WaitForUploadConfirmation(url, oauth_token, upload_token, wait_timeout,
|
||||
Args:
|
||||
url: URL of Performance Dashboard instance, e.g.
|
||||
"https://chromeperf.appspot.com".
|
||||
oauth_token: An oauth token to use for authorization.
|
||||
upload_token: String that identifies Performance Dashboard and can be used
|
||||
for the status check.
|
||||
wait_timeout: (datetime.timedelta) Maximum time to wait for the
|
||||
@ -79,9 +81,10 @@ def _WaitForUploadConfirmation(url, oauth_token, upload_token, wait_timeout,
|
||||
"""
|
||||
assert wait_polling_period <= wait_timeout
|
||||
|
||||
headers = {'Authorization': 'Bearer %s' % oauth_token}
|
||||
headers = _CreateHeaders(_GenerateOauthToken())
|
||||
http = httplib2.Http()
|
||||
|
||||
oauth_refreshed = False
|
||||
response = None
|
||||
resp_json = None
|
||||
current_time = datetime.datetime.now()
|
||||
@ -98,6 +101,12 @@ def _WaitForUploadConfirmation(url, oauth_token, upload_token, wait_timeout,
|
||||
|
||||
print 'Upload state polled. Response: %r.' % content
|
||||
|
||||
if not oauth_refreshed and response.status == 403:
|
||||
print 'Oauth token refreshed. Continue polling.'
|
||||
headers = _CreateHeaders(_GenerateOauthToken())
|
||||
oauth_refreshed = True
|
||||
continue
|
||||
|
||||
if response.status != 200:
|
||||
break
|
||||
|
||||
@ -112,7 +121,7 @@ def _WaitForUploadConfirmation(url, oauth_token, upload_token, wait_timeout,
|
||||
# can fail to upload. That would lead to the whole upload to be marked as
|
||||
# failed. Check it, so it doesn't increase flakiness of our tests.
|
||||
# TODO(crbug.com/1145904): Remove check after fixed.
|
||||
def _CheckFullUploadInfo(url, oauth_token, upload_token,
|
||||
def _CheckFullUploadInfo(url, upload_token,
|
||||
min_measurements_amount=100,
|
||||
max_failed_measurements_amount=1):
|
||||
"""Make a HTTP GET requests to the Performance Dashboard to get full info
|
||||
@ -122,7 +131,6 @@ def _CheckFullUploadInfo(url, oauth_token, upload_token,
|
||||
Args:
|
||||
url: URL of Performance Dashboard instance, e.g.
|
||||
"https://chromeperf.appspot.com".
|
||||
oauth_token: An oauth token to use for authorization.
|
||||
upload_token: String that identifies Performance Dashboard and can be used
|
||||
for the status check.
|
||||
min_measurements_amount: minimal amount of measurements that the upload
|
||||
@ -130,7 +138,7 @@ def _CheckFullUploadInfo(url, oauth_token, upload_token,
|
||||
max_failed_measurements_amount: maximal amount of failured measurements to
|
||||
tolerate.
|
||||
"""
|
||||
headers = {'Authorization': 'Bearer %s' % oauth_token}
|
||||
headers = _CreateHeaders(_GenerateOauthToken())
|
||||
http = httplib2.Http()
|
||||
|
||||
response, content = http.request(url + '/uploads/' + upload_token +
|
||||
@ -214,9 +222,7 @@ def UploadToDashboard(options):
|
||||
if options.output_json_file:
|
||||
_DumpOutput(histograms, options.output_json_file)
|
||||
|
||||
oauth_token = _GenerateOauthToken()
|
||||
response, content = _SendHistogramSet(
|
||||
options.dashboard_url, histograms, oauth_token)
|
||||
response, content = _SendHistogramSet(options.dashboard_url, histograms)
|
||||
|
||||
upload_token = json.loads(content).get('token')
|
||||
if not options.wait_for_upload or not upload_token:
|
||||
@ -231,13 +237,12 @@ def UploadToDashboard(options):
|
||||
|
||||
response, resp_json = _WaitForUploadConfirmation(
|
||||
options.dashboard_url,
|
||||
oauth_token,
|
||||
upload_token,
|
||||
datetime.timedelta(seconds=options.wait_timeout_sec),
|
||||
datetime.timedelta(seconds=options.wait_polling_period_sec))
|
||||
|
||||
if ((resp_json and resp_json['state'] == 'COMPLETED') or
|
||||
_CheckFullUploadInfo(options.dashboard_url, oauth_token, upload_token)):
|
||||
_CheckFullUploadInfo(options.dashboard_url, upload_token)):
|
||||
print 'Upload completed.'
|
||||
return 0
|
||||
|
||||
|
Reference in New Issue
Block a user