[ostree] Add --disable-fsync option to pull-local, and API to repo
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] Add --disable-fsync option to pull-local, and API to repo
- Date: Sat, 1 Feb 2014 03:19:12 +0000 (UTC)
commit 234ae70b4cdaa4cede4e27a23e213c1fa0a7d9d0
Author: Colin Walters <walters verbum org>
Date: Fri Jan 31 22:18:13 2014 -0500
Add --disable-fsync option to pull-local, and API to repo
This will be used by guestmount - it's WAY faster. We only take disks
as a unit, so it's safe. If the process fails halfway through, we
just start over from scratch the next time anyways.
src/libostree/ostree-repo-commit.c | 9 ++++++---
src/libostree/ostree-repo-private.h | 1 +
src/libostree/ostree-repo.c | 18 ++++++++++++++++++
src/libostree/ostree-repo.h | 3 +++
src/ostree/ot-builtin-pull-local.c | 5 +++++
5 files changed, 33 insertions(+), 3 deletions(-)
---
diff --git a/src/libostree/ostree-repo-commit.c b/src/libostree/ostree-repo-commit.c
index ad910dc..e470b8b 100644
--- a/src/libostree/ostree-repo-commit.c
+++ b/src/libostree/ostree-repo-commit.c
@@ -157,10 +157,13 @@ commit_loose_object_trusted (OstreeRepo *self,
/* Ensure that in case of a power cut, these files have the data we
* want. See http://lwn.net/Articles/322823/
*/
- if (fsync (fd) == -1)
+ if (!self->disable_fsync)
{
- ot_util_set_error_from_errno (error, errno);
- goto out;
+ if (fsync (fd) == -1)
+ {
+ ot_util_set_error_from_errno (error, errno);
+ goto out;
+ }
}
if (!g_output_stream_close (temp_out, cancellable, error))
diff --git a/src/libostree/ostree-repo-private.h b/src/libostree/ostree-repo-private.h
index 0a3b0a0..711bfea 100644
--- a/src/libostree/ostree-repo-private.h
+++ b/src/libostree/ostree-repo-private.h
@@ -57,6 +57,7 @@ struct OstreeRepo {
gboolean inited;
gboolean in_transaction;
+ gboolean disable_fsync;
GHashTable *loose_object_devino_hash;
GHashTable *updated_uncompressed_dirs;
GHashTable *object_sizes;
diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
index d9938d9..65c2bdf 100644
--- a/src/libostree/ostree-repo.c
+++ b/src/libostree/ostree-repo.c
@@ -553,6 +553,24 @@ ostree_repo_open (OstreeRepo *self,
}
/**
+ * ostree_repo_set_disable_fsync:
+ * @self: An #OstreeRepo
+ * @disable_fsync: If %TRUE, do not fsync
+ *
+ * Disable requests to fsync() to stable storage during commits. This
+ * option should only be used by build system tools which are creating
+ * disposable virtual machines, or have higher level mechanisms for
+ * ensuring data consistency.
+ */
+void
+ostree_repo_set_disable_fsync (OstreeRepo *self,
+ gboolean disable_fsync)
+{
+ self->disable_fsync = disable_fsync;
+}
+
+
+/**
* ostree_repo_get_path:
* @self:
*
diff --git a/src/libostree/ostree-repo.h b/src/libostree/ostree-repo.h
index 3f311f9..b3f263e 100644
--- a/src/libostree/ostree-repo.h
+++ b/src/libostree/ostree-repo.h
@@ -48,6 +48,9 @@ gboolean ostree_repo_open (OstreeRepo *self,
GCancellable *cancellable,
GError **error);
+void ostree_repo_set_disable_fsync (OstreeRepo *self,
+ gboolean disable_fsync);
+
gboolean ostree_repo_create (OstreeRepo *self,
OstreeRepoMode mode,
GCancellable *cancellable,
diff --git a/src/ostree/ot-builtin-pull-local.c b/src/ostree/ot-builtin-pull-local.c
index 0feeddf..b5b5728 100644
--- a/src/ostree/ot-builtin-pull-local.c
+++ b/src/ostree/ot-builtin-pull-local.c
@@ -30,9 +30,11 @@
#include "otutil.h"
static char *opt_remote;
+static gboolean opt_disable_fsync;
static GOptionEntry options[] = {
{ "remote", 0, 0, G_OPTION_ARG_STRING, &opt_remote, "Add REMOTE to refspec", "REMOTE" },
+ { "disable-fsync", 0, 0, G_OPTION_ARG_NONE, &opt_disable_fsync, "Do not invoke fsync()", NULL },
{ NULL }
};
@@ -206,6 +208,9 @@ ostree_builtin_pull_local (int argc, char **argv, OstreeRepo *repo, GCancellable
if (!ostree_repo_open (data->src_repo, cancellable, error))
goto out;
+ if (opt_disable_fsync)
+ ostree_repo_set_disable_fsync (data->dest_repo, TRUE);
+
data->threadpool = ot_thread_pool_new_nproc (import_one_object_thread, data);
src_repo_dir = g_object_ref (ostree_repo_get_path (data->src_repo));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]