summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@redhat.com>2013-05-13 17:43:19 +0200
committerTomas Bzatek <tbzatek@redhat.com>2013-05-13 17:43:19 +0200
commitc8e7d1375715545f28a0943ce7657330e3b70acd (patch)
tree3847d01839c94e62e50650a06f738c0cddfb72e1
parent749c872b9192a84e65d83bc0f0eb697ab247fdd8 (diff)
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
-rw-r--r--metadata/meta-daemon.c12
-rw-r--r--metadata/metatree.c6
-rw-r--r--metadata/metatree.h1
3 files changed, 16 insertions, 3 deletions
diff --git a/metadata/meta-daemon.c b/metadata/meta-daemon.c
index ce34b735..f29e7f0b 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 31ef8a61..6aef33c0 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 4bbb192c..f24b4e9b 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,