Merge pull request #2808 from jlebon/pr/lock-prune

ostree/prune: Calculate reachability under exclusive lock
This commit is contained in:
Colin Walters 2023-02-01 08:48:14 -05:00 committed by GitHub
commit 8616c4da56
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 0 deletions

View File

@ -208,6 +208,15 @@ ostree_builtin_prune (int argc, char **argv, OstreeCommandInvocation *invocation
}
else
{
/* In this branch, we need to compute the reachability set manually.
* While we do this, we can't let new content in since it'll race with
* reachability calculations and we may immediately nuke it. So push an
* exclusive lock now. */
g_autoptr(OstreeRepoAutoLock) lock =
ostree_repo_auto_lock_push (repo, OSTREE_REPO_LOCK_EXCLUSIVE, cancellable, error);
if (!lock)
return FALSE;
g_autoptr(GHashTable) all_refs = NULL;
g_autoptr(GHashTable) reachable = ostree_repo_traverse_new_reachable ();
g_autoptr(GHashTable) retain_branch_depth = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);

View File

@ -363,4 +363,16 @@ ${CMD_PREFIX} ostree --repo=repo prune --commit-only --keep-younger-than="1 week
assert_repo_has_n_commits repo 4
assert_repo_has_n_non_commit_objects repo ${orig_obj_count}
tap_ok --commit-only and --keep-younger-than
reinitialize_commit_only_test_repo
for i in {1..10}; do
${CMD_PREFIX} ostree --repo=repo prune --commit-only --keep-younger-than="1 week ago" &
commit=$(${CMD_PREFIX} ostree --repo=repo commit --branch foobar tree)
wait $!
if ! ostree show --repo=repo ${commit}; then
assert_not_reached "commit ${commit} on branch foobar was pruned?"
fi
done
tap_ok commit and prune together
tap_end