After v2.0.2, max_retries is ignored in GetSerialPortOutput().
This previously worked on v1.12.8.
All our tests are failing since they used this feature of the python library.
I traced the problem to this commit:
#1116 and #1117
c6912836 - fix: handle error on service not enabled (#1117)
1117 changed the default reason to be error.status which is PERMISSION_DENIAD instead using error.errors[0].reason which is rateLimitExceeded and therefore later ignored in:
# Only retry on rate limit related failures.
if reason in ("userRateLimitExceeded", "rateLimitExceeded"):
return True
Example for such json:
{'error': {'code': 403,
'errors': [{'domain': 'usageLimits',
'message': 'Quota exceeded for quota group '
"'GetSerialPortOutputGroup' and limit "
"'Instance GetSerialPortOutput requests per "
"user per 100 seconds' of service "
"'compute.googleapis.com' for consumer "
"'project_number:REDACTED'.",
'reason': 'rateLimitExceeded'}],
'message': 'Quota exceeded for quota group '
"'GetSerialPortOutputGroup' and limit 'Instance "
"GetSerialPortOutput requests per user per 100 seconds' "
"of service 'compute.googleapis.com' for consumer "
"'project_number:REDACTED'.",
'status': 'PERMISSION_DENIED'}}
I think that correct fix for #1117 should not have changed the order of lookup - first check for error.errors[0].reason and if it doesn't exist fallback to error.status
Sam
After
v2.0.2,max_retriesis ignored inGetSerialPortOutput().This previously worked on
v1.12.8.All our tests are failing since they used this feature of the python library.
I traced the problem to this commit:
#1116 and #1117
c6912836 - fix: handle error on service not enabled (#1117)1117 changed the default reason to be
error.statuswhich isPERMISSION_DENIADinstead usingerror.errors[0].reasonwhich israteLimitExceededand therefore later ignored in:Example for such json:
I think that correct fix for #1117 should not have changed the order of lookup - first check for
error.errors[0].reasonand if it doesn't exist fallback toerror.statusSam