summaryrefslogtreecommitdiff
path: root/nova/cmd
diff options
context:
space:
mode:
authorStephen Finucane <stephenfin@redhat.com>2021-04-01 17:49:02 +0100
committerStephen Finucane <stephenfin@redhat.com>2021-08-09 15:34:40 +0100
commit100b9dc62c0ec9f7b38739837c06646122c818d5 (patch)
tree461ffc78155a8ff058796c522b983a47a946717e /nova/cmd
parent84b61790763f91e12eebb96d955e2f83abc00d56 (diff)
downloadnova-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.py20
-rw-r--r--nova/cmd/compute.py5
-rw-r--r--nova/cmd/manage.py14
-rw-r--r--nova/cmd/policy.py2
-rw-r--r--nova/cmd/status.py2
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