Be more resilient to transient bugzilla error
ie: retry a few time (up to 5 times) with a 20 seconds pause between each attempt before raising an exception. Signed-off-by: Pierre-Yves Chibon <pingou@pingoured.fr>
This commit is contained in:
parent
7b1f707efc
commit
ad98b9e294
1 changed files with 33 additions and 2 deletions
|
@ -446,9 +446,24 @@ class BugzillaProxy:
|
||||||
# FIXME: initialowner has been made mandatory for some
|
# FIXME: initialowner has been made mandatory for some
|
||||||
# reason. Asking dkl why.
|
# reason. Asking dkl why.
|
||||||
data['initialowner'] = owner_email
|
data['initialowner'] = owner_email
|
||||||
|
|
||||||
|
def edit_component(data, num_attempts=5):
|
||||||
|
for i in range(num_attempts):
|
||||||
|
try:
|
||||||
|
self.server.editcomponent(data)
|
||||||
|
break
|
||||||
|
except Exception as e:
|
||||||
|
if i >= num_attempts - 1:
|
||||||
|
raise
|
||||||
|
if self.config['verbose']:
|
||||||
|
print(f" ERROR {e}")
|
||||||
|
print(" - Query failed, going to try again in 20 seconds")
|
||||||
|
# Wait 20 seconds and try again
|
||||||
|
time.sleep(20)
|
||||||
|
|
||||||
if not self.config["dryrun"]:
|
if not self.config["dryrun"]:
|
||||||
try:
|
try:
|
||||||
self.server.editcomponent(data)
|
edit_component(data)
|
||||||
except xmlrpc.client.Fault as e:
|
except xmlrpc.client.Fault as e:
|
||||||
# Output something useful in args
|
# Output something useful in args
|
||||||
e.args = (data, e.faultCode, e.faultString)
|
e.args = (data, e.faultCode, e.faultString)
|
||||||
|
@ -456,6 +471,7 @@ class BugzillaProxy:
|
||||||
except xmlrpc.client.ProtocolError as e:
|
except xmlrpc.client.ProtocolError as e:
|
||||||
e.args = ('ProtocolError', e.errcode, e.errmsg)
|
e.args = ('ProtocolError', e.errcode, e.errmsg)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
if owner_changed:
|
if owner_changed:
|
||||||
self.update_open_bugs(
|
self.update_open_bugs(
|
||||||
new_poc=owner_email,
|
new_poc=owner_email,
|
||||||
|
@ -500,9 +516,24 @@ class BugzillaProxy:
|
||||||
print(f"[ADDCOMP] {bz_product_name}/{package} {key} set to FAS name(s) `{value}`")
|
print(f"[ADDCOMP] {bz_product_name}/{package} {key} set to FAS name(s) `{value}`")
|
||||||
else:
|
else:
|
||||||
print(f"[ADDCOMP] {bz_product_name}/{package} {key} set to {data.get(key)}")
|
print(f"[ADDCOMP] {bz_product_name}/{package} {key} set to {data.get(key)}")
|
||||||
|
|
||||||
|
def add_component(data, num_attempts=5):
|
||||||
|
for i in range(num_attempts):
|
||||||
|
try:
|
||||||
|
self.server.addcomponent(data)
|
||||||
|
break
|
||||||
|
except Exception as e:
|
||||||
|
if i >= num_attempts - 1:
|
||||||
|
raise
|
||||||
|
if self.config['verbose']:
|
||||||
|
print(f" ERROR {e}")
|
||||||
|
print(" - Query failed, going to try again in 20 seconds")
|
||||||
|
# Wait 20 seconds and try again
|
||||||
|
time.sleep(20)
|
||||||
|
|
||||||
if not self.config["dryrun"]:
|
if not self.config["dryrun"]:
|
||||||
try:
|
try:
|
||||||
self.server.addcomponent(data)
|
add_component(data)
|
||||||
except xmlrpc.client.Fault as e:
|
except xmlrpc.client.Fault as e:
|
||||||
# Output something useful in args
|
# Output something useful in args
|
||||||
e.args = (data, e.faultCode, e.faultString)
|
e.args = (data, e.faultCode, e.faultString)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue