diff --git a/scripts/NixManifest.pm.in b/scripts/NixManifest.pm.in index 2d4b626570..e1a0b97094 100644 --- a/scripts/NixManifest.pm.in +++ b/scripts/NixManifest.pm.in @@ -219,11 +219,12 @@ sub updateManifestDB { # Open/create the database. our $dbh = DBI->connect("dbi:SQLite:dbname=$dbPath", "", "") or die "cannot open database `$dbPath'"; - $dbh->{AutoCommit} = 0; $dbh->{RaiseError} = 1; $dbh->{PrintError} = 0; $dbh->do("pragma foreign_keys = on"); + $dbh->do("pragma synchronous = off"); # we can always reproduce the cache + $dbh->do("pragma journal_mode = truncate"); # Initialise the database schema, if necessary. $dbh->do(<>$manifestDir/cache.lock" or die; flock(MAINLOCK, LOCK_EX) or die; + $dbh->begin_work; + # Read each manifest in $manifestDir and add it to the database, # unless we've already done so on a previous run. my %seen; @@ -291,6 +294,8 @@ EOF "select 1 from Manifests where path = ? and timestamp = ?", {}, $manifest, $timestamp)} == 1; + print STDERR "caching $manifest...\n"; + $dbh->do("delete from Manifests where path = ?", {}, $manifest); $dbh->do("insert into Manifests(path, timestamp) values (?, ?)", diff --git a/scripts/download-using-manifests.pl.in b/scripts/download-using-manifests.pl.in index a6588aa9ac..ca4d97b51a 100644 --- a/scripts/download-using-manifests.pl.in +++ b/scripts/download-using-manifests.pl.in @@ -267,6 +267,12 @@ my @path = computeSmallestDownload $targetPath; die "don't know how to produce $targetPath\n" if scalar @path == 0; +# We don't need the manifest anymore, so close it as an optimisation: +# if we still have SQLite locks blocking other processes (we +# shouldn't), this gets rid of them. +$dbh->disconnect; + + # Traverse the shortest path, perform the actions described by the # edges. my $curStep = 1;