From: Michael Tremer Date: Fri, 31 Jan 2025 12:19:08 +0000 (+0000) Subject: mirrors: Disable instead of "broken" X-Git-Tag: 0.9.30~216 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=32d75d11d07c9a2426f85e3f66c45536579a282a;p=pakfire.git mirrors: Disable instead of "broken" This patch also implements this all with flags. Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/mirror.c b/src/pakfire/mirror.c index 7e2f9263..1ff0994b 100644 --- a/src/pakfire/mirror.c +++ b/src/pakfire/mirror.c @@ -36,8 +36,9 @@ struct pakfire_mirror { unsigned int retries_left; - // Set if the mirror is considered broken - int is_broken; + enum pakfire_mirror_flags { + PAKFIRE_MIRROR_ENABLED = (1 << 0), + } flags; }; static void pakfire_mirror_free(struct pakfire_mirror* mirror) { @@ -63,6 +64,9 @@ int pakfire_mirror_create(struct pakfire_mirror** mirror, // Initialize the reference counter m->nrefs = 1; + // Set default flags + m->flags = PAKFIRE_MIRROR_ENABLED; + // Store the URL r = pakfire_string_set(m->url, url); if (r) @@ -106,16 +110,10 @@ const char* pakfire_mirror_get_url(struct pakfire_mirror* mirror) { return mirror->url; } -// Broken - -int pakfire_mirror_is_broken(struct pakfire_mirror* mirror) { - return mirror->is_broken; -} - -void pakfire_mirror_mark_as_broken(struct pakfire_mirror* mirror) { - DEBUG(mirror->ctx, "Mirror %s has been marked as broken\n", mirror->url); +// Enabled? - mirror->is_broken = 1; +int pakfire_mirror_is_enabled(struct pakfire_mirror* mirror) { + return (mirror->flags & PAKFIRE_MIRROR_ENABLED); } /* @@ -133,17 +131,22 @@ int pakfire_mirror_xfer_failed(struct pakfire_mirror* self, pakfire_xfer_error_c like 502 or 503, so there is no point in tryin again. */ case PAKFIRE_XFER_TRANSPORT_ERROR: - pakfire_mirror_mark_as_broken(self); break; /* - For all other errors, we will just count down. + For all other errors, we will just count down */ default: - if (!self->retries_left--) - pakfire_mirror_mark_as_broken(self); + if (self->retries_left-- > 0) + return 0; break; } + // Disable the mirror + self->flags &= ~PAKFIRE_MIRROR_ENABLED; + + // Log action + WARN(self->ctx, "Mirror %s has been disabled\n", self->url); + return 0; } diff --git a/src/pakfire/mirror.h b/src/pakfire/mirror.h index abc44318..754f5424 100644 --- a/src/pakfire/mirror.h +++ b/src/pakfire/mirror.h @@ -34,10 +34,9 @@ struct pakfire_mirror* pakfire_mirror_unref(struct pakfire_mirror* mirror); const char* pakfire_mirror_get_url(struct pakfire_mirror* mirror); -// Broken? +// Enabled? -int pakfire_mirror_is_broken(struct pakfire_mirror* mirror); -void pakfire_mirror_mark_as_broken(struct pakfire_mirror* mirror); +int pakfire_mirror_is_enabled(struct pakfire_mirror* mirror); int pakfire_mirror_xfer_failed(struct pakfire_mirror* self, pakfire_xfer_error_code_t code); diff --git a/src/pakfire/mirrorlist.c b/src/pakfire/mirrorlist.c index 60ffda58..fde171da 100644 --- a/src/pakfire/mirrorlist.c +++ b/src/pakfire/mirrorlist.c @@ -236,11 +236,11 @@ int pakfire_mirrorlist_empty(struct pakfire_mirrorlist* list) { } /* - Return the first mirror that isn't broken + Return the first mirror that isn't disabled */ struct pakfire_mirror* pakfire_mirrorlist_get_first(struct pakfire_mirrorlist* list) { for (unsigned int i = 0; i < list->num_mirrors; i++) { - if (pakfire_mirror_is_broken(list->mirrors[i])) + if (!pakfire_mirror_is_enabled(list->mirrors[i])) continue; return pakfire_mirror_ref(list->mirrors[i]); @@ -267,8 +267,8 @@ struct pakfire_mirror* pakfire_mirrorlist_get_next( continue; } - // Skip any broken mirrors - if (pakfire_mirror_is_broken(list->mirrors[i])) + // Skip any disabled mirrors + if (!pakfire_mirror_is_enabled(list->mirrors[i])) continue; // Return the mirror