Ludovic Courtès <l...@gnu.org> writes: > The error message that’s haunting us: > > opening file `/gnu/store/….drv': No such file or directory > > comes from guix-daemon. It happens while the client is doing an > ‘add-text-to-store’ RPC to add that .drv to the store. > ‘LocalStore::addTextToStore’ supposedly creates the .drv file in > /gnu/store and then reads it back (‘registerValidPath’ -> ‘addValidPath’ > -> ‘readDerivation’ -> ‘readFile’): this is where it gets ENOENT. > > It would suggest that the database is consistent, but that somehow > writes don’t go through the overlay FS.
Most interesting. I saw a comment > void LocalStore::registerValidPaths(const ValidPathInfos & infos) > { > /* SQLite will fsync by default, but the new valid paths may not be > fsync-ed. > * So some may want to fsync them before registering the validity, at the > * expense of some speed of the path registering operation. */ > if (settings.syncBeforeRegistering) sync(); In vain, I therefore tried
diff --git a/nix/libstore/globals.cc b/nix/libstore/globals.cc index d4f9a46a74..5f8a3a3031 100644 --- a/nix/libstore/globals.cc +++ b/nix/libstore/globals.cc @@ -40,7 +40,7 @@ Settings::Settings() reservedSize = 8 * 1024 * 1024; fsyncMetadata = true; useSQLiteWAL = true; - syncBeforeRegistering = false; + syncBeforeRegistering = true; useSubstitutes = true; useChroot = false; impersonateLinux26 = false;
But it changes nothing. Regards, Florian