This commit is contained in:
parent
7224c4bed4
commit
1fc642772f
1
.gitignore
vendored
1
.gitignore
vendored
@ -89,3 +89,4 @@
|
||||
/libostree-2021.4.tar.xz
|
||||
/libostree-2021.5.tar.xz
|
||||
/libostree-2021.6.tar.xz
|
||||
/libostree-2022.1.tar.xz
|
||||
|
@ -1,72 +0,0 @@
|
||||
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;
|
||||
|
10
ostree.spec
10
ostree.spec
@ -7,14 +7,12 @@
|
||||
|
||||
Summary: Tool for managing bootable, immutable filesystem trees
|
||||
Name: ostree
|
||||
Version: 2021.6
|
||||
Release: 3%{?dist}
|
||||
Version: 2022.1
|
||||
Release: 1%{?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
|
||||
@ -167,6 +165,10 @@ find %{buildroot} -name '*.la' -delete
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Thu Jan 06 2022 Luca BRUNO <lucab@lucabruno.net> - 2022.1-1
|
||||
- New upstream version
|
||||
https://github.com/ostreedev/ostree/releases/tag/v2022.1
|
||||
|
||||
* Thu Dec 09 2021 Peter Robinson <pbrobinson@fedoraproject.org> - 2021.6-3
|
||||
- Summary locking fix (GH PR 2493)
|
||||
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (libostree-2021.6.tar.xz) = 5fcb8053530eb3b687198331a8f84f7913bba32be29c1828251e1ba70b436b0364531e54f75b6d04580d79304131892d4b72e32f6ba653d0e1caddf902ae660c
|
||||
SHA512 (libostree-2022.1.tar.xz) = 73da367d3b9b5facc5ba894bd0f9297a7fc688fa69871b668e6568663fefc1f44433c8be352d57c23153b09144c6535e52d8c184a2ab103190ec37dc1abc2818
|
||||
|
Loading…
Reference in New Issue
Block a user