summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2014-06-04 09:59:47 -0400
committerColin Walters <walters@verbum.org>2014-06-05 17:35:50 -0400
commit51bf1fab0f96c4b40bbe9048a1fb81f9037ee5b6 (patch)
tree63b23ebebc5f8da0d1f806c012f93c83f28949a8
parentef0057299945ff1d5e687c46ba65eb470263d3d5 (diff)
downloadostree-51bf1fab0f96c4b40bbe9048a1fb81f9037ee5b6.tar.gz
repo: Support fsync=false configuration
See rationale in the updated docs. Basically developer use cases as well as UPS-backed servers.
-rw-r--r--doc/ostree.repo-config.xml24
-rw-r--r--src/libostree/ostree-repo.c11
2 files changed, 35 insertions, 0 deletions
diff --git a/doc/ostree.repo-config.xml b/doc/ostree.repo-config.xml
index d2f65421..621879c9 100644
--- a/doc/ostree.repo-config.xml
+++ b/doc/ostree.repo-config.xml
@@ -83,6 +83,30 @@ Boston, MA 02111-1307, USA.
<term><varname>repo_version</varname></term>
<listitem><para>Currently, this must be set to <literal>1</literal>.</para></listitem>
</varlistentry>
+
+ <varlistentry>
+ <term><varname>fsync</varname></term>
+ <listitem><para>Boolean value controlling whether or not to
+ ensure files are on stable storage when performing operations
+ such as commits, pulls, and checkouts. Defaults to
+ <literal>true</literal>.</para>
+ <para>
+ If you disable fsync, OSTree will no longer be robust
+ against kernel crashes or power loss.
+ </para>
+ <para>
+ You might choose to disable this for local development
+ repositories, under the assumption they can be recreated from
+ source. Similarly, you could disable for a mirror where you could
+ re-pull.
+ </para>
+ <para>
+ For the system repository, you might choose to disable fsync
+ if you have uninterruptable power supplies and a well tested
+ kernel.
+ </para>
+ </listitem>
+ </varlistentry>
</variablelist>
</refsect1>
diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
index 210ce366..aa2bd2df 100644
--- a/src/libostree/ostree-repo.c
+++ b/src/libostree/ostree-repo.c
@@ -683,6 +683,17 @@ ostree_repo_open (OstreeRepo *self,
goto out;
{
+ gboolean do_fsync;
+
+ if (!ot_keyfile_get_boolean_with_default (self->config, "core", "fsync",
+ TRUE, &do_fsync, error))
+ goto out;
+
+ if (!do_fsync)
+ ostree_repo_set_disable_fsync (self, TRUE);
+ }
+
+ {
gs_unref_object GFile *default_repo_path = get_default_repo_path ();
if (g_file_equal (self->repodir, default_repo_path))