From 66ca07a7e81a379bd745647d239761087c40288c Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 22 Mar 2015 11:09:11 +0000 Subject: [PATCH] dgit-repos-policy-debian: retry on db commit failure --- infra/dgit-repos-policy-debian | 44 ++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/infra/dgit-repos-policy-debian b/infra/dgit-repos-policy-debian index c84fd7d4..d5c4d0db 100755 --- a/infra/dgit-repos-policy-debian +++ b/infra/dgit-repos-policy-debian @@ -21,6 +21,8 @@ our $pkg; our $pkgdir; our ($pkg_exists,$pkg_secret); +our $stderr; + our ($version,$suite,$tagname); our %deliberately; @@ -60,7 +62,7 @@ our %deliberately; sub poldb_setup () { - $poldbh = DBI->connect($policydb,'','', { + $poldbh ||= DBI->connect($policydb,'','', { RaiseError=>1, PrintError=>1, AutoCommit=>0 }); $poldbh->do("PRAGMA foreign_keys = ON"); @@ -94,10 +96,6 @@ END END } -sub poldb_commit () { - $poldbh->commit; -} - sub apiquery ($) { my ($subpath) = @_; local $/=undef; @@ -326,7 +324,7 @@ END ? "package $ti->{package}" : "any package"; - print STDERR <execute($taintid); my ($ovany) = $overridesanyq->fetchrow_array(); - print STDERR $ovany ? <prepare(<(); -die unless defined $rcode; +for (;;) { + poldb_setup(); + $stderr = ''; + + my $rcode = $fn->(); + die unless defined $rcode; + + eval { $poldbh->commit; }; + last unless length $@; + + die if $sleepy >= 20; + print STDERR "[policy database busy, retrying]\n"; + sleep ++$sleepy; + + $poldbh->rollback; +} -poldb_commit(); +print STDERR $stderr; exit $rcode; -- 2.30.2