From c1a482a673d0c39ca750cc980bda53992358872d Mon Sep 17 00:00:00 2001 From: Omer Date: Tue, 14 Oct 2025 11:21:59 +0000 Subject: [PATCH] Isolate eventlet-dependent services for future migration This commit creates the structure for migrating Designate services from using eventlet, to using oslo.service threading backend (standard/native python threading). Key changes include: * Eventlet isolation: existing eventlet-dependent service entrypoints (central, mdns, producer, sink, worker, manage, status) are moved from designate/cmd to a new designate/cmd/eventlet subdirectory. * Updating their correct path in setup.cfg. This prepares the codebase for future incremental migrations of individual services to native threading. Change-Id: I67941b5c7525d4b9661b30c4cc03dbd061e86083 Signed-off-by: Omer --- designate/__init__.py | 9 +++---- designate/api/wsgi.py | 8 ++++++- designate/cmd/__init__.py | 18 -------------- designate/cmd/eventlet/__init__.py | 24 +++++++++++++++++++ designate/cmd/{ => eventlet}/api.py | 0 designate/cmd/{ => eventlet}/central.py | 0 designate/cmd/{ => eventlet}/manage.py | 0 designate/cmd/{ => eventlet}/mdns.py | 0 designate/cmd/{ => eventlet}/producer.py | 0 designate/cmd/{ => eventlet}/sink.py | 0 designate/cmd/{ => eventlet}/status.py | 0 designate/cmd/{ => eventlet}/worker.py | 0 designate/cmd/threading/__init__.py | 22 +++++++++++++++++ designate/tests/__init__.py | 7 ++++-- .../tests/functional/test_upgrade_checks.py | 2 +- designate/tests/unit/cmd/test_cmd.py | 12 +++++----- designate/tests/unit/cmd/test_manage.py | 2 +- setup.cfg | 16 ++++++------- 18 files changed, 79 insertions(+), 41 deletions(-) create mode 100644 designate/cmd/eventlet/__init__.py rename designate/cmd/{ => eventlet}/api.py (100%) rename designate/cmd/{ => eventlet}/central.py (100%) rename designate/cmd/{ => eventlet}/manage.py (100%) rename designate/cmd/{ => eventlet}/mdns.py (100%) rename designate/cmd/{ => eventlet}/producer.py (100%) rename designate/cmd/{ => eventlet}/sink.py (100%) rename designate/cmd/{ => eventlet}/status.py (100%) rename designate/cmd/{ => eventlet}/worker.py (100%) create mode 100644 designate/cmd/threading/__init__.py diff --git a/designate/__init__.py b/designate/__init__.py index a4a28315e..52d2ec543 100644 --- a/designate/__init__.py +++ b/designate/__init__.py @@ -17,18 +17,19 @@ import os # Eventlet's GreenDNS Patching will prevent the resolution of names in # the /etc/hosts file, causing problems for installs. -os.environ['EVENTLET_NO_GREENDNS'] = 'yes' # noqa +os.environ['EVENTLET_NO_GREENDNS'] = 'yes' -from oslo_log import log # noqa from oslo_concurrency import lockutils # noqa +from oslo_log import log # noqa import oslo_messaging as messaging # noqa +BASE_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '../')) + _EXTRA_DEFAULT_LOG_LEVELS = [ 'kazoo.client=WARN', 'keystone=INFO', 'oslo_service.loopingcall=WARN', ] -BASE_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '../')) # Set some Oslo Log defaults log.set_defaults(default_log_levels=log.get_default_log_levels() + @@ -37,5 +38,5 @@ log.set_defaults(default_log_levels=log.get_default_log_levels() + # Set some Oslo RPC defaults messaging.set_transport_defaults('designate') -# Set some Oslo Oslo Concurrency defaults +# Set some Oslo Concurrency defaults lockutils.set_defaults(lock_path='$state_path') diff --git a/designate/api/wsgi.py b/designate/api/wsgi.py index 7c0d93256..1f7b23512 100644 --- a/designate/api/wsgi.py +++ b/designate/api/wsgi.py @@ -13,6 +13,13 @@ import os +# NOTE(oschwart): remove once the default backend is ``BackendType.THREADING`` +import oslo_service.backend as service +try: + service.init_backend(service.BackendType.THREADING) +except service.exceptions.BackendAlreadySelected: + pass + from oslo_config import cfg from oslo_log import log as logging from paste import deploy @@ -24,7 +31,6 @@ from designate import heartbeat_emitter from designate import policy from designate import rpc - CONF = designate.conf.CONF CONFIG_FILES = ['api-paste.ini', 'designate.conf'] diff --git a/designate/cmd/__init__.py b/designate/cmd/__init__.py index 806716bce..e69de29bb 100644 --- a/designate/cmd/__init__.py +++ b/designate/cmd/__init__.py @@ -1,18 +0,0 @@ -# Copyright 2013 Hewlett-Packard Development Company, L.P. -# -# Author: Kiall Mac Innes -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -import eventlet - -eventlet.monkey_patch(os=False) diff --git a/designate/cmd/eventlet/__init__.py b/designate/cmd/eventlet/__init__.py new file mode 100644 index 000000000..4629dc64b --- /dev/null +++ b/designate/cmd/eventlet/__init__.py @@ -0,0 +1,24 @@ +# Copyright 2012 Managed I.T. +# +# Author: Kiall Mac Innes +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +import os + +# Eventlet's GreenDNS Patching will prevent the resolution of names in +# the /etc/hosts file, causing problems for installs. +os.environ['EVENTLET_NO_GREENDNS'] = 'yes' + +import eventlet # noqa + +eventlet.monkey_patch(os=False) diff --git a/designate/cmd/api.py b/designate/cmd/eventlet/api.py similarity index 100% rename from designate/cmd/api.py rename to designate/cmd/eventlet/api.py diff --git a/designate/cmd/central.py b/designate/cmd/eventlet/central.py similarity index 100% rename from designate/cmd/central.py rename to designate/cmd/eventlet/central.py diff --git a/designate/cmd/manage.py b/designate/cmd/eventlet/manage.py similarity index 100% rename from designate/cmd/manage.py rename to designate/cmd/eventlet/manage.py diff --git a/designate/cmd/mdns.py b/designate/cmd/eventlet/mdns.py similarity index 100% rename from designate/cmd/mdns.py rename to designate/cmd/eventlet/mdns.py diff --git a/designate/cmd/producer.py b/designate/cmd/eventlet/producer.py similarity index 100% rename from designate/cmd/producer.py rename to designate/cmd/eventlet/producer.py diff --git a/designate/cmd/sink.py b/designate/cmd/eventlet/sink.py similarity index 100% rename from designate/cmd/sink.py rename to designate/cmd/eventlet/sink.py diff --git a/designate/cmd/status.py b/designate/cmd/eventlet/status.py similarity index 100% rename from designate/cmd/status.py rename to designate/cmd/eventlet/status.py diff --git a/designate/cmd/worker.py b/designate/cmd/eventlet/worker.py similarity index 100% rename from designate/cmd/worker.py rename to designate/cmd/eventlet/worker.py diff --git a/designate/cmd/threading/__init__.py b/designate/cmd/threading/__init__.py new file mode 100644 index 000000000..e409f3962 --- /dev/null +++ b/designate/cmd/threading/__init__.py @@ -0,0 +1,22 @@ +# Copyright 2012 Managed I.T. +# +# Author: Kiall Mac Innes +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +# NOTE(oschwart): remove once the default backend is ``BackendType.THREADING`` +import oslo_service.backend as service +try: + service.init_backend(service.BackendType.THREADING) +except service.exceptions.BackendAlreadySelected: + pass diff --git a/designate/tests/__init__.py b/designate/tests/__init__.py index 7bc24ef56..fcecd5e75 100644 --- a/designate/tests/__init__.py +++ b/designate/tests/__init__.py @@ -15,7 +15,10 @@ # under the License. -import eventlet +import os +os.environ['EVENTLET_NO_GREENDNS'] = 'yes' + +import eventlet # noqa -eventlet.monkey_patch(os=False) +eventlet.monkey_patch(os=False) # noqa diff --git a/designate/tests/functional/test_upgrade_checks.py b/designate/tests/functional/test_upgrade_checks.py index cb0c9f172..0077beca7 100644 --- a/designate/tests/functional/test_upgrade_checks.py +++ b/designate/tests/functional/test_upgrade_checks.py @@ -17,7 +17,7 @@ from oslo_upgradecheck import upgradecheck from sqlalchemy.schema import MetaData from sqlalchemy.schema import Table -from designate.cmd import status +from designate.cmd.eventlet import status from designate.storage import sql import designate.tests.functional diff --git a/designate/tests/unit/cmd/test_cmd.py b/designate/tests/unit/cmd/test_cmd.py index 1f15361b2..fc0cd40f2 100644 --- a/designate/tests/unit/cmd/test_cmd.py +++ b/designate/tests/unit/cmd/test_cmd.py @@ -14,12 +14,12 @@ from unittest import mock from oslo_config import fixture as cfg_fixture import oslotest.base -from designate.cmd import api -from designate.cmd import central -from designate.cmd import mdns -from designate.cmd import producer -from designate.cmd import sink -from designate.cmd import worker +from designate.cmd.eventlet import api +from designate.cmd.eventlet import central +from designate.cmd.eventlet import mdns +from designate.cmd.eventlet import producer +from designate.cmd.eventlet import sink +from designate.cmd.eventlet import worker import designate.conf diff --git a/designate/tests/unit/cmd/test_manage.py b/designate/tests/unit/cmd/test_manage.py index 24fd036ab..7d2bf1274 100644 --- a/designate/tests/unit/cmd/test_manage.py +++ b/designate/tests/unit/cmd/test_manage.py @@ -15,7 +15,7 @@ from unittest import mock from oslo_config import fixture as cfg_fixture import oslotest.base -from designate.cmd import manage +from designate.cmd.eventlet import manage import designate.conf from designate.manage import base diff --git a/setup.cfg b/setup.cfg index 67f22f3b5..69df7ee18 100644 --- a/setup.cfg +++ b/setup.cfg @@ -53,14 +53,14 @@ oslo.policy.enforcer = console_scripts = designate-rootwrap = oslo_rootwrap.cmd:main - designate-api = designate.cmd.api:main - designate-central = designate.cmd.central:main - designate-manage = designate.cmd.manage:main - designate-mdns = designate.cmd.mdns:main - designate-sink = designate.cmd.sink:main - designate-worker = designate.cmd.worker:main - designate-producer = designate.cmd.producer:main - designate-status = designate.cmd.status:main + designate-api = designate.cmd.eventlet.api:main + designate-central = designate.cmd.eventlet.central:main + designate-manage = designate.cmd.eventlet.manage:main + designate-mdns = designate.cmd.eventlet.mdns:main + designate-sink = designate.cmd.eventlet.sink:main + designate-worker = designate.cmd.eventlet.worker:main + designate-producer = designate.cmd.eventlet.producer:main + designate-status = designate.cmd.eventlet.status:main designate.api.admin.extensions = reports = designate.api.admin.controllers.extensions.reports:ReportsController