Skip to content

Commit eb8290c

Browse files
dralleyggainey
authored andcommitted
Added additional locking during replication
Locking didn't prevent two UpstreamPulps with overlapping Distributions from racing and clobbering each other. Assisted-By: claude-opus-4.6 re #7614 (cherry picked from commit e744426)
1 parent 5fd4a6c commit eb8290c

3 files changed

Lines changed: 8 additions & 3 deletions

File tree

CHANGES/7614.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Added a distributions lock to `finalize_replication` to prevent concurrent finalize tasks from different upstream servers from racing on the same distribution objects.

pulpcore/app/replica.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
_logger = logging.getLogger(__name__)
1818

1919

20+
def distros_lock_uri(domain_id):
21+
return f"pdrn:{domain_id}:distributions"
22+
23+
2024
class ReplicaContext(PulpContext):
2125
def __init__(self, **kwargs):
2226
super().__init__(**kwargs)
@@ -61,7 +65,7 @@ def __init__(self, pulp_ctx, task_group, tls_settings, server):
6165
self.tls_settings = tls_settings
6266
self.server = server
6367
self.domain = get_domain()
64-
self.distros_uris = [f"pdrn:{self.domain.pulp_id}:distributions"]
68+
self.distros_uris = [distros_lock_uri(self.domain.pulp_id)]
6569

6670
@staticmethod
6771
def needs_update(fields_dict, model_instance):

pulpcore/app/tasks/replica.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from pulpcore.app.apps import PulpAppConfig, pulp_plugin_configs
1212
from pulpcore.app.models import Distribution, Repository, Task, TaskGroup, UpstreamPulp
13-
from pulpcore.app.replica import ReplicaContext
13+
from pulpcore.app.replica import ReplicaContext, distros_lock_uri
1414
from pulpcore.constants import TASK_STATES
1515
from pulpcore.tasking.tasks import dispatch
1616

@@ -111,7 +111,7 @@ def replicate_distributions(server_pk):
111111
dispatch(
112112
finalize_replication,
113113
task_group=task_group,
114-
exclusive_resources=[server],
114+
exclusive_resources=[server, distros_lock_uri(server.pulp_domain_id)],
115115
args=[server.pk, distro_repo_pairs],
116116
)
117117

0 commit comments

Comments
 (0)