From: Ian Jackson Date: Sun, 22 Mar 2015 11:09:11 +0000 (+0000) Subject: dgit-repos-policy-debian: retry on db commit failure X-Git-Tag: debian/0.30~242 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=66ca07a7e81a379bd745647d239761087c40288c;hp=d395baaa070686dce79a9ad7cd02777a4caa4778;p=dgit.git dgit-repos-policy-debian: retry on db commit failure --- 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;