Don't retry after Gerrit HTTP 409s
Gerrit will return an HTTP status 409 when you try to modify changes that are already merged or abandoned. For example if you try to vote on a change in these closed states. In those cases we don't actually want to retry the request as doing so is a waste of effort. Update the gerritconnection drive to handle HTTP 409s as a special case that should not be retried. Change-Id: I4bd7b8e5aa512bf0ba1d1bf7dd9a39c3843e6ff6
This commit is contained in:
parent
9b300bc8df
commit
6f125e56c6
|
@ -48,6 +48,10 @@ from zuul.model import Ref, Tag, Branch, Project
|
|||
TIMEOUT = 30
|
||||
|
||||
|
||||
class HTTPConflictException(Exception):
|
||||
message = "Received response 409"
|
||||
|
||||
|
||||
class GerritChangeData(object):
|
||||
"""Compatability layer for SSH/HTTP
|
||||
|
||||
|
@ -613,7 +617,9 @@ class GerritConnection(BaseConnection):
|
|||
auth=self.auth, timeout=TIMEOUT,
|
||||
headers={'User-Agent': self.user_agent})
|
||||
self.iolog.debug('Received: %s %s' % (r.status_code, r.text,))
|
||||
if r.status_code != 200:
|
||||
if r.status_code == 409:
|
||||
raise HTTPConflictException()
|
||||
elif r.status_code != 200:
|
||||
raise Exception("Received response %s" % (r.status_code,))
|
||||
ret = None
|
||||
if r.text and len(r.text) > 4:
|
||||
|
@ -637,7 +643,9 @@ class GerritConnection(BaseConnection):
|
|||
headers={'Content-Type': 'application/json;charset=UTF-8',
|
||||
'User-Agent': self.user_agent})
|
||||
self.iolog.debug('Received: %s %s' % (r.status_code, r.text,))
|
||||
if r.status_code != 200:
|
||||
if r.status_code == 409:
|
||||
raise HTTPConflictException()
|
||||
elif r.status_code != 200:
|
||||
raise Exception("Received response %s" % (r.status_code,))
|
||||
ret = None
|
||||
if r.text and len(r.text) > 4:
|
||||
|
@ -1065,6 +1073,9 @@ class GerritConnection(BaseConnection):
|
|||
(changeid, change.commit, uuid),
|
||||
checkinfo)
|
||||
break
|
||||
except HTTPConflictException:
|
||||
log.exception("Conflict submitting check data to gerrit.")
|
||||
break
|
||||
except Exception:
|
||||
log.exception("Error submitting check data to gerrit, "
|
||||
"attempt %s", x)
|
||||
|
@ -1108,6 +1119,9 @@ class GerritConnection(BaseConnection):
|
|||
(changeid, change.commit),
|
||||
data)
|
||||
break
|
||||
except HTTPConflictException:
|
||||
log.exception("Conflict submitting data to gerrit.")
|
||||
break
|
||||
except Exception:
|
||||
log.exception(
|
||||
"Error submitting data to gerrit, attempt %s", x)
|
||||
|
@ -1117,6 +1131,9 @@ class GerritConnection(BaseConnection):
|
|||
try:
|
||||
self.post('changes/%s/submit' % (changeid,), {})
|
||||
break
|
||||
except HTTPConflictException:
|
||||
log.exception("Conflict submitting data to gerrit.")
|
||||
break
|
||||
except Exception:
|
||||
log.exception(
|
||||
"Error submitting data to gerrit, attempt %s", x)
|
||||
|
@ -1261,7 +1278,9 @@ class GerritConnection(BaseConnection):
|
|||
auth=self.auth, timeout=TIMEOUT,
|
||||
headers={'User-Agent': self.user_agent})
|
||||
self.iolog.debug('Received: %s %s' % (r.status_code, r.text,))
|
||||
if r.status_code != 200:
|
||||
if r.status_code == 409:
|
||||
raise HTTPConflictException()
|
||||
elif r.status_code != 200:
|
||||
raise Exception("Received response %s" % (r.status_code,))
|
||||
out = r.text[r.text.find('\n') + 5:]
|
||||
else:
|
||||
|
|
Loading…
Reference in New Issue