Eelco Dolstra
e4907411c2
* Only do "pragma journal_mode = ..." if the current journal mode
...
differs from the desired mode. There is an open SQLite ticket
`Executing "PRAGMA journal_mode" may delete journal file while it is
in use.'
2010-09-01 11:36:22 +00:00
Eelco Dolstra
e2e168f7c2
`nix-store --verify' improvements:
...
* If a path has disappeared, check its referrers first, and don't try
to invalidate paths that have valid referrers. Otherwise we get a
foreign key constraint violation.
* Read the whole Nix store directory instead of statting each valid
path, which is slower.
* Acquire the global GC lock.
2010-08-31 11:47:31 +00:00
Eelco Dolstra
034f608e00
* Don't complain if the stored hash of a path is zero (unknown).
2010-08-24 14:25:33 +00:00
Eelco Dolstra
fd9c77dfc7
* Use SQLite 3.7.0's write-ahead logging (WAL mode). This is a lot
...
faster than the old mode when fsyncs are enabled, because it only
performs an fsync() when doing a checkpoint, rather than at every
commit. Some timings for doing a "nix-instantiate /etc/nixos/nixos
-A system" after modifying the stdenv setup script:
42.5s - SQLite 3.6.23 with truncate mode and fsync
3.4s - SQLite 3.6.23 with truncate mode and no fsync
32.1s - SQLite 3.7.0 with truncate mode and fsync
16.8s - SQLite 3.7.0 with WAL mode and fsync, auto-checkpoint
every 1000 pages
8.3s - SQLite 3.7.0 with WAL mode and fsync, auto-checkpoint
every 8192 pages
1.7s - SQLite 3.7.0 with WAL mode and no fsync
The default is now to use WAL mode with fsyncs. Because WAL doesn't
work on remote filesystems such as NFS (as it uses shared memory),
truncate mode can be re-enabled by setting the "use-sqlite-wal"
option to false.
2010-08-04 17:35:59 +00:00
Eelco Dolstra
3e5e0faf9c
* Okay, putting a lock on the temporary directory used by importPath()
...
doesn't work because the garbage collector doesn't actually look at
locks. So r22253 was stupid. Use addTempRoot() instead. Also,
locking the temporary directory in exportPath() was silly because it
isn't even in the store.
2010-06-21 11:08:09 +00:00
Eelco Dolstra
bf87cc44b4
* Sync with the trunk.
2010-06-21 07:55:38 +00:00
Eelco Dolstra
b57189174f
* In importPath() and exportPath(), lock the temporary directory to
...
prevent it from being deleted by the garbage collector.
2010-06-14 08:34:48 +00:00
Eelco Dolstra
d1f6c0cbe3
* Replacing ValidPath rows doesn't work because it causes a constraint
...
violation of the Refs table. So don't do that.
2010-06-08 13:38:28 +00:00
Eelco Dolstra
aa45027818
* Sync with the trunk.
2010-05-12 22:13:09 +00:00
Eelco Dolstra
6199f9b93e
* Added a command `nix-store --clear-failed-paths <PATHS>' to clear
...
the "failed" status of the given store paths. The special value `*'
clears all failed paths.
2010-04-26 12:56:42 +00:00
Eelco Dolstra
2398af13c5
* Add an command `nix-store --query-failed-paths' to list the cached
...
failed paths (when using the `build-cache-failure' option).
2010-04-26 12:43:42 +00:00
Eelco Dolstra
efc7a579e8
* Don't use the ATerm library for parsing/printing .drv files.
2010-04-19 13:46:58 +00:00
Eelco Dolstra
1a65142ec4
* Remove a debug statement.
2010-03-10 12:46:25 +00:00
Eelco Dolstra
4c356acd04
* In `nix-store --export', abort if the contents of a path has
...
changed. This prevents corrupt paths from spreading to other
machines. Note that checking the hash is cheap because we're
hashing anyway (because of the --sign feature).
2010-03-09 14:32:03 +00:00
Eelco Dolstra
2e4ef03aa3
* Increase the sqlite timeout.
2010-03-08 10:35:45 +00:00
Eelco Dolstra
3f9e647ae8
* checkInterrupt() shouldn't be called from a destructor.
2010-03-02 19:04:17 +00:00
Eelco Dolstra
af565c348a
* Support read-only access to the database.
2010-02-24 16:44:43 +00:00
Eelco Dolstra
e33f67ff0b
* Refactor the upgrade / database initialisation logic a bit.
2010-02-24 16:30:20 +00:00
Eelco Dolstra
84a4dd5ff0
* Don't use fdatasync since it doesn't work on Snow Leopard.
...
* Don't refer to config.h in util.hh, because config.h is not
installed (http://hydra.nixos.org/build/303053 ).
2010-02-24 15:46:06 +00:00
Eelco Dolstra
cfe742cfc5
* A function to query just the database id of a valid path.
2010-02-24 15:07:23 +00:00
Eelco Dolstra
9fd85c94de
* Use `truncate' journal mode, which should be a bit faster.
2010-02-24 14:22:34 +00:00
Eelco Dolstra
a3c63d0d6c
* Disable fsync() in SQLite if the fsync-metadata option is set to
...
false.
* Change the default for `fsync-metadata' to true.
* Disable `fsync-metadata' in `make check'.
2010-02-24 13:12:57 +00:00
Eelco Dolstra
90b6352d0a
* Do registerValidPaths() in one transaction, which is much faster.
...
E.g. it cuts the runtime of the referrers test from 50s to 23s.
2010-02-24 12:48:00 +00:00
Eelco Dolstra
462bd50aef
* Use normal (rather than full) synchronous mode, which I gather from
...
the description at http://www.sqlite.org/atomiccommit.html should be
safe enough.
2010-02-24 10:57:57 +00:00
Eelco Dolstra
2b20318b0e
2010-02-22 14:24:37 +00:00
Eelco Dolstra
9cda616949
* The database needs a trigger to get rid of self-references to
...
prevent a foreign key constraint violation on the Refs table when
deleting a path.
2010-02-22 14:18:55 +00:00
Eelco Dolstra
c4d388add4
* Get derivation outputs from the database instead of the .drv file,
...
which requires more I/O.
2010-02-22 12:44:36 +00:00
Eelco Dolstra
103cfee056
* Revert r19650 (implement gc-keep-outputs by looking for derivations
...
with the same name as the output) and instead use the
DerivationOutputs table in the database, which is the correct way to
to do things.
2010-02-22 11:44:17 +00:00
Eelco Dolstra
299ff64812
* Put the derivation outputs in the database. This is useful for the
...
garbage collector.
2010-02-22 11:15:50 +00:00
Eelco Dolstra
1930570ad9
* Foreign key support in SQLite is not a persistent setting, so enable
...
it at startup.
* Implement negative caching. Now `make check' passes.
2010-02-19 17:15:22 +00:00
Eelco Dolstra
9c9a88e9e2
* Implement more stuff.
2010-02-19 16:43:25 +00:00
Eelco Dolstra
762cee72cc
* Implement registerValidPath().
2010-02-19 16:04:51 +00:00
Eelco Dolstra
268f9aaf28
* Implemented queryValidPaths() and verifyStore().
2010-02-18 16:51:27 +00:00
Eelco Dolstra
836e5b6f57
* Implemented queryReferrers().
2010-02-18 16:21:59 +00:00
Eelco Dolstra
77cb9e3fb1
* Implement queryPathInfo().
2010-02-18 15:52:57 +00:00
Eelco Dolstra
885e22b16e
* Implement isValidPath().
2010-02-18 15:11:08 +00:00
Eelco Dolstra
cfb09e0fad
* Automatically abort transactions if they go out of scope without
...
committing.
2010-02-18 14:40:07 +00:00
Eelco Dolstra
e0305bb7a8
* Some wrapper objects to ensure that SQLite objects are properly
...
destroyed.
2010-02-18 14:30:42 +00:00
Eelco Dolstra
a053d2d8e5
* Add the deriver to the ValidPaths table. In principle we could now
...
store all the derivers of a path efficiently. But that opens a big
can of worms with respect to garbage collector semantics.
2010-02-18 13:48:18 +00:00
Eelco Dolstra
dbddac0fe9
* Assign an integer id to every row in the ValidPaths table in order
...
to make the Refs table more space-efficient. For instance, this
reduces the size of the database on my laptop from 93 MiB to 18
MiB. (It was 72 MiB with the old schema on an ext3 disk with a 1
KiB block size.)
2010-02-18 13:40:46 +00:00
Eelco Dolstra
c1a07f9445
* Convert the Nix database to SQLite.
2010-02-18 13:16:59 +00:00
Eelco Dolstra
07ffdc2862
* Added an option "fsync-metadata" to fsync() changes to
...
/nix/var/nix/db.
* Removed the function writeStringToFile since it does (almost) the
same thing as writeFile.
2010-01-29 12:22:58 +00:00
Eelco Dolstra
ad529fb89f
* Don't consider a store path valid if its info file exists but is
...
zero bytes long. That makes Nix more robust in case of crashes
(especially on ext4).
2010-01-29 11:53:58 +00:00
Eelco Dolstra
327a232c85
* Remove support for old (before Nix 0.12pre12020) databases.
2009-11-06 01:15:44 +00:00
Eelco Dolstra
c7057fc1f2
* And some more.
2009-09-24 07:39:55 +00:00
Eelco Dolstra
676e07902e
* Darwin hack.
2009-09-23 18:04:55 +00:00
Eelco Dolstra
64e89980e8
* Create some state directories automatically as a convenience.
2009-09-23 17:05:51 +00:00
Eelco Dolstra
14bc3ce3d6
* Canonicalise timestamps in the Nix store to 1 (1970-01-01 00:00:01
...
UTC) rather than 0 (00:00:00). 1 is a better choice because some
programs use 0 as a special value. For instance, the Template
Toolkit uses a timestamp of 0 to denote the non-existence of a file,
so it barfs on files in the Nix store (see
template-toolkit-nix-store.patch in Nixpkgs). Similarly, Maya 2008
fails to load script directories with a timestamp of 0 and can't be
patched because it's closed source.
This will also shut up those "implausibly old time stamp" GNU tar
warnings.
2009-06-13 16:30:58 +00:00
Eelco Dolstra
d5eab2fc82
* Use foreach in a lot of places.
2009-04-21 11:52:16 +00:00
Eelco Dolstra
8f1bf28505
* nix-store --verify: don't bail out if a referenced path is missing.
...
(It can't fix it though.)
2009-04-21 11:06:27 +00:00