From 8daae535c4aa008d86138e2279c884aae4da081d Mon Sep 17 00:00:00 2001 From: Michael Schroeder Date: Thu, 2 Apr 2020 12:27:23 +0200 Subject: [PATCH] [backend] bs_dbtool: do not die right away if an entry could not be fetched Instead, collect the bad entry and print them at the end of the conversion. --- src/backend/bs_dbtool | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/backend/bs_dbtool b/src/backend/bs_dbtool index 164d12ce725..c26573ea28b 100755 --- a/src/backend/bs_dbtool +++ b/src/backend/bs_dbtool @@ -66,6 +66,7 @@ if ($table eq 'linkinfo') { } $db->{'allkeyspath'} = 'name'; $db->{'allkeyspath'} = 'project' if $table eq 'repoinfo'; + delete $db->{'allkeyspath'} if ($table eq 'repoinfo' || $table eq 'pattern') && !$BSConfig::published_db_sqlite; } else { die("unknown database table $table\n"); } @@ -213,22 +214,39 @@ if ($cmd eq 'convert') { } $ndb->asyncmode(); + my @bad; for my $prp (@todo) { my $prp_ext = $prp; $prp_ext =~ s/:/:\//g; if ($table eq 'linkinfo') { my ($projid, $packid) = split('/', $prp, 2); - my $linkinfo = $db->fetch($prp) || die; + my $linkinfo = $db->fetch($prp); + if (!$linkinfo) { + push @bad, $prp; + warn("could not fetch $bad[-1]\n"); + next; + } $ndb->store_linkinfo($projid, $packid, $linkinfo); } elsif ($table eq 'pattern') { my $patterninfo = {}; for my $path (sort keys %{$todo_pattern{$prp}}) { - $patterninfo->{$path} = $db->fetch("$prp_ext/$path") || die; + my $pi = $db->fetch("$prp_ext/$path"); + if (!$pi) { + push @bad, "$prp_ext/$path"; + warn("could not fetch $bad[-1]\n"); + next; + } + $patterninfo->{$path} = $pi; } $ndb->updatedb_patterninfo($prp, $patterninfo); } elsif ($table eq 'binary') { - my $repoinfo = $db->fetch($prp) || die; + my $repoinfo = $db->fetch($prp); + if (!$repoinfo) { + push @bad, $prp; + warn("could not fetch $bad[-1]\n"); + next; + } $ndb->updatedb_repoinfo($prp, $repoinfo); } @@ -236,6 +254,10 @@ if ($cmd eq 'convert') { print "$done/$todo\n" if $done % 10 == 0; } print "$todo/$todo\n"; + if (@bad) { + print "WARNING: could not fetch the following entries:\n"; + print " - $_\n" for @bad; + } exit(0); }