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.
This commit is contained in:
1 parent
2313bdcb62
commit
234ae70b4c
5 files changed
+33
-3
No files matched your search
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -552,6 +552,24 @@ ostree_repo_open (OstreeRepo *self,
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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:
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user