summaryrefslogtreecommitdiff
path: root/src/libostree/ostree-repo-private.h
diff options
context:
space:
mode:
authorGiuseppe Scrivano <gscrivan@redhat.com>2015-01-22 01:05:13 +0100
committerColin Walters <walters@verbum.org>2015-01-30 14:03:42 -0500
commit27a45e2edbd1c4551b801a957cafcb27b3417fd3 (patch)
tree5e70d23ce73711f825a3f9a11cff22e6dbc70f0a /src/libostree/ostree-repo-private.h
parent10642cd7328def59c93a78f71ccd4c25a14de008 (diff)
downloadostree-27a45e2edbd1c4551b801a957cafcb27b3417fd3.tar.gz
pull: use a single per-transaction syncfs instead of fsync
Do not write directly to objects/ but maintain pulled files under tmp/ with a "tmpobject-$CHECKSUM.$OBJTYPE" name until they are syncfs'ed to disk. Move them under objects/ at ostree_repo_commit_transaction cleanup time. Before (test done on a local network): $ LANG=C sudo time ./ostree --repo=repo pull origin master 0 metadata, 3 content objects fetched; 83820 KiB; 4 delta parts fetched, transferred in 417 seconds 16.42user 6.73system 6:57.19elapsed 5%CPU (0avgtext+0avgdata 248428maxresident)k 24inputs+794472outputs (0major+233968minor)pagefaults 0swaps After: $ LANG=C sudo time ./ostree --repo=repo pull origin master 0 metadata, 3 content objects fetched; 83820 KiB; 4 delta parts fetched, transferred in 9 seconds 14.70user 2.87system 0:09.99elapsed 175%CPU (0avgtext+0avgdata 256168maxresident)k 0inputs+794472outputs (0major+164333minor)pagefaults 0swaps https://bugzilla.gnome.org/show_bug.cgi?id=728065 Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
Diffstat (limited to 'src/libostree/ostree-repo-private.h')
-rw-r--r--src/libostree/ostree-repo-private.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/libostree/ostree-repo-private.h b/src/libostree/ostree-repo-private.h
index b36e6d94..b7f926d8 100644
--- a/src/libostree/ostree-repo-private.h
+++ b/src/libostree/ostree-repo-private.h
@@ -34,6 +34,8 @@ G_BEGIN_DECLS
struct OstreeRepo {
GObject parent;
+ char *boot_id;
+
GFile *repodir;
GFile *tmp_dir;
int tmp_dir_fd;
@@ -82,6 +84,11 @@ _ostree_repo_ensure_loose_objdir_at (int dfd,
const char *loose_path,
GCancellable *cancellable,
GError **error);
+void
+_ostree_repo_get_tmpobject_path (OstreeRepo *repo,
+ char *output,
+ const char *checksum,
+ OstreeObjectType objtype);
gboolean
_ostree_repo_find_object (OstreeRepo *self,
@@ -101,6 +108,7 @@ _ostree_repo_has_loose_object (OstreeRepo *self,
OstreeObjectType objtype,
gboolean *out_is_stored,
char *loose_path_buf,
+ GFile **out_stored_path,
GCancellable *cancellable,
GError **error);