From: Tom Hughes Date: Wed, 7 Sep 2016 10:22:38 +0000 (+0100) Subject: Add a small preload library to flush files on close X-Git-Url: https://git.openstreetmap.org/chef.git/commitdiff_plain/7f2b30d33c5898d31f9b6623657d93d272b8ea7a Add a small preload library to flush files on close --- diff --git a/cookbooks/planet/files/default/flush/Makefile b/cookbooks/planet/files/default/flush/Makefile new file mode 100644 index 000000000..b42035e7b --- /dev/null +++ b/cookbooks/planet/files/default/flush/Makefile @@ -0,0 +1,2 @@ +flush.so: flush.c + cc -O2 -fPIC -D_GNU_SOURCE -shared -o flush.so flush.c -ldl diff --git a/cookbooks/planet/files/default/flush/flush.c b/cookbooks/planet/files/default/flush/flush.c new file mode 100644 index 000000000..c80e86af2 --- /dev/null +++ b/cookbooks/planet/files/default/flush/flush.c @@ -0,0 +1,16 @@ +#include +#include + +static int (*real_close)(int fd); + +static void __attribute__((constructor)) initialise(void) +{ + real_close = dlsym(RTLD_NEXT, "close"); +} + +int close(int fd) +{ + fdatasync(fd); + + return real_close(fd); +} diff --git a/cookbooks/planet/recipes/replication.rb b/cookbooks/planet/recipes/replication.rb index d9ff9b67c..25fe9671d 100644 --- a/cookbooks/planet/recipes/replication.rb +++ b/cookbooks/planet/recipes/replication.rb @@ -30,6 +30,28 @@ package "ruby-libxml" package "libpq-dev" gem_package "pg" +package "make" +package "gcc" + +remote_directory "/opt/flush" do + source "flush" + owner "root" + group "root" + mode 0o755 + files_owner "root" + files_group "root" + files_mode 0o755 +end + +execute "/opt/flush/Makefile" do + action :nothing + command "make" + cwd "/opt/flush" + user "root" + group "root" + subscribes :run, "remote_directory[/opt/flush]" +end + remote_directory "/usr/local/bin" do source "replication-bin" owner "root"