Bug #37785
closedContainer push sometimes makes duplicate repos due to race condition
Description
Description of problem:
Seemingly randomly, sometimes a container push results in two repositories being created, which fails the push with the "Its Container Repository Name (%{container_name}) conflicts with an existing repository." error.
This is due to a race condition. Since APIs are called simultaneously, I was able to catch two puma workers both reaching https://github.com/katello/katello/blob/master/app/controllers/katello/api/registry/registry_proxies_controller.rb#L346 at the same time.
The get_root_repo_from_product check returns true for both workers, so two repositories get created. We need to figure out how to synchronize the simultaneous requests.
How reproducible:
Sometimes, it's a race condition.
Is this issue a regression from an earlier version:
No.
Steps to Reproduce:
1. Stick a debugger before the `get_root_repo_from_product` line in `create_container_repo_if_needed`.
2. Push Quay's prometheus/busybox image
3. In the debugger, see that two separate workers both reach the same line of code. This is an indication that there's a race condition – it's possible that the repository will not be created yet for either.
Actual behavior:
An error about the container repo name conflicting is thrown.
Expected behavior:
The container image is pushed without error.
Updated by The Foreman Bot 3 months ago
- Status changed from New to Ready For Testing
- Assignee set to Samir Jha
- Pull request https://github.com/Katello/katello/pull/11129 added
Updated by Jeremy Lenz 3 months ago
- Target version changed from Katello 4.14.1 to Katello 4.14.0
- Triaged changed from No to Yes
Updated by Samir Jha 3 months ago
- Status changed from Ready For Testing to Closed
Applied in changeset katello|326474f524ed4177e079bfc17e57f31e8243d296.
Updated by The Foreman Bot 2 months ago
- Pull request https://github.com/Katello/katello/pull/11162 added