1
0
mirror of https://github.com/ansible/awx.git synced 2024-10-31 15:21:13 +03:00

Merge pull request #4360 from ryanpetrello/smart-inv-ignore-conflicts

replace the smart inventory membership lock with a new Django 2.2 flag

Reviewed-by: https://github.com/softwarefactory-project-zuul[bot]
This commit is contained in:
softwarefactory-project-zuul[bot] 2019-07-23 05:30:53 +00:00 committed by GitHub
commit 0fff7465e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -602,26 +602,25 @@ 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 removals = current - new
removals = current - new if additions or removals:
if additions or removals: with transaction.atomic():
with transaction.atomic(): if removals:
if removals: SmartInventoryMembership.objects.filter(inventory=smart_inventory, host_id__in=removals).delete()
SmartInventoryMembership.objects.filter(inventory=smart_inventory, host_id__in=removals).delete() if additions:
if additions: add_for_inventory = [
add_for_inventory = [ SmartInventoryMembership(inventory_id=smart_inventory.id, host_id=host_id)
SmartInventoryMembership(inventory_id=smart_inventory.id, host_id=host_id) for host_id in additions
for host_id in additions ]
] SmartInventoryMembership.objects.bulk_create(add_for_inventory, ignore_conflicts=True)
SmartInventoryMembership.objects.bulk_create(add_for_inventory) logger.debug('Smart host membership cached for {}, {} additions, {} removals, {} total count.'.format(
logger.debug('Smart host membership cached for {}, {} additions, {} removals, {} total count.'.format( smart_inventory.pk, len(additions), len(removals), len(new)
smart_inventory.pk, len(additions), len(removals), len(new) ))
)) return True # changed
return True # changed return False
return False
@task() @task()