From 08cebe5fae426c11b51e645754b87e4ec5737ef3 Mon Sep 17 00:00:00 2001 From: Ondrej Nosek Date: Tue, 22 Aug 2023 22:22:03 +0200 Subject: [PATCH 08/17] Make lookaside cache retries configurable The number of attempts for lookaside cache network operations is now configurable - there are new keys 'lookaside_attempts' and 'lookaside_delay' in the configuration. The Former expresses a maximum number of attempts to try the operation. '0' or '1' is for a single try (no-retry). The latter means an initial delay between network operation attempts. Each attempt doubles the previous delay value. In seconds. JIRA: RHELCMP-11210 Signed-off-by: Ondrej Nosek --- pyrpkg/__init__.py | 10 ++++++++-- pyrpkg/cli.py | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py index f69f2ce..5928d47 100644 --- a/pyrpkg/__init__.py +++ b/pyrpkg/__init__.py @@ -110,7 +110,8 @@ class Commands(object): build_client, user=None, dist=None, target=None, quiet=False, distgit_namespaced=False, realms=None, lookaside_namespaced=False, - git_excludes=None, results_dir='root', allow_pre_generated_srpm=False): + git_excludes=None, results_dir='root', allow_pre_generated_srpm=False, + lookaside_attempts=None, lookaside_delay=None): """Init the object and some configuration details.""" # Path to operate on, most often pwd @@ -242,6 +243,10 @@ class Commands(object): # A Configuration value used in 'import_srpm' command (comes from the Copr team) # If pre-generated srpms are allowed, don't care specfile is processed by rpmautospec self.allow_pre_generated_srpm = allow_pre_generated_srpm + # number of attempts for lookaside network operations + self.lookaside_attempts = lookaside_attempts + # initial delay between network operation attempts. In seconds. + self.lookaside_delay = lookaside_delay # Define properties here # Properties allow us to "lazy load" various attributes, which also means @@ -262,7 +267,8 @@ class Commands(object): """ return CGILookasideCache( self.lookasidehash, self.lookaside, self.lookaside_cgi, - client_cert=self.cert_file, ca_cert=self.ca_cert) + client_cert=self.cert_file, ca_cert=self.ca_cert, + attempts=self.lookaside_attempts, delay=self.lookaside_delay) @property def path(self): diff --git a/pyrpkg/cli.py b/pyrpkg/cli.py index 1bd7979..16298f0 100644 --- a/pyrpkg/cli.py +++ b/pyrpkg/cli.py @@ -261,7 +261,9 @@ class cliClient(object): realms=realms, lookaside_namespaced=la_namespaced, git_excludes=git_excludes, - results_dir=results_dir + results_dir=results_dir, + lookaside_attempts=self.lookaside_attempts, + lookaside_delay=self.lookaside_delay ) if self.args.repo_name: @@ -3087,3 +3089,33 @@ class cliClient(object): def pre_push_check(self): self.cmd.pre_push_check(self.args.ref) + + @property + def lookaside_attempts(self): + """loads parameter 'lookaside_attempts' from the config file + """ + val = None + if self.config.has_option(self.name, 'lookaside_attempts'): + val = self.config.get(self.name, 'lookaside_attempts') + try: + val = int(val) + except Exception: + self.log.error("Error: The config value 'lookaside_attempts' " + "should be an integer.") + val = None + return val + + @property + def lookaside_delay(self): + """loads parameter 'lookaside_delay' from the config file + """ + val = None + if self.config.has_option(self.name, 'lookaside_delay'): + val = self.config.get(self.name, 'lookaside_delay') + try: + val = int(val) + except Exception: + self.log.error("Error: The config value 'lookaside_delay' " + "should be an integer.") + val = None + return val -- 2.43.0