diff --git a/github-pr-2493.patch b/github-pr-2493.patch new file mode 100644 index 0000000..7eb5df7 --- /dev/null +++ b/github-pr-2493.patch @@ -0,0 +1,72 @@ +From 2c39bd88a9b0db207c1158c76bbbe0b484dec9dd Mon Sep 17 00:00:00 2001 +From: Colin Walters +Date: Fri, 3 Dec 2021 14:35:12 -0500 +Subject: [PATCH] repo: Change locking for summary regeneration to be shared + +This is trying to address: +https://pagure.io/fedora-iot/issue/48 + +Basically we changed rpm-ostree to start doing a shared lock during +commit by default, but this broke because pungi is starting a process +doing a commit for each architecture, and then trying to regenerate +the summary after each one. + +This patch is deleting a big comment with a rationale for why +summary regeneration should be exclusive. Point by point: + +> This makes sure the commits and deltas don't get +> deleted while generating the summary. + +But prune operations require an exclusive lock, which means that +data still can't be deleted when the summary grabs a shared lock. + +> It also means we can be sure refs +> won't be created/updated/deleted during the operation, without having to +> add exclusive locks to those operations which would prevent concurrent +> commits from working. + +First: The status quo *has* prevented concurrent commits from working! + +There is no real locking solution to this problem. What we really +need to do here is regenerate the summary after each commit *or* +when the caller decides to do it and e.g. include deltas at the same +time. + +It's OK if multiple threads race to regenerate the summary; +last-one-wins behavior here is totally fine. +--- + src/libostree/ostree-repo.c | 10 ++-------- + 1 file changed, 2 insertions(+), 8 deletions(-) + +diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c +index 74cea37f2..a9be9f948 100644 +--- a/src/libostree/ostree-repo.c ++++ b/src/libostree/ostree-repo.c +@@ -6105,7 +6105,7 @@ summary_add_ref_entry (OstreeRepo *self, + * and refs in %OSTREE_SUMMARY_COLLECTION_MAP are guaranteed to be in + * lexicographic order. + * +- * Locking: exclusive ++ * Locking: shared (Prior to 2021.7, this was exclusive) + */ + gboolean + ostree_repo_regenerate_summary (OstreeRepo *self, +@@ -6113,16 +6113,10 @@ ostree_repo_regenerate_summary (OstreeRepo *self, + GCancellable *cancellable, + GError **error) + { +- /* Take an exclusive lock. This makes sure the commits and deltas don't get +- * deleted while generating the summary. It also means we can be sure refs +- * won't be created/updated/deleted during the operation, without having to +- * add exclusive locks to those operations which would prevent concurrent +- * commits from working. +- */ + g_autoptr(OstreeRepoAutoLock) lock = NULL; + gboolean no_deltas_in_summary = FALSE; + +- lock = ostree_repo_auto_lock_push (self, OSTREE_REPO_LOCK_EXCLUSIVE, ++ lock = ostree_repo_auto_lock_push (self, OSTREE_REPO_LOCK_SHARED, + cancellable, error); + if (!lock) + return FALSE; + diff --git a/ostree.spec b/ostree.spec index 3456650..2a69c80 100644 --- a/ostree.spec +++ b/ostree.spec @@ -8,11 +8,13 @@ Summary: Tool for managing bootable, immutable filesystem trees Name: ostree Version: 2021.6 -Release: 2%{?dist} +Release: 3%{?dist} Source0: https://github.com/ostreedev/%{name}/releases/download/v%{version}/libostree-%{version}.tar.xz License: LGPLv2+ URL: https://ostree.readthedocs.io/en/latest/ +Patch1: github-pr-2493.patch + BuildRequires: make BuildRequires: git # We always run autogen.sh @@ -165,6 +167,9 @@ find %{buildroot} -name '*.la' -delete %endif %changelog +* Thu Dec 09 2021 Peter Robinson - 2021.6-3 +- Summary locking fix (GH PR 2493) + * Mon Dec 06 2021 Joseph Marrero - 2021.6-2 - Add attr as a build dependency as we use it for running the tests