mirror of
https://github.com/ostreedev/ostree.git
synced 2025-01-07 21:18:55 +03:00
lib/repo: Take exclusive lock while generating summary
This ensures that commits aren't deleted and refs aren't added, removed, or updated while the summary is being generated. This is in preparation for adding a repo config option that will automatically regenerate the summary on every ref change. Closes: #1681 Approved by: jlebon
This commit is contained in:
parent
968e8805b0
commit
fb36b62f33
@ -5394,6 +5394,8 @@ summary_add_ref_entry (OstreeRepo *self,
|
||||
* file, listed under the %OSTREE_SUMMARY_COLLECTION_MAP key. Collection IDs
|
||||
* and refs in %OSTREE_SUMMARY_COLLECTION_MAP are guaranteed to be in
|
||||
* lexicographic order.
|
||||
*
|
||||
* Locking: exclusive
|
||||
*/
|
||||
gboolean
|
||||
ostree_repo_regenerate_summary (OstreeRepo *self,
|
||||
@ -5401,6 +5403,18 @@ 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;
|
||||
lock = _ostree_repo_auto_lock_push (self, OSTREE_REPO_LOCK_EXCLUSIVE,
|
||||
cancellable, error);
|
||||
if (!lock)
|
||||
return FALSE;
|
||||
|
||||
g_auto(GVariantDict) additional_metadata_builder = OT_VARIANT_BUILDER_INITIALIZER;
|
||||
g_variant_dict_init (&additional_metadata_builder, additional_metadata);
|
||||
g_autoptr(GVariantBuilder) refs_builder = g_variant_builder_new (G_VARIANT_TYPE ("a(s(taya{sv}))"));
|
||||
|
Loading…
Reference in New Issue
Block a user