about summary refs log tree commit diff
path: root/nixos/modules/config/xdg
diff options
context:
space:
mode:
authorBryan Gardiner <bog@khumba.net>2019-05-25 20:25:12 -0700
committerBryan Gardiner <bog@khumba.net>2019-05-25 21:00:25 -0700
commit2400191caf15fec9b6376ca99c555f09df31d294 (patch)
treedfa1b27e57ef9b5972d7c75cdb3710a9daaf56b9 /nixos/modules/config/xdg
parente380ef398761206954e51426d16a328eaba27fce (diff)
downloadnixlib-2400191caf15fec9b6376ca99c555f09df31d294.tar
nixlib-2400191caf15fec9b6376ca99c555f09df31d294.tar.gz
nixlib-2400191caf15fec9b6376ca99c555f09df31d294.tar.bz2
nixlib-2400191caf15fec9b6376ca99c555f09df31d294.tar.lz
nixlib-2400191caf15fec9b6376ca99c555f09df31d294.tar.xz
nixlib-2400191caf15fec9b6376ca99c555f09df31d294.tar.zst
nixlib-2400191caf15fec9b6376ca99c555f09df31d294.zip
nixos/xdg/mime: disable fdatasync when building the XDG MIME database
Back in 2013, update-mime-database started using fdatasync() to write out
its changes after processing each file in /share/mime, with the reasoning
that a corrupted database from an interruption midway would be
problematic for applications[1].  Unfortunately, this caused a
significant regression in the time required to run update-mime-database:
commonly from under a second to half a minute or more.

This delay affects the time required to build system-path on NixOS, when
xdg.mime.enable is true (the default).  For example, on one of my systems
system-path builds in ~48 seconds, 45 of which are update-mime-database.
This makes rapidly building new system configurations not fun.

This commit disables the calls to fdatasync().  update-mime-database
checks an environment variable, PKGSYSTEM_ENABLE_FSYNC, to determine
whether it should sync, and we can set this to false.  system-path
already only has whatever filesystem commit guarantees that the Nix
builder provides.  Furthermore, there is no risk of a failed MIME
database update messing up existing packages, because this is Nix.

(This issue was also reported at and discussed by Debian, Red Hat, and
Gentoo at least.)

[1] https://bugs.freedesktop.org/show_bug.cgi?id=70366
Diffstat (limited to 'nixos/modules/config/xdg')
-rw-r--r--nixos/modules/config/xdg/mime.nix2
1 files changed, 1 insertions, 1 deletions
diff --git a/nixos/modules/config/xdg/mime.nix b/nixos/modules/config/xdg/mime.nix
index cd1064630fbc..a5374c2b468d 100644
--- a/nixos/modules/config/xdg/mime.nix
+++ b/nixos/modules/config/xdg/mime.nix
@@ -24,7 +24,7 @@ with lib;
 
     environment.extraSetup = ''
       if [ -w $out/share/mime ] && [ -d $out/share/mime/packages ]; then
-          XDG_DATA_DIRS=$out/share ${pkgs.buildPackages.shared-mime-info}/bin/update-mime-database -V $out/share/mime > /dev/null
+          XDG_DATA_DIRS=$out/share PKGSYSTEM_ENABLE_FSYNC=0 ${pkgs.buildPackages.shared-mime-info}/bin/update-mime-database -V $out/share/mime > /dev/null
       fi
 
       if [ -w $out/share/applications ]; then