Blob Blame History Raw
From c8e7d1375715545f28a0943ce7657330e3b70acd Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Mon, 13 May 2013 17:43:19 +0200
Subject: [PATCH 5/6] metadata: Use shorter writeout timeout on NFS

Since we've moved journal to a non-volatile storage, let's flush
more often to minimize a chance of data loss.

https://bugzilla.gnome.org/show_bug.cgi?id=637095
---
 metadata/meta-daemon.c | 12 +++++++++---
 metadata/metatree.c    |  6 ++++++
 metadata/metatree.h    |  1 +
 3 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/metadata/meta-daemon.c b/metadata/meta-daemon.c
index ce34b73..f29e7f0 100644
--- a/metadata/meta-daemon.c
+++ b/metadata/meta-daemon.c
@@ -32,6 +32,7 @@
 #include "metadata-dbus.h"
 
 #define WRITEOUT_TIMEOUT_SECS 60
+#define WRITEOUT_TIMEOUT_SECS_NFS 15
 
 typedef struct {
   char *filename;
@@ -67,10 +68,15 @@ writeout_timeout (gpointer data)
 static void
 tree_info_schedule_writeout (TreeInfo *info)
 {
+  gboolean on_nfs;
+
   if (info->writeout_timeout == 0)
-    info->writeout_timeout =
-      g_timeout_add_seconds (WRITEOUT_TIMEOUT_SECS,
-			     writeout_timeout, info);
+    {
+      on_nfs = meta_tree_is_on_nfs (info->tree);
+      info->writeout_timeout =
+        g_timeout_add_seconds (on_nfs ? WRITEOUT_TIMEOUT_SECS_NFS : WRITEOUT_TIMEOUT_SECS,
+			       writeout_timeout, info);
+    }
 }
 
 static TreeInfo *
diff --git a/metadata/metatree.c b/metadata/metatree.c
index 31ef8a6..6aef33c 100644
--- a/metadata/metatree.c
+++ b/metadata/metatree.c
@@ -472,6 +472,12 @@ meta_tree_exists (MetaTree *tree)
   return tree->fd != -1;
 }
 
+gboolean
+meta_tree_is_on_nfs (MetaTree *tree)
+{
+  return tree->on_nfs;
+}
+
 static GHashTable *cached_trees = NULL;
 G_LOCK_DEFINE_STATIC (cached_trees);
 
diff --git a/metadata/metatree.h b/metadata/metatree.h
index 4bbb192..f24b4e9 100644
--- a/metadata/metatree.h
+++ b/metadata/metatree.h
@@ -66,6 +66,7 @@ void        meta_tree_unref          (MetaTree   *tree);
 void        meta_tree_refresh        (MetaTree   *tree);
 const char *meta_tree_get_filename   (MetaTree   *tree);
 gboolean    meta_tree_exists         (MetaTree   *tree);
+gboolean    meta_tree_is_on_nfs      (MetaTree   *tree);
 
 MetaKeyType meta_tree_lookup_key_type  (MetaTree                         *tree,
 					const char                       *path,
-- 
1.8.1.4