mirror of
https://github.com/ansible/awx.git
synced 2026-07-30 17:39:57 -02:30
wrap smart inv cache update w/ advisory lock
* Two job templates that use the same smart inventory running at the same time can easily race to recompute the smart inventory <-> host mapping. In this case, bulk_create() can throw an error when racing. * The per-smart-inventory advisory lock ensures that the state of the system is consistent & that bulk_create() runs in isolation.
This commit is contained in:
@@ -602,6 +602,7 @@ def update_inventory_computed_fields(inventory_id, should_update_hosts=True):
|
|||||||
|
|
||||||
|
|
||||||
def update_smart_memberships_for_inventory(smart_inventory):
|
def update_smart_memberships_for_inventory(smart_inventory):
|
||||||
|
with advisory_lock('update_smart_memberships_for_inventory-{}'.format(smart_inventory.id)):
|
||||||
current = set(SmartInventoryMembership.objects.filter(inventory=smart_inventory).values_list('host_id', flat=True))
|
current = set(SmartInventoryMembership.objects.filter(inventory=smart_inventory).values_list('host_id', flat=True))
|
||||||
new = set(smart_inventory.hosts.values_list('id', flat=True))
|
new = set(smart_inventory.hosts.values_list('id', flat=True))
|
||||||
additions = new - current
|
additions = new - current
|
||||||
|
|||||||
Reference in New Issue
Block a user