diff options
author | Stephen Finucane <stephenfin@redhat.com> | 2021-04-01 17:49:02 +0100 |
---|---|---|
committer | Stephen Finucane <stephenfin@redhat.com> | 2021-08-09 15:34:40 +0100 |
commit | 100b9dc62c0ec9f7b38739837c06646122c818d5 (patch) | |
tree | 461ffc78155a8ff058796c522b983a47a946717e /nova/cmd | |
parent | 84b61790763f91e12eebb96d955e2f83abc00d56 (diff) | |
download | nova-100b9dc62c0ec9f7b38739837c06646122c818d5.tar.gz |
db: Unify 'nova.db.api', 'nova.db.sqlalchemy.api'
Merge these, removing an unnecessary layer of abstraction, and place
them in the new 'nova.db.main' directory. The resulting change is huge,
but it's mainly the result of 's/sqlalchemy import api/main import api/'
and 's/nova.db.api/nova.db.main.api/' with some necessary cleanup. We
also need to rework how we do the blocking of API calls since we no
longer have a 'DBAPI' object that we can monkey patch as we were doing
before. This is now done via a global variable that is set by the 'main'
function of 'nova.cmd.compute'.
The main impact of this change is that it's no longer possible to set
'[database] use_db_reconnect' and have all APIs automatically wrapped in
a DB retry. Seeing as this behavior is experimental, isn't applied to
any of the API DB methods (which don't use oslo.db's 'DBAPI' helper),
and is used explicitly in what would appear to be the critical cases
(via the explicit 'oslo_db.api.wrap_db_retry' decorator), this doesn't
seem like a huge loss.
Change-Id: Iad2e4da4546b80a016e477577d23accb2606a6e4
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
Diffstat (limited to 'nova/cmd')
-rw-r--r-- | nova/cmd/common.py | 20 | ||||
-rw-r--r-- | nova/cmd/compute.py | 5 | ||||
-rw-r--r-- | nova/cmd/manage.py | 14 | ||||
-rw-r--r-- | nova/cmd/policy.py | 2 | ||||
-rw-r--r-- | nova/cmd/status.py | 2 |
5 files changed, 12 insertions, 31 deletions
diff --git a/nova/cmd/common.py b/nova/cmd/common.py index 1d4d5b4612..88dabc2c45 100644 --- a/nova/cmd/common.py +++ b/nova/cmd/common.py @@ -19,12 +19,11 @@ import argparse import inspect -import traceback from oslo_log import log as logging import nova.conf -import nova.db.api +import nova.db.main.api from nova import exception from nova.i18n import _ @@ -32,23 +31,6 @@ CONF = nova.conf.CONF LOG = logging.getLogger(__name__) -def block_db_access(service_name): - """Blocks Nova DB access.""" - - class NoDB(object): - def __getattr__(self, attr): - return self - - def __call__(self, *args, **kwargs): - stacktrace = "".join(traceback.format_stack()) - LOG.error('No db access allowed in %(service_name)s: ' - '%(stacktrace)s', - dict(service_name=service_name, stacktrace=stacktrace)) - raise exception.DBNotAllowed(binary=service_name) - - nova.db.api.IMPL = NoDB() - - def validate_args(fn, *args, **kwargs): """Check that the supplied args are sufficient for calling a function. diff --git a/nova/cmd/compute.py b/nova/cmd/compute.py index 24ce1b3ba8..a433aeb693 100644 --- a/nova/cmd/compute.py +++ b/nova/cmd/compute.py @@ -25,12 +25,12 @@ from oslo_privsep import priv_context from oslo_reports import guru_meditation_report as gmr from oslo_reports import opts as gmr_opts -from nova.cmd import common as cmd_common from nova.compute import rpcapi as compute_rpcapi from nova.conductor import rpcapi as conductor_rpcapi import nova.conf from nova.conf import remote_debug from nova import config +import nova.db.main.api from nova import objects from nova.objects import base as objects_base from nova import service @@ -52,7 +52,8 @@ def main(): gmr.TextGuruMeditation.setup_autorun(version, conf=CONF) - cmd_common.block_db_access('nova-compute') + # disable database access for this service + nova.db.main.api.DISABLE_DB_ACCESS = True objects_base.NovaObject.indirection_api = conductor_rpcapi.ConductorAPI() objects.Service.enable_min_version_cache() server = service.Service.create(binary='nova-compute', diff --git a/nova/cmd/manage.py b/nova/cmd/manage.py index cb141dc32d..335ad29225 100644 --- a/nova/cmd/manage.py +++ b/nova/cmd/manage.py @@ -47,10 +47,9 @@ from nova.compute import api as compute_api import nova.conf from nova import config from nova import context -from nova.db import api as db from nova.db import constants as db_const +from nova.db.main import api as db from nova.db import migration -from nova.db.sqlalchemy import api as sa_db from nova import exception from nova.i18n import _ from nova.network import constants @@ -121,7 +120,7 @@ class DbCommands(object): # Added in Pike quotas_obj.migrate_quota_classes_to_api_db, # Added in Queens - sa_db.migration_migrate_to_uuid, + db.migration_migrate_to_uuid, # Added in Queens block_device_obj.BlockDeviceMapping.populate_uuids, # Added in Rocky @@ -461,13 +460,12 @@ Error: %s""") % str(e)) for cell in cells: identity = _('Cell %s') % cell.identity with context.target_cell(admin_ctxt, cell) as cctxt: - deleted += sa_db.purge_shadow_tables(cctxt, - before_date, - status_fn=status) + deleted += db.purge_shadow_tables( + cctxt, before_date, status_fn=status) else: identity = _('DB') - deleted = sa_db.purge_shadow_tables(admin_ctxt, - before_date, status_fn=status) + deleted = db.purge_shadow_tables( + admin_ctxt, before_date, status_fn=status) if deleted: return 0 else: diff --git a/nova/cmd/policy.py b/nova/cmd/policy.py index 051983d102..4273463fd9 100644 --- a/nova/cmd/policy.py +++ b/nova/cmd/policy.py @@ -27,7 +27,7 @@ from nova.cmd import common as cmd_common import nova.conf from nova import config from nova import context as nova_context -from nova.db import api as db +from nova.db.main import api as db from nova import exception from nova.i18n import _ from nova import policies diff --git a/nova/cmd/status.py b/nova/cmd/status.py index 75ae63d07d..8e8f8b0dcd 100644 --- a/nova/cmd/status.py +++ b/nova/cmd/status.py @@ -32,7 +32,7 @@ from nova.cmd import common as cmd_common import nova.conf from nova import config from nova import context as nova_context -from nova.db.sqlalchemy import api as db_session +from nova.db.main import api as db_session from nova import exception from nova.i18n import _ from nova.objects import cell_mapping as cell_mapping_obj |