nixpkgs/nixos/modules/config/xdg
Bryan Gardiner 2400191caf
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
2019-05-25 21:00:25 -07:00
..
autostart.nix xdg: add modules for supporting various XDG specs 2018-08-16 21:23:34 +01:00
icons.nix xdg: add modules for supporting various XDG specs 2018-08-16 21:23:34 +01:00
menus.nix xdg: add modules for supporting various XDG specs 2018-08-16 21:23:34 +01:00
mime.nix nixos/xdg/mime: disable fdatasync when building the XDG MIME database 2019-05-25 21:00:25 -07:00
sounds.nix nixos: add XDG sounds module 2018-12-18 00:32:13 +01:00