From 75e12b8e666aa0b689f6b654d37c84be912ff6d4 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 5 Jun 2013 16:17:06 +0200 Subject: [PATCH] download-from-binary-cache.pl: Fix race condition Fixes the error "DBD::SQLite::db do failed: column url is not unique". --- scripts/download-from-binary-cache.pl.in | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/download-from-binary-cache.pl.in b/scripts/download-from-binary-cache.pl.in index a47d3579e..08d22ea63 100644 --- a/scripts/download-from-binary-cache.pl.in +++ b/scripts/download-from-binary-cache.pl.in @@ -265,11 +265,12 @@ sub getAvailableCaches { elsif ($1 eq "Priority") { $priority = int($2); } } - $dbh->do("insert into BinaryCaches(url, timestamp, storeDir, wantMassQuery, priority) values (?, ?, ?, ?, ?)", + $dbh->do("insert or replace into BinaryCaches(url, timestamp, storeDir, wantMassQuery, priority) values (?, ?, ?, ?, ?)", {}, $url, time(), $storeDir, $wantMassQuery, $priority); - my $id = $dbh->last_insert_id("", "", "", ""); + $queryCache->execute($url); + $res = $queryCache->fetchrow_hashref() or die; next if $storeDir ne $Nix::Config::storeDir; - push @caches, { id => $id, url => $url, wantMassQuery => $wantMassQuery, priority => $priority }; + push @caches, { id => $res->{id}, url => $url, wantMassQuery => $wantMassQuery, priority => $priority }; } @caches = sort { $a->{priority} <=> $b->{priority} } @caches;