From 7f2b30d33c5898d31f9b6623657d93d272b8ea7a Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Wed, 7 Sep 2016 11:22:38 +0100 Subject: [PATCH 1/1] Add a small preload library to flush files on close --- cookbooks/planet/files/default/flush/Makefile | 2 ++ cookbooks/planet/files/default/flush/flush.c | 16 ++++++++++++++ cookbooks/planet/recipes/replication.rb | 22 +++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 cookbooks/planet/files/default/flush/Makefile create mode 100644 cookbooks/planet/files/default/flush/flush.c 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" -- 2.43.2