#41 Be more resilient to transient bugzilla error
Merged 4 years ago by nphilipp. Opened 4 years ago by pingou.
fedora-infra/ pingou/distgit-bugzilla-sync more_bz_retry  into  master

@@ -446,9 +446,24 @@ 

                  # FIXME: initialowner has been made mandatory for some

                  # reason.  Asking dkl why.

                  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"]:

                      try:

-                         self.server.editcomponent(data)

+                         edit_component(data)

                      except xmlrpc.client.Fault as e:

                          # Output something useful in args

                          e.args = (data, e.faultCode, e.faultString)
@@ -456,6 +471,7 @@ 

                      except xmlrpc.client.ProtocolError as e:

                          e.args = ('ProtocolError', e.errcode, e.errmsg)

                          raise

+ 

                  if owner_changed:

                      self.update_open_bugs(

                          new_poc=owner_email,
@@ -500,9 +516,24 @@ 

                          print(f"[ADDCOMP] {bz_product_name}/{package}  {key} set to FAS name(s) `{value}`")

                      else:

                          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"]:

                  try:

-                     self.server.addcomponent(data)

+                     add_component(data)

                  except xmlrpc.client.Fault as e:

                      # Output something useful in args

                      e.args = (data, e.faultCode, e.faultString)

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

Metadata Update from @nphilipp:
- Request assigned

4 years ago

Pull-Request has been merged by nphilipp

4 years ago
Metadata