Use advisory_lock from DAB (#15676)

* Use advisory_lock from DAB

* Remove the django-pglocks dep

* Re-run updater script

* Move the import in new location
This commit is contained in:
Alan Rominger
2025-01-15 14:06:59 -05:00
committed by GitHub
parent bb8d878a36
commit f57a9863d6
15 changed files with 26 additions and 47 deletions

View File

@@ -16,10 +16,12 @@ from rest_framework.exceptions import PermissionDenied
import requests import requests
from awx.conf.license import get_license from awx.conf.license import get_license
from ansible_base.lib.utils.db import advisory_lock
from awx.main.models import Job from awx.main.models import Job
from awx.main.access import access_registry from awx.main.access import access_registry
from awx.main.utils import get_awx_http_client_headers, set_environ, datetime_hook from awx.main.utils import get_awx_http_client_headers, set_environ, datetime_hook
from awx.main.utils.pglock import advisory_lock
__all__ = ['register', 'gather', 'ship'] __all__ = ['register', 'gather', 'ship']

View File

@@ -4,8 +4,9 @@
from django.db import transaction from django.db import transaction
from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError
from ansible_base.lib.utils.db import advisory_lock
from awx.main.models import Instance from awx.main.models import Instance
from awx.main.utils.pglock import advisory_lock
class Command(BaseCommand): class Command(BaseCommand):

View File

@@ -21,6 +21,9 @@ from django.utils.encoding import smart_str
# DRF error class to distinguish license exceptions # DRF error class to distinguish license exceptions
from rest_framework.exceptions import PermissionDenied from rest_framework.exceptions import PermissionDenied
# django-ansible-base
from ansible_base.lib.utils.db import advisory_lock
# AWX inventory imports # AWX inventory imports
from awx.main.models.inventory import Inventory, InventorySource, InventoryUpdate, Host from awx.main.models.inventory import Inventory, InventorySource, InventoryUpdate, Host
from awx.main.utils.mem_inventory import MemInventory, dict_to_mem_data from awx.main.utils.mem_inventory import MemInventory, dict_to_mem_data
@@ -32,7 +35,6 @@ from awx.main.utils import ignore_inventory_computed_fields, get_licenser
from awx.main.utils.execution_environments import get_default_execution_environment from awx.main.utils.execution_environments import get_default_execution_environment
from awx.main.signals import disable_activity_stream from awx.main.signals import disable_activity_stream
from awx.main.constants import STANDARD_INVENTORY_UPDATE_ENV from awx.main.constants import STANDARD_INVENTORY_UPDATE_ENV
from awx.main.utils.pglock import advisory_lock
logger = logging.getLogger('awx.main.commands.inventory_import') logger = logging.getLogger('awx.main.commands.inventory_import')

View File

@@ -2,7 +2,8 @@
# All Rights Reserved. # All Rights Reserved.
import sys import sys
from awx.main.utils.pglock import advisory_lock from ansible_base.lib.utils.db import advisory_lock
from awx.main.models import Instance, InstanceGroup from awx.main.models import Instance, InstanceGroup
from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError

View File

@@ -2,7 +2,8 @@
# All Rights Reserved. # All Rights Reserved.
import sys import sys
from awx.main.utils.pglock import advisory_lock from ansible_base.lib.utils.db import advisory_lock
from awx.main.models import InstanceGroup from awx.main.models import InstanceGroup
from django.db import transaction from django.db import transaction

View File

@@ -6,8 +6,10 @@ import uuid
from django.db import models from django.db import models
from django.conf import settings from django.conf import settings
from django.db.models.functions import Lower from django.db.models.functions import Lower
from ansible_base.lib.utils.db import advisory_lock
from awx.main.utils.filters import SmartFilter from awx.main.utils.filters import SmartFilter
from awx.main.utils.pglock import advisory_lock
from awx.main.constants import RECEPTOR_PENDING from awx.main.constants import RECEPTOR_PENDING
___all__ = ['HostManager', 'InstanceManager', 'DeferJobCreatedManager', 'UUID_DEFAULT'] ___all__ = ['HostManager', 'InstanceManager', 'DeferJobCreatedManager', 'UUID_DEFAULT']

View File

@@ -23,9 +23,11 @@ from django.contrib.auth.models import User
# DRF # DRF
from awx.main.utils.pglock import advisory_lock
from rest_framework.serializers import ValidationError as DRFValidationError from rest_framework.serializers import ValidationError as DRFValidationError
# django-ansible-base
from ansible_base.lib.utils.db import advisory_lock
# AWX # AWX
from awx.api.versioning import reverse from awx.api.versioning import reverse
from awx.main.fields import ( from awx.main.fields import (

View File

@@ -19,6 +19,9 @@ from django.contrib.contenttypes.models import ContentType
from ansible_base.lib.utils.models import get_type_for_model from ansible_base.lib.utils.models import get_type_for_model
# django-ansible-base
from ansible_base.lib.utils.db import advisory_lock
# AWX # AWX
from awx.main.dispatch.reaper import reap_job from awx.main.dispatch.reaper import reap_job
from awx.main.models import ( from awx.main.models import (
@@ -34,7 +37,6 @@ from awx.main.models import (
WorkflowJobTemplate, WorkflowJobTemplate,
) )
from awx.main.scheduler.dag_workflow import WorkflowDAG from awx.main.scheduler.dag_workflow import WorkflowDAG
from awx.main.utils.pglock import advisory_lock
from awx.main.utils import ( from awx.main.utils import (
ScheduleTaskManager, ScheduleTaskManager,
ScheduleWorkflowManager, ScheduleWorkflowManager,

View File

@@ -11,7 +11,7 @@ from awx.main.dispatch.publish import task
from awx.main.models.inventory import HostMetric, HostMetricSummaryMonthly from awx.main.models.inventory import HostMetric, HostMetricSummaryMonthly
from awx.main.tasks.helpers import is_run_threshold_reached from awx.main.tasks.helpers import is_run_threshold_reached
from awx.conf.license import get_license from awx.conf.license import get_license
from awx.main.utils.pglock import advisory_lock from ansible_base.lib.utils.db import advisory_lock
logger = logging.getLogger('awx.main.tasks.host_metrics') logger = logging.getLogger('awx.main.tasks.host_metrics')

View File

@@ -17,6 +17,9 @@ from django.db import connections
# Runner # Runner
import ansible_runner import ansible_runner
# django-ansible-base
from ansible_base.lib.utils.db import advisory_lock
# AWX # AWX
from awx.main.utils.execution_environments import get_default_pod_spec from awx.main.utils.execution_environments import get_default_pod_spec
from awx.main.exceptions import ReceptorNodeNotFound from awx.main.exceptions import ReceptorNodeNotFound
@@ -30,7 +33,6 @@ from awx.main.tasks.signals import signal_state, signal_callback, SignalExit
from awx.main.models import Instance, InstanceLink, UnifiedJob, ReceptorAddress from awx.main.models import Instance, InstanceLink, UnifiedJob, ReceptorAddress
from awx.main.dispatch import get_task_queuename from awx.main.dispatch import get_task_queuename
from awx.main.dispatch.publish import task from awx.main.dispatch.publish import task
from awx.main.utils.pglock import advisory_lock
# Receptorctl # Receptorctl
from receptorctl.socket_interface import ReceptorControl from receptorctl.socket_interface import ReceptorControl

View File

@@ -38,6 +38,7 @@ from dateutil.parser import parse as parse_date
# django-ansible-base # django-ansible-base
from ansible_base.resource_registry.tasks.sync import SyncExecutor from ansible_base.resource_registry.tasks.sync import SyncExecutor
from ansible_base.lib.utils.db import advisory_lock
# AWX # AWX
from awx import __version__ as awx_application_version from awx import __version__ as awx_application_version
@@ -60,7 +61,6 @@ from awx.main.dispatch import get_task_queuename, reaper
from awx.main.utils.common import ignore_inventory_computed_fields, ignore_inventory_group_removal from awx.main.utils.common import ignore_inventory_computed_fields, ignore_inventory_group_removal
from awx.main.utils.reload import stop_local_services from awx.main.utils.reload import stop_local_services
from awx.main.utils.pglock import advisory_lock
from awx.main.tasks.helpers import is_run_threshold_reached from awx.main.tasks.helpers import is_run_threshold_reached
from awx.main.tasks.receptor import get_receptor_ctl, worker_info, worker_cleanup, administrative_workunit_reaper, write_receptor_config from awx.main.tasks.receptor import get_receptor_ctl, worker_info, worker_cleanup, administrative_workunit_reaper, write_receptor_config
from awx.main.consumers import emit_channel_notification from awx.main.consumers import emit_channel_notification

View File

@@ -1,29 +0,0 @@
# Copyright (c) 2017 Ansible by Red Hat
# All Rights Reserved.
from contextlib import contextmanager
from django_pglocks import advisory_lock as django_pglocks_advisory_lock
from django.db import connection
@contextmanager
def advisory_lock(*args, lock_session_timeout_milliseconds=0, **kwargs):
if connection.vendor == 'postgresql':
cur = None
idle_in_transaction_session_timeout = None
idle_session_timeout = None
if lock_session_timeout_milliseconds > 0:
with connection.cursor() as cur:
idle_in_transaction_session_timeout = cur.execute('SHOW idle_in_transaction_session_timeout').fetchone()[0]
idle_session_timeout = cur.execute('SHOW idle_session_timeout').fetchone()[0]
cur.execute(f"SET idle_in_transaction_session_timeout = '{lock_session_timeout_milliseconds}'")
cur.execute(f"SET idle_session_timeout = '{lock_session_timeout_milliseconds}'")
with django_pglocks_advisory_lock(*args, **kwargs) as internal_lock:
yield internal_lock
if lock_session_timeout_milliseconds > 0:
with connection.cursor() as cur:
cur.execute(f"SET idle_in_transaction_session_timeout = '{idle_in_transaction_session_timeout}'")
cur.execute(f"SET idle_session_timeout = '{idle_session_timeout}'")
else:
yield True

View File

@@ -1,3 +0,0 @@
Copyright (c) 2013 Christophe Pettus
Licensed under the MIT License.

View File

@@ -19,7 +19,6 @@ django-extensions
django-guid django-guid
django-oauth-toolkit<2.0.0 # Version 2.0.0 has breaking changes that will need to be worked out before upgrading django-oauth-toolkit<2.0.0 # Version 2.0.0 has breaking changes that will need to be worked out before upgrading
django-polymorphic django-polymorphic
django-pglocks
django-solo django-solo
django-split-settings django-split-settings
djangorestframework>=3.15.0 djangorestframework>=3.15.0

View File

@@ -147,8 +147,6 @@ django-guid==3.5.0
# via -r /awx_devel/requirements/requirements.in # via -r /awx_devel/requirements/requirements.in
django-oauth-toolkit==1.7.1 django-oauth-toolkit==1.7.1
# via -r /awx_devel/requirements/requirements.in # via -r /awx_devel/requirements/requirements.in
django-pglocks==1.0.4
# via -r /awx_devel/requirements/requirements.in
django-polymorphic==3.1.0 django-polymorphic==3.1.0
# via -r /awx_devel/requirements/requirements.in # via -r /awx_devel/requirements/requirements.in
django-solo==2.4.0 django-solo==2.4.0
@@ -456,7 +454,6 @@ setuptools-scm[toml]==8.1.0
six==1.17.0 six==1.17.0
# via # via
# azure-core # azure-core
# django-pglocks
# kubernetes # kubernetes
# msrestazure # msrestazure
# openshift # openshift