Merge pull request #10633 from jbradberry/conditional-polymorphic-setnull

Conditional polymorphic setnull

SUMMARY


ISSUE TYPE


Bugfix Pull Request

COMPONENT NAME


API

AWX VERSION



ADDITIONAL INFORMATION

Reviewed-by: Alan Rominger <arominge@redhat.com>
Reviewed-by: Bianca Henderson <beeankha@gmail.com>
This commit is contained in:
softwarefactory-project-zuul[bot] 2021-07-14 18:42:42 +00:00 committed by GitHub
commit 65ddc8c0bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 4 additions and 21 deletions

View File

@ -11,11 +11,8 @@ def remove_iso_instances(apps, schema_editor):
def remove_iso_groups(apps, schema_editor):
InstanceGroup = apps.get_model('main', 'InstanceGroup')
UnifiedJob = apps.get_model('main', 'UnifiedJob')
with transaction.atomic():
for ig in InstanceGroup.objects.filter(controller__isnull=False):
UnifiedJob.objects.filter(instance_group=ig).update(instance_group=None)
ig.delete()
InstanceGroup.objects.filter(controller__isnull=False).delete()
class Migration(migrations.Migration):

View File

@ -1,7 +1,6 @@
import logging
from django.utils.encoding import smart_text
from django.utils.timezone import now
from awx.main.utils.common import set_current_apps
from awx.main.utils.common import parse_yaml_or_json
@ -97,21 +96,6 @@ def delete_custom_inv_source(apps, schema_editor):
set_current_apps(apps)
InventorySource = apps.get_model('main', 'InventorySource')
InventoryUpdate = apps.get_model('main', 'InventoryUpdate')
Schedule = apps.get_model('main', 'Schedule')
saved_time = now()
# We cannot allow polymorphic.SET_NULL relationships to exist before we delete any InventorySources or InventoryUpdates or Schedules
# so we do this hack of updating modified time so we can keep track of which schedules to delete (b/c we nulled the relationships)
Schedule.objects.filter(unified_job_template__inventorysource__source='custom').update(modified=saved_time)
InventoryUpdate.objects.filter(source='custom', schedule__isnull=False).update(schedule=None)
InventorySource.objects.filter(source='custom', next_schedule__isnull=False).update(next_schedule=None)
# safe to delete Schedule objects with no schedule or next_schedule pointers from UJ or UJT tables
ct, deletions = Schedule.objects.filter(modified=saved_time).delete()
if ct:
logger.info('deleted {} custom inventory source schedules: {}'.format(ct, deletions))
ct, deletions = InventoryUpdate.objects.filter(source='custom').delete()
if ct:
logger.info('deleted {}'.format((ct, deletions)))

View File

@ -15,4 +15,6 @@ def build_polymorphic_ctypes_map(cls):
def SET_NULL(collector, field, sub_objs, using):
return models.SET_NULL(collector, field, sub_objs.non_polymorphic(), using)
if hasattr(sub_objs, 'non_polymorphic'):
sub_objs = sub_objs.non_polymorphic()
return models.SET_NULL(collector, field, sub_objs, using)