public inbox for development@lists.ipfire.org
 help / color / mirror / Atom feed
From: "Peter Müller" <peter.mueller@ipfire.org>
To: development@lists.ipfire.org
Subject: Re: [PATCH] pakfire: Better errorhandling on downloads
Date: Sat, 25 Jun 2022 10:11:27 +0000	[thread overview]
Message-ID: <c9d9f0e3-4a97-4a34-9888-51d19f978254@ipfire.org> (raw)
In-Reply-To: <d5e0309931676a0a7a88ad60f9830df150c6e4e4.camel@sicho.home>

[-- Attachment #1: Type: text/plain, Size: 12612 bytes --]

Hello Robin,

many thanks for your mail.

Yes, this was indeed an accident, as I went through Patchwork the other day to
gather all remaining patches for Core Update 169 - we are a bit behind schedule,
unfortunately. On this occasion, I marked a bunch of orphaned patches as "dropped"
or "superseded", yours included.

That was wrong, as this patch of yours has nothing to do with
https://patchwork.ipfire.org/project/ipfire/list/?series=2650, but did not occur
to me in this moment.

I will revert this, and you should receive an e-mail from Patchwork soon. Sorry
for the delay and negligence, I will keep this in mind for Core Update 170.

Again, thanks for letting us know.

All the best,
Peter Müller


> Hi all
> 
> Today I received a patchwork notice that this patch was Superseded 
> http://patchwork.ipfire.org/project/ipfire/patch/20220223202130.6104-2-robin.roevens(a)disroot.org/
> 
> So I was wondering which patch is superseding this one as I didn't
> supersede it myself, nor did I see a patch on the mailinglist tackling
> the same problem and it still looks valid against current next.
> I know there where improvements to pakfire.cgi, but this patch improves
> the errorhandling in the pakfire CLI command itself. So those
> pakfire.cgi patches should not be considered to supersede this one. 
> 
> Is this possibly marked as superseded by accident?
> 
> Regards
> Robin
> 
> Robin Roevens schreef op wo 23-02-2022 om 21:21 [+0100]:
>> - Add true/false return codes to fetchfile, getmetafile and
>> getmirrors
>>   indicating succes or failure.
>> - Check on those return codes and fail gracefully with clean
>>   error message(s) when downloads fail.
>> - Replace duplicate meta-file fetching code in dbgetlist with
>>   getmetafile function (fixing possibly missed cariage return
>>   conversion in meta-files).
>> - Remove pointless 5 retries to download server-list.db in
>>   selectmirror as fetchfile already retries 5 times.
>> ---
>>  src/pakfire/lib/functions.pl | 84 +++++++++++++++++++++-------------
>> --
>>  1 file changed, 49 insertions(+), 35 deletions(-)
>>
>> diff --git a/src/pakfire/lib/functions.pl
>> b/src/pakfire/lib/functions.pl
>> index d4e338f23..24c55fd4a 100644
>> --- a/src/pakfire/lib/functions.pl
>> +++ b/src/pakfire/lib/functions.pl
>> @@ -2,7 +2,7 @@
>>  ####################################################################
>> ###########
>>  #                                                                   
>>           #
>>  # IPFire.org - A linux based
>> firewall                                         #
>> -# Copyright (C) 2007-2021   IPFire Team  
>> <info(a)ipfire.org>                   #
>> +# Copyright (C) 2007-2022   IPFire Team  
>> <info(a)ipfire.org>                   #
>>  #                                                                   
>>           #
>>  # This program is free software: you can redistribute it and/or
>> modify        #
>>  # it under the terms of the GNU General Public License as published
>> by        #
>> @@ -206,7 +206,7 @@ sub fetchfile {
>>  
>>                 if ( $code eq "500" ) {
>>                         message("Giving up: There was no chance to
>> get the file \"$getfile\" from any available server.\nThere was an
>> error on the way. Please fix it.");
>> -                       return 1;
>> +                       return 0;
>>                 }
>>  
>>                 if ($response->is_success) {
>> @@ -226,7 +226,7 @@ sub fetchfile {
>>                                 }
>>                                 logger("DOWNLOAD FINISHED: $file");
>>                                 $allok = 1;
>> -                               return 0;
>> +                               return 1;
>>                         } else {
>>                                 logger("DOWNLOAD ERROR: Could not
>> open $Conf::tmpdir/$bfile for writing.");
>>                         }
>> @@ -235,7 +235,7 @@ sub fetchfile {
>>                 }
>>         }
>>         message("DOWNLOAD ERROR: There was no chance to get the file
>> \"$getfile\" from any available server.\nMay be you should run
>> \"pakfire update\" to get some new servers.");
>> -       return 1;
>> +       return 0;
>>  }
>>  
>>  sub getmirrors {
>> @@ -256,9 +256,14 @@ sub getmirrors {
>>         }
>>  
>>         if ("$force" eq "force") {
>> -               fetchfile("$Conf::version/lists/server-list.db",
>> "$Conf::mainserver");
>> -               move("$Conf::cachedir/server-list.db",
>> "$Conf::dbdir/lists/server-list.db");
>> +               if (fetchfile("$Conf::version/lists/server-list.db",
>> "$Conf::mainserver")) {
>> +                       move("$Conf::cachedir/server-list.db",
>> "$Conf::dbdir/lists/server-list.db");
>> +               } elsif (! -e "$Conf::dbdir/lists/server-list.db" ) {
>> +                       # if we end up with no server-list at all,
>> return failure
>> +                       return 0;
>> +               }
>>         }
>> +       return 1;
>>  }
>>  
>>  sub getcoredb {
>> @@ -279,8 +284,9 @@ sub getcoredb {
>>         }
>>  
>>         if ("$force" eq "force") {
>> -               fetchfile("lists/core-list.db", "");
>> -               move("$Conf::cachedir/core-list.db",
>> "$Conf::dbdir/lists/core-list.db");
>> +               if (fetchfile("lists/core-list.db", "")) {
>> +                       move("$Conf::cachedir/core-list.db",
>> "$Conf::dbdir/lists/core-list.db");
>> +               }
>>         }
>>  }
>>  
>> @@ -318,15 +324,13 @@ sub selectmirror {
>>  
>>         ### Check if there is a current server list and read it.
>>         #   If there is no list try to get one.
>> -       my $count = 0;
>> -       while (!(open(FILE, "<$Conf::dbdir/lists/server-list.db")) &&
>> ($count lt 5)) {
>> -               $count++;
>> -               getmirrors("noforce");
>> -       }
>> -       if ($count == 5) {
>> -               message("MIRROR ERROR: Could not find or download a
>> server list");
>> -               exit 1;
>> +       unless (open(FILE, "<$Conf::dbdir/lists/server-list.db")) {
>> +               unless (getmirrors("noforce")) {
>> +                       message("MIRROR ERROR: Could not find or
>> download a server list");
>> +                       exit 1;
>> +               }
>>         }
>> +
>>         my @lines = <FILE>;
>>         close(FILE);
>>  
>> @@ -390,8 +394,13 @@ sub dbgetlist {
>>         }
>>  
>>         if ("$force" eq "force") {
>> -               fetchfile("lists/packages_list.db", "");
>> -               move("$Conf::cachedir/packages_list.db",
>> "$Conf::dbdir/lists/packages_list.db");
>> +               if (fetchfile("lists/packages_list.db", "")) {
>> +                       move("$Conf::cachedir/packages_list.db",
>> "$Conf::dbdir/lists/packages_list.db");
>> +               } elsif ( -e "$Conf::dbdir/lists/packages_list.db" )
>> {
>> +                       # If we end up with no db file after download
>> error there
>> +                       # is nothing more we can do here.
>> +                       return 0;
>> +               }
>>         }
>>  
>>         # Update the meta database if new packages was in the package
>> list
>> @@ -419,8 +428,7 @@ sub dbgetlist {
>>                         @templine = split(/\;/,$prog);
>>                         if (("$metadata{'Name'}" eq "$templine[0]")
>> && ("$metadata{'Release'}" ne "$templine[2]")) {
>>                                 move("$Conf::dbdir/meta/meta-
>> $metadata{'Name'}","$Conf::dbdir/meta/old_meta-$metadata{'Name'}");
>> -                               fetchfile("meta/meta-
>> $metadata{'Name'}", "");
>> -                               move("$Conf::cachedir/meta-
>> $metadata{'Name'}", "$Conf::dbdir/meta/meta-$metadata{'Name'}");
>> +                               getmetafile($metadata{'Name'});
>>                         }
>>                 }
>>         }
>> @@ -532,11 +540,14 @@ sub dblist {
>>  
>>  sub resolvedeps_one {
>>         my $pak = shift;
>> -
>> -       getmetafile("$pak");
>> -
>> +       
>>         message("PAKFIRE RESV: $pak: Resolving dependencies...");
>>  
>> +       unless (getmetafile("$pak")) {
>> +               message("PAKFIRE ERROR: Error retrieving dependency
>> information on $pak. Unable to resolve dependencies.");
>> +               exit 1;
>> +       };
>> +       
>>         my %metadata = parsemetafile("$Conf::dbdir/meta/meta-$pak");
>>         my @all;
>>         my @deps = split(/ /, $metadata{'Dependencies'});
>> @@ -629,14 +640,10 @@ sub cleanup {
>>  
>>  sub getmetafile {
>>         my $pak = shift;
>> -
>> -       unless ( -e "$Conf::dbdir/meta/meta-$pak" ) {
>> -               fetchfile("meta/meta-$pak", "");
>> -               move("$Conf::cachedir/meta-$pak",
>> "$Conf::dbdir/meta/meta-$pak");
>> -       }
>> -
>> -       if ( -z "$Conf::dbdir/meta/meta-$pak" ) {
>> -               fetchfile("meta/meta-$pak", "");
>> +       
>> +       # Try to download meta-file if we don't have one yet, or it
>> is empty for some reason
>> +       if ((! -e "$Conf::dbdir/meta/meta-$pak" ) || ( -z
>> "$Conf::dbdir/meta/meta-$pak" )) {
>> +               return 0 unless (fetchfile("meta/meta-$pak", ""));
>>                 move("$Conf::cachedir/meta-$pak",
>> "$Conf::dbdir/meta/meta-$pak");
>>         }
>>  
>> @@ -651,6 +658,7 @@ sub getmetafile {
>>                 print FILE $string;
>>         }
>>         close(FILE);
>> +
>>         return 1;
>>  }
>>  
>> @@ -713,8 +721,11 @@ sub getpak {
>>         my $pak = shift;
>>         my $force = shift;
>>  
>> -       getmetafile("$pak");
>> -
>> +       unless (getmetafile("$pak")) {
>> +               message("PAKFIRE ERROR: Unable to retrieve $pak
>> metadata.");
>> +               exit 1;
>> +       }
>> +       
>>         my %metadata = parsemetafile("$Conf::dbdir/meta/meta-$pak");
>>         my $file = $metadata{'File'};
>>  
>> @@ -728,8 +739,11 @@ sub getpak {
>>                         return $file;
>>                 }
>>         }
>> -
>> -       fetchfile("paks/$file", "");
>> +       
>> +       unless (fetchfile("paks/$file", "")) {
>> +               message("PAKFIRE ERROR: Unable to download $pak.");
>> +               exit 1;
>> +       }
>>         return $file;
>>  }
>>  
>> -- 
>> 2.34.1
>>
>>
> 

  reply	other threads:[~2022-06-25 10:11 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-23 20:21 [PATCH 0/1] " Robin Roevens
2022-02-23 20:21 ` [PATCH] " Robin Roevens
2022-03-01 13:31   ` Michael Tremer
2022-03-03 21:20     ` Robin Roevens
2022-03-04 11:18       ` Michael Tremer
2022-03-04 15:08         ` Adolf Belka
2022-03-07 13:33           ` Robin Roevens
2022-03-07 14:11             ` Adolf Belka
2022-06-23 21:20   ` Robin Roevens
2022-06-25 10:11     ` Peter Müller [this message]
2022-03-01 13:27 ` [PATCH 0/1] " Michael Tremer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c9d9f0e3-4a97-4a34-9888-51d19f978254@ipfire.org \
    --to=peter.mueller@ipfire.org \
    --cc=development@lists.ipfire.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox