Summary locking fix (GH PR 2493)

This commit is contained in:
Peter Robinson 2021-12-09 09:21:16 +00:00
parent e3bea86c69
commit 7224c4bed4
2 changed files with 78 additions and 1 deletions

72
github-pr-2493.patch Normal file
View File

@ -0,0 +1,72 @@
From 2c39bd88a9b0db207c1158c76bbbe0b484dec9dd Mon Sep 17 00:00:00 2001
From: Colin Walters <walters@verbum.org>
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;

View File

@ -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 <pbrobinson@fedoraproject.org> - 2021.6-3
- Summary locking fix (GH PR 2493)
* Mon Dec 06 2021 Joseph Marrero <jmarrero@fedoraproject.org> - 2021.6-2
- Add attr as a build dependency as we use it for running the tests