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>
This commit is contained in:
Stephen Finucane 2021-04-01 17:49:02 +01:00
parent 84b6179076
commit 100b9dc62c
164 changed files with 801 additions and 2240 deletions

View File

@ -9,7 +9,6 @@ namespace = oslo.policy
namespace = oslo.privsep
namespace = oslo.service.periodic_task
namespace = oslo.service.service
namespace = oslo.db
namespace = oslo.middleware
namespace = oslo.concurrency
namespace = keystonemiddleware.auth_token

View File

@ -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.

View File

@ -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',

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -53,8 +53,7 @@ from nova import conductor
import nova.conf
from nova import context as nova_context
from nova import crypto
from nova.db import api as db
from nova.db.sqlalchemy import api as db_api
from nova.db.main import api as db_api
from nova import exception
from nova import exception_wrapper
from nova.i18n import _
@ -5083,7 +5082,7 @@ class API:
def get_instance_metadata(self, context, instance):
"""Get all metadata associated with an instance."""
return db.instance_metadata_get(context, instance.uuid)
return db_api.instance_metadata_get(context, instance.uuid)
@check_instance_lock
@check_instance_state(vm_state=[vm_states.ACTIVE, vm_states.PAUSED,
@ -5963,7 +5962,7 @@ class HostAPI:
"""Return the task logs within a given range, optionally
filtering by host and/or state.
"""
return db.task_log_get_all(
return db_api.task_log_get_all(
context, task_name, period_beginning, period_ending, host=host,
state=state)
@ -6056,7 +6055,7 @@ class HostAPI:
if cell.uuid == objects.CellMapping.CELL0_UUID:
continue
with nova_context.target_cell(context, cell) as cctxt:
cell_stats.append(db.compute_node_statistics(cctxt))
cell_stats.append(db_api.compute_node_statistics(cctxt))
if cell_stats:
keys = cell_stats[0].keys()

View File

@ -97,7 +97,8 @@ def create(name, memory, vcpus, root_gb, ephemeral_gb=0, flavorid=None,
for key, value in flavor_attributes.items():
kwargs[key] = utils.validate_integer(
kwargs[key], value[0], value[1], db_const.MAX_INT)
kwargs[key], value[0], value[1], db_const.MAX_INT,
)
# rxtx_factor should be a positive float
try:

View File

@ -15,7 +15,7 @@ import copy
from nova.compute import multi_cell_list
import nova.conf
from nova import context
from nova.db import api as db
from nova.db.main import api as db
from nova import exception
from nova import objects
from nova.objects import instance as instance_obj

View File

@ -14,7 +14,7 @@ import copy
from nova.compute import multi_cell_list
from nova import context
from nova.db import api as db
from nova.db.main import api as db
from nova import exception
from nova import objects
from nova.objects import base

View File

@ -49,16 +49,12 @@ api_db_opts = copy.deepcopy(oslo_db_opts.database_opts)
def register_opts(conf):
# TODO(stephenfin): Enable this once we drop use of
# 'oslo_db.api.DBAPI.from_config'
# conf.register_opts(copy.deepcopy(main_db_opts), group=main_db_group)
conf.register_opts(copy.deepcopy(main_db_opts), group=main_db_group)
conf.register_opts(copy.deepcopy(api_db_opts), group=api_db_group)
def list_opts():
return {
# TODO(stephenfin): Enable this once we drop use of
# 'oslo_db.api.DBAPI.from_config'
# main_db_group: main_db_opts,
main_db_group: main_db_opts,
api_db_group: api_db_opts,
}

View File

@ -22,7 +22,7 @@ from oslo_policy import opts as policy_opts
from oslo_utils import importutils
import nova.conf
from nova.db.sqlalchemy import api as sqlalchemy_api
from nova.db.main import api as db_api
from nova import middleware
from nova import policy
from nova import rpc
@ -100,4 +100,4 @@ def parse_args(argv, default_config_files=None, configure_db=True,
rpc.init(CONF)
if configure_db:
sqlalchemy_api.configure(CONF)
db_api.configure(CONF)

View File

@ -339,7 +339,7 @@ def set_target_cell(context, cell_mapping):
global CELL_CACHE
if cell_mapping is not None:
# avoid circular import
from nova.db import api as db
from nova.db.main import api as db
from nova import rpc
# Synchronize access to the cache by multiple API workers.

View File

@ -1,13 +0,0 @@
# 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.
"""Use nova.db.api instead. In the past this file imported * from there,
which led to unwanted imports."""

File diff suppressed because it is too large Load Diff

0
nova/db/main/__init__.py Normal file
View File

View File

@ -23,6 +23,7 @@ import datetime
import functools
import inspect
import sys
import traceback
from oslo_db import api as oslo_db_api
from oslo_db import exception as db_exc
@ -47,7 +48,7 @@ from nova.compute import task_states
from nova.compute import vm_states
import nova.conf
import nova.context
from nova.db.sqlalchemy import models
from nova.db.main import models
from nova import exception
from nova.i18n import _
from nova import safe_utils
@ -55,10 +56,10 @@ from nova import safe_utils
profiler_sqlalchemy = importutils.try_import('osprofiler.sqlalchemy')
CONF = nova.conf.CONF
LOG = logging.getLogger(__name__)
DISABLE_DB_ACCESS = False
main_context_manager = enginefacade.transaction_context()
api_context_manager = enginefacade.transaction_context()
@ -193,6 +194,17 @@ def select_db_reader_mode(f):
return wrapper
def _check_db_access():
# disable all database access if required
if DISABLE_DB_ACCESS:
service_name = 'nova-compute'
stacktrace = ''.join(traceback.format_stack())
LOG.error(
'No DB access allowed in %(service_name)s: %(stacktrace)s',
{'service_name': service_name, 'stacktrace': stacktrace})
raise exception.DBNotAllowed(binary=service_name)
def pick_context_manager_writer(f):
"""Decorator to use a writer db context manager.
@ -202,6 +214,7 @@ def pick_context_manager_writer(f):
"""
@functools.wraps(f)
def wrapper(context, *args, **kwargs):
_check_db_access()
ctxt_mgr = get_context_manager(context)
with ctxt_mgr.writer.using(context):
return f(context, *args, **kwargs)
@ -218,6 +231,7 @@ def pick_context_manager_reader(f):
"""
@functools.wraps(f)
def wrapper(context, *args, **kwargs):
_check_db_access()
ctxt_mgr = get_context_manager(context)
with ctxt_mgr.reader.using(context):
return f(context, *args, **kwargs)
@ -234,6 +248,7 @@ def pick_context_manager_reader_allow_async(f):
"""
@functools.wraps(f)
def wrapper(context, *args, **kwargs):
_check_db_access()
ctxt_mgr = get_context_manager(context)
with ctxt_mgr.reader.allow_async.using(context):
return f(context, *args, **kwargs)

View File

@ -22,7 +22,7 @@ from migrate.versioning.repository import Repository
from oslo_log import log as logging
import sqlalchemy
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 _

View File

@ -184,8 +184,8 @@ def import_no_db_in_virt(logical_line, filename):
N307
"""
if "nova/virt" in filename and not filename.endswith("fake.py"):
if logical_line.startswith("from nova.db import api"):
yield (0, "N307: nova.db.api import not allowed in nova/virt/*")
if logical_line.startswith("from nova.db.main import api"):
yield (0, "N307: nova.db.* import not allowed in nova/virt/*")
@core.flake8ext

View File

@ -54,7 +54,7 @@ This module provides Manager, a base class for managers.
from oslo_service import periodic_task
import nova.conf
import nova.db.api
import nova.db.main.api
from nova import profiler
from nova import rpc

View File

@ -19,7 +19,7 @@ from oslo_utils import uuidutils
from sqlalchemy import orm
from nova.compute import utils as compute_utils
from nova.db.sqlalchemy import api as db_api
from nova.db.main import api as db_api
from nova.db.sqlalchemy import api_models
from nova import exception
from nova.i18n import _

View File

@ -10,7 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from nova.db import api as db
from nova.db.main import api as db
from nova.objects import base
from nova.objects import fields

View File

@ -19,9 +19,8 @@ from oslo_utils import uuidutils
from oslo_utils import versionutils
from nova import block_device
from nova.db import api as db
from nova.db.sqlalchemy import api as db_api
from nova.db.sqlalchemy import models as db_models
from nova.db.main import api as db
from nova.db.main import models as db_models
from nova import exception
from nova.i18n import _
from nova import objects
@ -109,7 +108,7 @@ class BlockDeviceMapping(base.NovaPersistentObject, base.NovaObject,
@classmethod
def populate_uuids(cls, context, count):
@db_api.pick_context_manager_reader
@db.pick_context_manager_reader
def get_bdms_no_uuid(context):
return context.session.query(db_models.BlockDeviceMapping).\
filter_by(uuid=None).limit(count).all()
@ -145,7 +144,7 @@ class BlockDeviceMapping(base.NovaPersistentObject, base.NovaObject,
# normally a read operation. Forcing everything (transitively)
# which reads a BDM to be in a write transaction for a narrow
# temporary edge case is undesirable.
tctxt = db_api.get_context_manager(context).writer.independent
tctxt = db.get_context_manager(context).writer.independent
with tctxt.using(context):
query = context.session.query(db_models.BlockDeviceMapping).\
filter_by(id=bdm_id)

View File

@ -18,7 +18,7 @@ from oslo_serialization import jsonutils
from oslo_utils import versionutils
from oslo_versionedobjects import exception as ovoo_exc
from nova.db.sqlalchemy import api as db
from nova.db.main import api as db
from nova.db.sqlalchemy import api_models
from nova import exception
from nova import objects

View File

@ -18,7 +18,7 @@ from sqlalchemy import sql
from sqlalchemy.sql import expression
import nova.conf
from nova.db.sqlalchemy import api as db_api
from nova.db.main import api as db_api
from nova.db.sqlalchemy import api_models
from nova import exception
from nova.objects import base

View File

@ -19,9 +19,8 @@ import sqlalchemy as sa
from sqlalchemy import sql
import nova.conf
from nova.db import api as db
from nova.db.sqlalchemy import api as sa_api
from nova.db.sqlalchemy import models
from nova.db.main import api as db
from nova.db.main import models
from nova import exception
from nova import objects
from nova.objects import base
@ -469,7 +468,7 @@ class ComputeNodeList(base.ObjectListBase, base.NovaObject):
@staticmethod
@db.select_db_reader_mode
def _db_compute_node_get_all_by_uuids(context, compute_uuids):
db_computes = sa_api.model_query(context, models.ComputeNode).filter(
db_computes = db.model_query(context, models.ComputeNode).filter(
models.ComputeNode.uuid.in_(compute_uuids)).all()
return db_computes
@ -509,7 +508,7 @@ def _get_node_empty_ratio(context, max_count):
)).filter(models.ComputeNode.deleted == 0).limit(max_count).all()
@sa_api.pick_context_manager_writer
@db.pick_context_manager_writer
def migrate_empty_ratio(context, max_count):
cns = _get_node_empty_ratio(context, max_count)

View File

@ -21,7 +21,7 @@ from oslo_utils import strutils
from oslo_utils import timeutils
from oslo_utils import uuidutils
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.objects import base

View File

@ -17,7 +17,7 @@ import functools
from oslo_utils import uuidutils
from nova import cache_utils
from nova.db import api as db
from nova.db.main import api as db
from nova import exception
from nova.objects import base
from nova.objects import fields

View File

@ -21,8 +21,7 @@ from sqlalchemy import sql
from sqlalchemy.sql import expression
import nova.conf
from nova.db.sqlalchemy import api as db_api
from nova.db.sqlalchemy.api import require_context
from nova.db.main import api as db_api
from nova.db.sqlalchemy import api_models
from nova import exception
from nova.notifications.objects import base as notification
@ -282,7 +281,7 @@ class Flavor(base.NovaPersistentObject, base.NovaObject,
return query
@staticmethod
@require_context
@db_api.require_context
def _flavor_get_from_db(context, id):
"""Returns a dict describing specific flavor."""
result = Flavor._flavor_get_query_from_db(context).\
@ -293,7 +292,7 @@ class Flavor(base.NovaPersistentObject, base.NovaObject,
return _dict_with_extra_specs(result)
@staticmethod
@require_context
@db_api.require_context
def _flavor_get_by_name_from_db(context, name):
"""Returns a dict describing specific flavor."""
result = Flavor._flavor_get_query_from_db(context).\
@ -304,7 +303,7 @@ class Flavor(base.NovaPersistentObject, base.NovaObject,
return _dict_with_extra_specs(result)
@staticmethod
@require_context
@db_api.require_context
def _flavor_get_by_flavor_id_from_db(context, flavor_id):
"""Returns a dict describing specific flavor_id."""
result = Flavor._flavor_get_query_from_db(context).\

View File

@ -14,7 +14,7 @@ from oslo_db import exception as db_exc
from sqlalchemy import orm
from nova import context
from nova.db.sqlalchemy import api as db_api
from nova.db.main import api as db_api
from nova.db.sqlalchemy import api_models
from nova import exception
from nova.i18n import _

View File

@ -27,9 +27,8 @@ from sqlalchemy.sql import func
from nova import availability_zones as avail_zone
from nova.compute import task_states
from nova.compute import vm_states
from nova.db import api as db
from nova.db.sqlalchemy import api as db_api
from nova.db.sqlalchemy import models
from nova.db.main import api as db
from nova.db.main import models
from nova import exception
from nova.i18n import _
from nova.network import model as network_model
@ -1254,7 +1253,7 @@ def _make_instance_list(context, inst_list, db_inst_list, expected_attrs):
return inst_list
@db_api.pick_context_manager_writer
@db.pick_context_manager_writer
def populate_missing_availability_zones(context, count):
# instances without host have no reasonable AZ to set
not_empty_host = models.Instance.host != None # noqa E711
@ -1344,7 +1343,7 @@ class InstanceList(base.ObjectListBase, base.NovaObject):
expected_attrs)
@staticmethod
@db_api.pick_context_manager_reader
@db.pick_context_manager_reader
def _get_uuids_by_host_and_node(context, host, node):
return context.session.query(
models.Instance.uuid).filter_by(
@ -1495,7 +1494,7 @@ class InstanceList(base.ObjectListBase, base.NovaObject):
return db.instance_get_all_uuids_by_hosts(context, hosts)
@staticmethod
@db_api.pick_context_manager_reader
@db.pick_context_manager_reader
def _get_count_by_vm_state_in_db(context, project_id, user_id, vm_state):
return context.session.query(models.Instance.id).\
filter_by(deleted=0).\
@ -1510,9 +1509,9 @@ class InstanceList(base.ObjectListBase, base.NovaObject):
vm_state)
@staticmethod
@db_api.pick_context_manager_reader
@db.pick_context_manager_reader
def _get_counts_in_db(context, project_id, user_id=None):
# NOTE(melwitt): Copied from nova/db/sqlalchemy/api.py:
# NOTE(melwitt): Copied from nova/db/main/api.py:
# It would be better to have vm_state not be nullable
# but until then we test it explicitly as a workaround.
not_soft_deleted = sa.or_(
@ -1567,7 +1566,7 @@ class InstanceList(base.ObjectListBase, base.NovaObject):
return cls._get_counts_in_db(context, project_id, user_id=user_id)
@staticmethod
@db_api.pick_context_manager_reader
@db.pick_context_manager_reader
def _get_count_by_hosts(context, hosts):
return context.session.query(models.Instance).\
filter_by(deleted=0).\

View File

@ -16,7 +16,7 @@ from oslo_utils import timeutils
from oslo_utils import versionutils
from nova.compute import utils as compute_utils
from nova.db import api as db
from nova.db.main import api as db
from nova import exception
from nova import objects
from nova.objects import base

View File

@ -16,7 +16,7 @@ import itertools
from oslo_log import log as logging
from nova.db import api as db
from nova.db.main import api as db
from nova import exception
from nova import objects
from nova.objects import base

View File

@ -22,7 +22,7 @@ from oslo_utils import versionutils
from sqlalchemy import orm
from nova.compute import utils as compute_utils
from nova.db.sqlalchemy import api as db_api
from nova.db.main import api as db_api
from nova.db.sqlalchemy import api_models
from nova import exception
from nova import objects

View File

@ -14,7 +14,7 @@
from oslo_log import log as logging
from nova.db import api as db
from nova.db.main import api as db
from nova import exception
from nova.objects import base
from nova.objects import fields

View File

@ -20,7 +20,7 @@ from sqlalchemy import sql
from sqlalchemy.sql import func
from nova import context as nova_context
from nova.db.sqlalchemy import api as db_api
from nova.db.main import api as db_api
from nova.db.sqlalchemy import api_models
from nova import exception
from nova.i18n import _

View File

@ -17,7 +17,7 @@ import itertools
from oslo_serialization import jsonutils
from oslo_utils import versionutils
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.objects import base

View File

@ -13,7 +13,7 @@
from oslo_serialization import jsonutils
from oslo_utils import versionutils
from nova.db import api as db
from nova.db.main import api as db
from nova.objects import base
from nova.objects import fields

View File

@ -17,8 +17,7 @@ from oslo_db.sqlalchemy import utils as sqlalchemyutils
from oslo_log import log as logging
from oslo_utils import versionutils
from nova.db import api as db
from nova.db.sqlalchemy import api as db_api
from nova.db.main import api as db
from nova.db.sqlalchemy import api_models
from nova import exception
from nova import objects
@ -30,7 +29,7 @@ KEYPAIR_TYPE_X509 = 'x509'
LOG = logging.getLogger(__name__)
@db_api.api_context_manager.reader
@db.api_context_manager.reader
def _get_from_db(context, user_id, name=None, limit=None, marker=None):
query = context.session.query(api_models.KeyPair).\
filter(api_models.KeyPair.user_id == user_id)
@ -55,14 +54,14 @@ def _get_from_db(context, user_id, name=None, limit=None, marker=None):
return query.all()
@db_api.api_context_manager.reader
@db.api_context_manager.reader
def _get_count_from_db(context, user_id):
return context.session.query(api_models.KeyPair).\
filter(api_models.KeyPair.user_id == user_id).\
count()
@db_api.api_context_manager.writer
@db.api_context_manager.writer
def _create_in_db(context, values):
kp = api_models.KeyPair()
kp.update(values)
@ -73,7 +72,7 @@ def _create_in_db(context, values):
return kp
@db_api.api_context_manager.writer
@db.api_context_manager.writer
def _destroy_in_db(context, user_id, name):
result = context.session.query(api_models.KeyPair).\
filter_by(user_id=user_id).\

View File

@ -16,7 +16,7 @@ from oslo_db import exception as db_exc
from oslo_utils import uuidutils
from oslo_utils import versionutils
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 objects

View File

@ -16,7 +16,7 @@ from oslo_log import log as logging
from oslo_serialization import jsonutils
from oslo_utils import versionutils
from nova.db import api as db
from nova.db.main import api as db
from nova import exception
from nova import objects
from nova.objects import base

View File

@ -22,9 +22,8 @@ from oslo_serialization import jsonutils
from oslo_utils import uuidutils
from oslo_utils import versionutils
from nova.db import api as db
from nova.db.sqlalchemy import api as db_api
from nova.db.sqlalchemy import models as db_models
from nova.db.main import api as db
from nova.db.main import models as db_models
from nova import exception
from nova import objects
from nova.objects import base
@ -208,7 +207,7 @@ class PciDevice(base.NovaPersistentObject, base.NovaObject):
@classmethod
def populate_dev_uuids(cls, context, count):
@db_api.pick_context_manager_reader
@db.pick_context_manager_reader
def get_devs_no_uuid(context):
return context.session.query(db_models.PciDevice).\
filter_by(uuid=None).limit(count).all()
@ -264,7 +263,7 @@ class PciDevice(base.NovaPersistentObject, base.NovaObject):
# normally a read operation. Forcing everything (transitively) which
# reads a PCI device to be in a write transaction for a narrow
# temporary edge case is undesirable.
tctxt = db_api.get_context_manager(context).writer.independent
tctxt = db.get_context_manager(context).writer.independent
with tctxt.using(context):
query = context.session.query(db_models.PciDevice).\
filter_by(id=dev_id)

View File

@ -16,10 +16,9 @@ import collections
from oslo_db import exception as db_exc
from nova.db import api as db
from nova.db.sqlalchemy import api as db_api
from nova.db.main import api as db
from nova.db.main import models as main_models
from nova.db.sqlalchemy import api_models
from nova.db.sqlalchemy import models as main_models
from nova import exception
from nova.objects import base
from nova.objects import fields
@ -83,7 +82,7 @@ class Quotas(base.NovaObject):
self.obj_reset_changes(fields=[attr])
@staticmethod
@db_api.api_context_manager.reader
@db.api_context_manager.reader
def _get_from_db(context, project_id, resource, user_id=None):
model = api_models.ProjectUserQuota if user_id else api_models.Quota
query = context.session.query(model).\
@ -101,14 +100,14 @@ class Quotas(base.NovaObject):
return result
@staticmethod
@db_api.api_context_manager.reader
@db.api_context_manager.reader
def _get_all_from_db(context, project_id):
return context.session.query(api_models.ProjectUserQuota).\
filter_by(project_id=project_id).\
all()
@staticmethod
@db_api.api_context_manager.reader
@db.api_context_manager.reader
def _get_all_from_db_by_project(context, project_id):
# by_project refers to the returned dict that has a 'project_id' key
rows = context.session.query(api_models.Quota).\
@ -120,7 +119,7 @@ class Quotas(base.NovaObject):
return result
@staticmethod
@db_api.api_context_manager.reader
@db.api_context_manager.reader
def _get_all_from_db_by_project_and_user(context, project_id, user_id):
# by_project_and_user refers to the returned dict that has
# 'project_id' and 'user_id' keys
@ -136,7 +135,7 @@ class Quotas(base.NovaObject):
return result
@staticmethod
@db_api.api_context_manager.writer
@db.api_context_manager.writer
def _destroy_all_in_db_by_project(context, project_id):
per_project = context.session.query(api_models.Quota).\
filter_by(project_id=project_id).\
@ -148,7 +147,7 @@ class Quotas(base.NovaObject):
raise exception.ProjectQuotaNotFound(project_id=project_id)
@staticmethod
@db_api.api_context_manager.writer
@db.api_context_manager.writer
def _destroy_all_in_db_by_project_and_user(context, project_id, user_id):
result = context.session.query(api_models.ProjectUserQuota).\
filter_by(project_id=project_id).\
@ -159,7 +158,7 @@ class Quotas(base.NovaObject):
user_id=user_id)
@staticmethod
@db_api.api_context_manager.reader
@db.api_context_manager.reader
def _get_class_from_db(context, class_name, resource):
result = context.session.query(api_models.QuotaClass).\
filter_by(class_name=class_name).\
@ -170,7 +169,7 @@ class Quotas(base.NovaObject):
return result
@staticmethod
@db_api.api_context_manager.reader
@db.api_context_manager.reader
def _get_all_class_from_db_by_name(context, class_name):
# by_name refers to the returned dict that has a 'class_name' key
rows = context.session.query(api_models.QuotaClass).\
@ -182,14 +181,14 @@ class Quotas(base.NovaObject):
return result
@staticmethod
@db_api.api_context_manager.writer
@db.api_context_manager.writer
def _create_limit_in_db(context, project_id, resource, limit,
user_id=None):
# TODO(melwitt): We won't have per project resources after nova-network
# is removed.
# TODO(stephenfin): We need to do something here now...but what?
per_user = (user_id and
resource not in db_api.quota_get_per_project_resources())
resource not in db.quota_get_per_project_resources())
quota_ref = (api_models.ProjectUserQuota() if per_user
else api_models.Quota())
if per_user:
@ -205,14 +204,14 @@ class Quotas(base.NovaObject):
return quota_ref
@staticmethod
@db_api.api_context_manager.writer
@db.api_context_manager.writer
def _update_limit_in_db(context, project_id, resource, limit,
user_id=None):
# TODO(melwitt): We won't have per project resources after nova-network
# is removed.
# TODO(stephenfin): We need to do something here now...but what?
per_user = (user_id and
resource not in db_api.quota_get_per_project_resources())
resource not in db.quota_get_per_project_resources())
model = api_models.ProjectUserQuota if per_user else api_models.Quota
query = context.session.query(model).\
filter_by(project_id=project_id).\
@ -229,7 +228,7 @@ class Quotas(base.NovaObject):
raise exception.ProjectQuotaNotFound(project_id=project_id)
@staticmethod
@db_api.api_context_manager.writer
@db.api_context_manager.writer
def _create_class_in_db(context, class_name, resource, limit):
# NOTE(melwitt): There's no unique constraint on the QuotaClass model,
# so check for duplicate manually.
@ -248,7 +247,7 @@ class Quotas(base.NovaObject):
return quota_class_ref
@staticmethod
@db_api.api_context_manager.writer
@db.api_context_manager.writer
def _update_class_in_db(context, class_name, resource, limit):
result = context.session.query(api_models.QuotaClass).\
filter_by(class_name=class_name).\
@ -467,7 +466,7 @@ class Quotas(base.NovaObject):
def get_default_class(cls, context):
try:
qclass = cls._get_all_class_from_db_by_name(
context, db_api._DEFAULT_QUOTA_NAME)
context, db._DEFAULT_QUOTA_NAME)
except exception.QuotaClassNotFound:
qclass = db.quota_class_get_default(context)
return qclass
@ -502,8 +501,8 @@ class QuotasNoOp(Quotas):
pass
@db_api.require_context
@db_api.pick_context_manager_reader
@db.require_context
@db.pick_context_manager_reader
def _get_main_per_project_limits(context, limit):
return context.session.query(main_models.Quota).\
filter_by(deleted=0).\
@ -511,8 +510,8 @@ def _get_main_per_project_limits(context, limit):
all()
@db_api.require_context
@db_api.pick_context_manager_reader
@db.require_context
@db.pick_context_manager_reader
def _get_main_per_user_limits(context, limit):
return context.session.query(main_models.ProjectUserQuota).\
filter_by(deleted=0).\
@ -520,8 +519,8 @@ def _get_main_per_user_limits(context, limit):
all()
@db_api.require_context
@db_api.pick_context_manager_writer
@db.require_context
@db.pick_context_manager_writer
def _destroy_main_per_project_limits(context, project_id, resource):
context.session.query(main_models.Quota).\
filter_by(deleted=0).\
@ -530,8 +529,8 @@ def _destroy_main_per_project_limits(context, project_id, resource):
soft_delete(synchronize_session=False)
@db_api.require_context
@db_api.pick_context_manager_writer
@db.require_context
@db.pick_context_manager_writer
def _destroy_main_per_user_limits(context, project_id, resource, user_id):
context.session.query(main_models.ProjectUserQuota).\
filter_by(deleted=0).\
@ -541,7 +540,7 @@ def _destroy_main_per_user_limits(context, project_id, resource, user_id):
soft_delete(synchronize_session=False)
@db_api.api_context_manager.writer
@db.api_context_manager.writer
def _create_limits_in_api_db(context, db_limits, per_user=False):
for db_limit in db_limits:
user_id = db_limit.user_id if per_user else None
@ -588,8 +587,8 @@ def migrate_quota_limits_to_api_db(context, count):
return len(main_per_project_limits) + len(main_per_user_limits), done
@db_api.require_context
@db_api.pick_context_manager_reader
@db.require_context
@db.pick_context_manager_reader
def _get_main_quota_classes(context, limit):
return context.session.query(main_models.QuotaClass).\
filter_by(deleted=0).\
@ -597,7 +596,7 @@ def _get_main_quota_classes(context, limit):
all()
@db_api.pick_context_manager_writer
@db.pick_context_manager_writer
def _destroy_main_quota_classes(context, db_classes):
for db_class in db_classes:
context.session.query(main_models.QuotaClass).\
@ -606,7 +605,7 @@ def _destroy_main_quota_classes(context, db_classes):
soft_delete(synchronize_session=False)
@db_api.api_context_manager.writer
@db.api_context_manager.writer
def _create_classes_in_api_db(context, db_classes):
for db_class in db_classes:
Quotas._create_class_in_db(context, db_class.class_name,

View File

@ -20,7 +20,7 @@ from oslo_log import log as logging
from oslo_serialization import jsonutils
from oslo_utils import versionutils
from nova.db.sqlalchemy import api as db
from nova.db.main import api as db
from nova.db.sqlalchemy import api_models
from nova import exception
from nova import objects

View File

@ -14,7 +14,7 @@
from oslo_serialization import jsonutils
from nova.db import api as db
from nova.db.main import api as db
from nova.objects import base
from nova.objects import fields

View File

@ -18,9 +18,8 @@
from oslo_utils import uuidutils
from oslo_utils import versionutils
from nova.db import api as db
from nova.db.sqlalchemy import api as db_api
from nova.db.sqlalchemy import models
from nova.db.main import api as db
from nova.db.main import models
from nova import objects
from nova.objects import base
from nova.objects import fields
@ -115,7 +114,7 @@ class SecurityGroupList(base.ObjectListBase, base.NovaObject):
self.obj_reset_changes()
@staticmethod
@db_api.pick_context_manager_reader
@db.pick_context_manager_reader
def _get_counts_from_db(context, project_id, user_id=None):
query = context.session.query(models.SecurityGroup.id).\
filter_by(deleted=0).\

View File

@ -18,7 +18,7 @@ from oslo_utils import versionutils
from nova import availability_zones
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.notifications.objects import base as notification
from nova.notifications.objects import service as service_notification

View File

@ -10,7 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from nova.db import api as db
from nova.db.main import api as db
from nova import objects
from nova.objects import base
from nova.objects import fields

View File

@ -10,7 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from nova.db import api as db
from nova.db.main import api as db
from nova.objects import base
from nova.objects import fields

View File

@ -12,7 +12,7 @@
from oslo_serialization import jsonutils
from nova.db import api as db
from nova.db.main import api as db
from nova.objects import base
from nova.objects import fields

View File

@ -12,7 +12,7 @@
from oslo_serialization import jsonutils
from nova.db import api as db
from nova.db.main import api as db
from nova.objects import base
from nova.objects import fields

View File

@ -15,7 +15,7 @@
from oslo_serialization import jsonutils
from oslo_utils import versionutils
from nova.db import api as db
from nova.db.main import api as db
from nova.objects import base
from nova.objects import fields

View File

@ -16,9 +16,8 @@ from oslo_log import log as logging
from oslo_utils import versionutils
from nova import context as nova_context
from nova.db import api as db
from nova.db.sqlalchemy import api as db_api
from nova.db.sqlalchemy import models
from nova.db.main import api as db
from nova.db.main import models
from nova import exception
from nova import objects
from nova.objects import base
@ -150,7 +149,7 @@ class VirtualInterfaceList(base.ObjectListBase, base.NovaObject):
objects.VirtualInterface, db_vifs)
@db_api.api_context_manager.writer
@db.api_context_manager.writer
def fill_virtual_interface_list(context, max_count):
"""This fills missing VirtualInterface Objects in Nova DB"""
count_hit = 0
@ -288,7 +287,7 @@ def fill_virtual_interface_list(context, max_count):
# we checked.
# Please notice that because of virtual_interfaces_instance_uuid_fkey
# we need to have FAKE_UUID instance object, even deleted one.
@db_api.pick_context_manager_writer
@db.pick_context_manager_writer
def _set_or_delete_marker_for_migrate_instances(context, marker=None):
context.session.query(models.VirtualInterface).filter_by(
instance_uuid=FAKE_UUID).delete()
@ -317,7 +316,7 @@ def _set_or_delete_marker_for_migrate_instances(context, marker=None):
db_mapping.create()
@db_api.pick_context_manager_reader
@db.pick_context_manager_reader
def _get_marker_for_migrate_instances(context):
vif = (context.session.query(models.VirtualInterface).filter_by(
instance_uuid=FAKE_UUID)).first()

View File

@ -10,7 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from nova.db import api as db
from nova.db.main import api as db
from nova.objects import base
from nova.objects import fields

View File

@ -24,8 +24,7 @@ from sqlalchemy import sql
import nova.conf
from nova import context as nova_context
from nova.db import api as db
from nova.db.sqlalchemy import api as db_api
from nova.db.main import api as db
from nova.db.sqlalchemy import api_models
from nova import exception
from nova import objects
@ -1046,7 +1045,7 @@ class QuotaEngine(object):
return 0
@db_api.api_context_manager.reader
@db.api_context_manager.reader
def _user_id_queued_for_delete_populated(context, project_id=None):
"""Determine whether user_id and queued_for_delete are set.

View File

@ -56,7 +56,7 @@ import testtools
from nova.api.openstack import wsgi_app
from nova.compute import rpcapi as compute_rpcapi
from nova import context
from nova.db.sqlalchemy import api as sqlalchemy_api
from nova.db.main import api as db_api
from nova import exception
from nova import objects
from nova.objects import base as objects_base
@ -382,7 +382,7 @@ class TestCase(base.BaseTestCase):
def enforce_fk_constraints(self, engine=None):
if engine is None:
engine = sqlalchemy_api.get_engine()
engine = db_api.get_engine()
dialect = engine.url.get_dialect()
if dialect == sqlite.dialect:
engine.connect().execute("PRAGMA foreign_keys = ON")

View File

@ -43,8 +43,8 @@ from nova.api import wsgi
from nova.compute import multi_cell_list
from nova.compute import rpcapi as compute_rpcapi
from nova import context
from nova.db.main import api as session
from nova.db import migration
from nova.db.sqlalchemy import api as session
from nova import exception
from nova import objects
from nova.objects import base as obj_base
@ -554,8 +554,9 @@ class CellDatabases(fixtures.Fixture):
# a new database created with the schema we need and the
# context manager for it stashed.
with fixtures.MonkeyPatch(
'nova.db.sqlalchemy.api.get_context_manager',
get_context_manager):
'nova.db.main.api.get_context_manager',
get_context_manager,
):
engine = ctxt_mgr.writer.get_engine()
engine.dispose()
self._cache_schema(connection_str)
@ -571,10 +572,10 @@ class CellDatabases(fixtures.Fixture):
# duration of the test (unlike the temporary ones above) and
# provide the actual "runtime" switching of connections for us.
self.useFixture(fixtures.MonkeyPatch(
'nova.db.sqlalchemy.api.create_context_manager',
'nova.db.main.api.create_context_manager',
self._wrap_create_context_manager))
self.useFixture(fixtures.MonkeyPatch(
'nova.db.sqlalchemy.api.get_context_manager',
'nova.db.main.api.get_context_manager',
self._wrap_get_context_manager))
self.useFixture(fixtures.MonkeyPatch(
'nova.context.target_cell',

View File

@ -71,7 +71,7 @@ class MigrateServerSamplesJsonTest(test_servers.ServersSampleBase):
'nova.conductor.manager.ComputeTaskManager._live_migrate',
fake_live_migrate)
self.stub_out(
'nova.db.api.service_get_by_compute_host',
'nova.db.main.api.service_get_by_compute_host',
fake_get_compute)
response = self._do_post('servers/%s/action' % self.uuid,
@ -218,7 +218,7 @@ class MigrateServerSamplesJsonTestV268(test_servers.ServersSampleBase):
'nova.conductor.manager.ComputeTaskManager._live_migrate',
fake_live_migrate)
self.stub_out(
'nova.db.api.service_get_by_compute_host',
'nova.db.main.api.service_get_by_compute_host',
fake_get_compute)
response = self._do_post('servers/%s/action' % self.uuid,

View File

@ -20,7 +20,7 @@ import mock
from nova.conductor import manager as conductor_manager
from nova import context
from nova.db import api as db
from nova.db.main import api as db
from nova import objects
from nova.tests.functional.api_sample_tests import test_servers
from nova.tests.unit import fake_instance

View File

@ -10,7 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from nova.db.sqlalchemy import models
from nova.db.main import models
from nova.tests.functional.api_sample_tests import test_servers
TAG1 = 'tag1'

View File

@ -116,7 +116,7 @@ class ServersSampleJsonTest(ServersSampleBase):
def test_servers_get(self):
self.stub_out(
'nova.db.api.block_device_mapping_get_all_by_instance_uuids',
'nova.db.main.api.block_device_mapping_get_all_by_instance_uuids',
fakes.stub_bdm_get_all_by_instance_uuids)
uuid = self.test_servers_post()
response = self._do_get('servers/%s' % uuid)
@ -142,7 +142,7 @@ class ServersSampleJsonTest(ServersSampleBase):
def test_servers_details(self):
self.stub_out(
'nova.db.api.block_device_mapping_get_all_by_instance_uuids',
'nova.db.main.api.block_device_mapping_get_all_by_instance_uuids',
fakes.stub_bdm_get_all_by_instance_uuids)
uuid = self.test_servers_post()
response = self._do_get('servers/detail?limit=1')

View File

@ -31,11 +31,11 @@ class ServicesJsonTest(api_sample_base.ApiSampleTestBaseV21):
def setUp(self):
super(ServicesJsonTest, self).setUp()
self.api.microversion = self.microversion
self.stub_out("nova.db.api.service_get_all",
self.stub_out("nova.db.main.api.service_get_all",
test_services.fake_db_api_service_get_all)
self.stub_out("nova.db.api.service_get_by_host_and_binary",
self.stub_out("nova.db.main.api.service_get_by_host_and_binary",
test_services.fake_service_get_by_host_binary)
self.stub_out("nova.db.api.service_update",
self.stub_out("nova.db.main.api.service_update",
test_services.fake_service_update)
# If we are not using real services, we need to stub out
# HostAPI._update_compute_provider_status so we don't actually
@ -154,9 +154,9 @@ class ServicesV253JsonTest(ServicesV211JsonTest):
def fake_get_provider_uuids_in_tree(context, compute_node_id):
return [compute_node_id]
self.stub_out('nova.db.api.service_get_by_uuid',
self.stub_out('nova.db.main.api.service_get_by_uuid',
db_service_get_by_uuid)
self.stub_out('nova.db.api.compute_node_get_all_by_host',
self.stub_out('nova.db.main.api.compute_node_get_all_by_host',
fake_cn_get_all_by_host)
self.stub_out(
'nova.objects.host_mapping.HostMapping._get_by_host_from_db',

View File

@ -16,7 +16,7 @@ from oslo_utils.fixture import uuidsentinel as uuids
from nova.compute import instance_list
from nova import context
from nova.db import api as db
from nova.db.main import api as db
from nova import exception
from nova import objects
from nova import test

View File

@ -18,7 +18,7 @@ from oslo_utils.fixture import uuidsentinel
from oslo_utils import timeutils
from nova import context
from nova.db.sqlalchemy import api as db_api
from nova.db.main import api as db_api
from nova.db.sqlalchemy import api_models
from nova import exception
import nova.objects.aggregate as aggregate_obj

View File

@ -10,8 +10,8 @@
# License for the specific language governing permissions and limitations
# under the License.
from nova.db.main import models
from nova.db.sqlalchemy import api_models
from nova.db.sqlalchemy import models
from nova import test

View File

@ -22,8 +22,7 @@ import sqlalchemy as sa
from sqlalchemy import func
from nova import context
from nova.db import api as db
from nova.db.sqlalchemy import api as sqlalchemy_api
from nova.db.main import api as db
from nova import objects
from nova.tests.functional import integrated_helpers
from nova import utils as nova_utils
@ -176,11 +175,11 @@ class TestDatabaseArchive(integrated_helpers._IntegratedTestBase):
self.assertFalse(exceptions)
def _get_table_counts(self):
engine = sqlalchemy_api.get_engine()
engine = db.get_engine()
conn = engine.connect()
meta = sa.MetaData(engine)
meta.reflect()
shadow_tables = sqlalchemy_api._purgeable_tables(meta)
shadow_tables = db._purgeable_tables(meta)
results = {}
for table in shadow_tables:
r = conn.execute(
@ -222,8 +221,7 @@ class TestDatabaseArchive(integrated_helpers._IntegratedTestBase):
def status(msg):
lines.append(msg)
deleted = sqlalchemy_api.purge_shadow_tables(admin_context,
None, status_fn=status)
deleted = db.purge_shadow_tables(admin_context, None, status_fn=status)
self.assertNotEqual(0, deleted)
self.assertNotEqual(0, len(lines))
self.assertEqual(sum(results.values()), archived)
@ -277,8 +275,7 @@ class TestDatabaseArchive(integrated_helpers._IntegratedTestBase):
# Make sure we didn't delete anything if the marker is before
# we started
past = timeutils.utcnow() - datetime.timedelta(days=31)
deleted = sqlalchemy_api.purge_shadow_tables(admin_context,
past)
deleted = db.purge_shadow_tables(admin_context, past)
self.assertEqual(0, deleted)
# Nothing should be changed if we didn't purge anything
@ -288,7 +285,7 @@ class TestDatabaseArchive(integrated_helpers._IntegratedTestBase):
# Make sure we deleted things when the marker is after
# we started
future = timeutils.utcnow() + datetime.timedelta(hours=1)
deleted = sqlalchemy_api.purge_shadow_tables(admin_context, future)
deleted = db.purge_shadow_tables(admin_context, future)
self.assertNotEqual(0, deleted)
# There should be no rows in any table if we purged everything
@ -306,6 +303,6 @@ class TestDatabaseArchive(integrated_helpers._IntegratedTestBase):
self.assertEqual([server_id], deleted_ids)
date = dateutil_parser.parse('oct 21 2015', fuzzy=True)
admin_context = context.get_admin_context()
deleted = sqlalchemy_api.purge_shadow_tables(admin_context, date)
deleted = db.purge_shadow_tables(admin_context, date)
self.assertEqual(0, deleted)
self.assertEqual(sum(results.values()), archived)

View File

@ -15,7 +15,7 @@ from oslo_utils.fixture import uuidsentinel
import nova.conf
from nova import context
from nova.db import api as db
from nova.db.main import api as db
from nova import objects
from nova.objects import compute_node
from nova.objects import fields as obj_fields

View File

@ -11,7 +11,7 @@
# under the License.
from nova import context
from nova.db.sqlalchemy import api as db_api
from nova.db.main import api as db_api
from nova.db.sqlalchemy import api_models
from nova import exception
from nova import objects

View File

@ -10,8 +10,8 @@
# License for the specific language governing permissions and limitations
# under the License.
from nova.db.main import models
from nova.db.sqlalchemy import api_models
from nova.db.sqlalchemy import models
from nova import test

View File

@ -15,7 +15,7 @@ from oslo_utils import uuidutils
from nova.compute import vm_states
from nova import context
from nova.db import api as db
from nova.db.main import api as db
from nova import objects
from nova import test

View File

@ -11,7 +11,7 @@
# under the License.
from nova import context
from nova.db.sqlalchemy import api as db_api
from nova.db.main import api as db_api
from nova import exception
from nova import objects
from nova.objects import keypair

View File

@ -10,8 +10,8 @@
# License for the specific language governing permissions and limitations
# under the License.
from nova.db.main import models
from nova.db.sqlalchemy import api_models
from nova.db.sqlalchemy import models
from nova import test

View File

@ -11,11 +11,11 @@
# under the License.
from nova import context
from nova.db.sqlalchemy import api as db_api
from nova.db.main import api as db_api
from nova import exception
from nova.objects import quotas
from nova import test
from nova.tests.unit.db import test_db_api
from nova.tests.unit.db.main import test_api as test_db_api
class QuotasObjectTestCase(test.TestCase,

View File

@ -11,7 +11,7 @@
# under the License.
from nova import context
from nova.db.sqlalchemy import api as db_api
from nova.db.main import api as db_api
from nova import objects
from nova import test

View File

@ -31,7 +31,7 @@ from nova.compute import rpcapi as compute_rpcapi
from nova.compute import utils as compute_utils
import nova.conf
from nova import context
from nova.db import api as db
from nova.db.main import api as db
import nova.image.glance
from nova import objects
from nova.objects import base as objects_base

View File

@ -44,9 +44,9 @@ class TestServiceUpdateNotificationSamplev2_52(TestServiceNotificationBase):
def setUp(self):
super(TestServiceUpdateNotificationSamplev2_52, self).setUp()
self.stub_out("nova.db.api.service_get_by_host_and_binary",
self.stub_out("nova.db.main.api.service_get_by_host_and_binary",
test_services.fake_service_get_by_host_binary)
self.stub_out("nova.db.api.service_update",
self.stub_out("nova.db.main.api.service_update",
test_services.fake_service_update)
# NOTE(gibi): enable / disable a compute service tries to call
# the compute service via RPC to update placement. However in these
@ -111,7 +111,7 @@ class TestServiceUpdateNotificationSampleLatest(
if svc['uuid'] == service_uuid:
return svc
raise exception.ServiceNotFound(service_id=service_uuid)
self.stub_out('nova.db.api.service_get_by_uuid',
self.stub_out('nova.db.main.api.service_get_by_uuid',
db_service_get_by_uuid)
def test_service_enable(self):

View File

@ -11,7 +11,7 @@
# under the License.
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 test
from nova.tests import fixtures as nova_fixtures
from nova.tests.functional import fixtures as func_fixtures

View File

@ -11,7 +11,7 @@
# under the License.
import nova.context
from nova.db import api as db
from nova.db.main import api as db
from nova import objects
from nova import test

View File

@ -11,7 +11,7 @@
# under the License.
from nova import context as nova_context
from nova.db import api as db_api
from nova.db.main import api as db_api
from nova.objects import virtual_interface
from nova import test
from nova.tests import fixtures as nova_fixtures

View File

@ -13,7 +13,7 @@
from oslo_log import log as logging
from nova import context
from nova.db import api as db_api
from nova.db.main import api as db_api
from nova import objects
from nova import test
from nova.tests import fixtures as nova_fixtures

View File

@ -21,7 +21,7 @@ from oslo_utils import timeutils
from nova.compute import instance_actions
from nova import conf
from nova import context as nova_context
from nova.db import api as db_api
from nova.db.main import api as db_api
from nova import exception
from nova import objects
from nova.policies import base as base_policies

View File

@ -18,8 +18,7 @@ from oslo_config import cfg
from nova.compute import instance_actions
from nova import context
from nova.db import api as db
from nova.db.sqlalchemy import api as db_api
from nova.db.main import api as db
from nova import test
from nova.tests import fixtures as nova_fixtures
from nova.tests.functional.api import client
@ -261,9 +260,9 @@ class ServerGroupTestV21(ServerGroupTestBase):
ctxt = context.get_admin_context()
servers = db.instance_get_all(ctxt)
self.assertEqual(1, len(servers))
ctxt_mgr = db_api.get_context_manager(ctxt)
ctxt_mgr = db.get_context_manager(ctxt)
with ctxt_mgr.reader.using(ctxt):
bdms = db_api._block_device_mapping_get_query(ctxt).all()
bdms = db._block_device_mapping_get_query(ctxt).all()
self.assertEqual(1, len(bdms))
self.assertEqual(servers[0]['uuid'], bdms[0]['instance_uuid'])

View File

@ -24,7 +24,7 @@ from nova.api.openstack.compute import servers as servers_v21
from nova import availability_zones
from nova.compute import api as compute_api
from nova import context
from nova.db import api as db
from nova.db.main import api as db
from nova import exception
from nova import objects
from nova import test

View File

@ -88,7 +88,7 @@ class DiskConfigTestCaseV21(test.TestCase):
return inst
self.stub_out('nova.db.api.instance_create', fake_instance_create)
self.stub_out('nova.db.main.api.instance_create', fake_instance_create)
def _set_up_app(self):
self.app = compute.APIRouterV21()

View File

@ -22,7 +22,7 @@ from nova.api.openstack.compute import hosts as os_hosts_v21
from nova.compute import power_state
from nova.compute import vm_states
from nova import context as context_maker
from nova.db import api as db
from nova.db.main import api as db
from nova import exception
from nova import test
from nova.tests import fixtures
@ -135,10 +135,10 @@ class HostTestCaseV21(test.TestCase):
def _setup_stubs(self):
# Pretend we have fake_hosts.HOST_LIST in the DB
self.stub_out('nova.db.api.service_get_all',
self.stub_out('nova.db.main.api.service_get_all',
stub_service_get_all)
# Only hosts in our fake DB exist
self.stub_out('nova.db.api.service_get_by_host_and_binary',
self.stub_out('nova.db.main.api.service_get_by_host_and_binary',
stub_service_get_by_host_and_binary)
# 'host_c1' always succeeds, and 'host_c2'
self.stub_out('nova.compute.api.HostAPI.set_host_enabled',
@ -233,7 +233,7 @@ class HostTestCaseV21(test.TestCase):
def stub_service_get_all_notimpl(self, req):
return [{'host': 'notimplemented', 'topic': None,
'availability_zone': None}]
self.stub_out('nova.db.api.service_get_all',
self.stub_out('nova.db.main.api.service_get_all',
stub_service_get_all_notimpl)
body = {key: val}
self.assertRaises(webob.exc.HTTPNotImplemented,

View File

@ -250,7 +250,7 @@ class HypervisorsTestV21(test.NoDBTestCase):
host_api.compute_node_get = mock.MagicMock(
side_effect=fake_compute_node_get)
self.stub_out('nova.db.api.compute_node_statistics',
self.stub_out('nova.db.main.api.compute_node_statistics',
fake_compute_node_statistics)
def test_view_hypervisor_nodetail_noservers(self):

View File

@ -25,7 +25,7 @@ from webob import exc
from nova.api.openstack.compute import instance_actions as instance_actions_v21
from nova.api.openstack import wsgi as os_wsgi
from nova.compute import api as compute_api
from nova.db.sqlalchemy import models
from nova.db.main import models
from nova import exception
from nova import objects
from nova import policy
@ -134,7 +134,7 @@ class InstanceActionsTestV21(test.NoDBTestCase):
actions.append(action)
return actions
self.stub_out('nova.db.api.actions_get', fake_get_actions)
self.stub_out('nova.db.main.api.actions_get', fake_get_actions)
req = self._get_http_req('os-instance-actions')
res_dict = self.controller.index(req, FAKE_UUID)
for res in res_dict['instanceActions']:
@ -155,8 +155,9 @@ class InstanceActionsTestV21(test.NoDBTestCase):
events.append(event)
return events
self.stub_out('nova.db.api.action_get_by_request_id', fake_get_action)
self.stub_out('nova.db.api.action_events_get', fake_get_events)
self.stub_out(
'nova.db.main.api.action_get_by_request_id', fake_get_action)
self.stub_out('nova.db.main.api.action_events_get', fake_get_events)
req = self._get_http_req('os-instance-actions/1',
use_admin_context=True)
res_dict = self.controller.show(req, FAKE_UUID, FAKE_REQUEST_ID)
@ -177,8 +178,9 @@ class InstanceActionsTestV21(test.NoDBTestCase):
def fake_get_events(context, action_id):
return self.fake_events[action_id]
self.stub_out('nova.db.api.action_get_by_request_id', fake_get_action)
self.stub_out('nova.db.api.action_events_get', fake_get_events)
self.stub_out(
'nova.db.main.api.action_get_by_request_id', fake_get_action)
self.stub_out('nova.db.main.api.action_events_get', fake_get_events)
self._set_policy_rules()
req = self._get_http_req('os-instance-actions/1')
@ -202,7 +204,8 @@ class InstanceActionsTestV21(test.NoDBTestCase):
def fake_no_action(context, uuid, action_id):
return None
self.stub_out('nova.db.api.action_get_by_request_id', fake_no_action)
self.stub_out(
'nova.db.main.api.action_get_by_request_id', fake_no_action)
req = self._get_http_req('os-instance-actions/1')
self.assertRaises(exc.HTTPNotFound, self.controller.show, req,
FAKE_UUID, FAKE_REQUEST_ID)
@ -431,8 +434,9 @@ class InstanceActionsTestV284(InstanceActionsTestV266):
def fake_get_events(context, action_id):
return self.fake_events[action_id]
self.stub_out('nova.db.api.action_get_by_request_id', fake_get_action)
self.stub_out('nova.db.api.action_events_get', fake_get_events)
self.stub_out(
'nova.db.main.api.action_get_by_request_id', fake_get_action)
self.stub_out('nova.db.main.api.action_events_get', fake_get_events)
self._set_policy_rules(overwrite=False)
req = self._get_http_req('os-instance-actions/1')
@ -448,8 +452,9 @@ class InstanceActionsTestV284(InstanceActionsTestV266):
def fake_get_events(context, action_id):
return self.fake_events[action_id]
self.stub_out('nova.db.api.action_get_by_request_id', fake_get_action)
self.stub_out('nova.db.api.action_events_get', fake_get_events)
self.stub_out(
'nova.db.main.api.action_get_by_request_id', fake_get_action)
self.stub_out('nova.db.main.api.action_events_get', fake_get_events)
req = self._get_http_req_with_version('os-instance-actions/1',
version="2.83")

View File

@ -119,10 +119,12 @@ class InstanceUsageAuditLogTestV21(test.NoDBTestCase):
self.assertIsNone(disabled)
return TEST_COMPUTE_SERVICES
self.stub_out('nova.utils.last_completed_audit_period',
fake_last_completed_audit_period)
self.stub_out('nova.db.api.service_get_all', fake_service_get_all)
self.stub_out('nova.db.api.task_log_get_all', fake_task_log_get_all)
self.stub_out(
'nova.utils.last_completed_audit_period',
fake_last_completed_audit_period)
self.stub_out('nova.db.main.api.service_get_all', fake_service_get_all)
self.stub_out(
'nova.db.main.api.task_log_get_all', fake_task_log_get_all)
self.req = fakes.HTTPRequest.blank('')

View File

@ -74,11 +74,11 @@ class KeypairsTestV21(test.TestCase):
fakes.stub_out_networking(self)
fakes.stub_out_secgroup_api(self)
self.stub_out("nova.db.api.key_pair_get_all_by_user",
self.stub_out("nova.db.main.api.key_pair_get_all_by_user",
db_key_pair_get_all_by_user)
self.stub_out("nova.db.api.key_pair_create",
self.stub_out("nova.db.main.api.key_pair_create",
db_key_pair_create)
self.stub_out("nova.db.api.key_pair_destroy",
self.stub_out("nova.db.main.api.key_pair_destroy",
db_key_pair_destroy)
self._setup_app_and_controller()
@ -282,7 +282,7 @@ class KeypairsTestV21(test.TestCase):
def db_key_pair_get_not_found(context, user_id, name):
raise exception.KeypairNotFound(user_id=user_id, name=name)
self.stub_out("nova.db.api.key_pair_destroy",
self.stub_out("nova.db.main.api.key_pair_destroy",
db_key_pair_get_not_found)
self.assertRaises(webob.exc.HTTPNotFound,
self.controller.delete, self.req, 'FAKE')
@ -294,7 +294,7 @@ class KeypairsTestV21(test.TestCase):
name='foo', public_key='XXX', fingerprint='YYY',
type='ssh')
self.stub_out("nova.db.api.key_pair_get", _db_key_pair_get)
self.stub_out("nova.db.main.api.key_pair_get", _db_key_pair_get)
res_dict = self.controller.show(self.req, 'FAKE')
self.assertEqual('foo', res_dict['keypair']['name'])
@ -307,7 +307,7 @@ class KeypairsTestV21(test.TestCase):
def _db_key_pair_get(context, user_id, name):
raise exception.KeypairNotFound(user_id=user_id, name=name)
self.stub_out("nova.db.api.key_pair_get", _db_key_pair_get)
self.stub_out("nova.db.main.api.key_pair_get", _db_key_pair_get)
self.assertRaises(webob.exc.HTTPNotFound,
self.controller.show, self.req, 'FAKE')
@ -432,7 +432,7 @@ class KeypairsTestV235(test.TestCase):
super(KeypairsTestV235, self).setUp()
self._setup_app_and_controller()
@mock.patch("nova.db.api.key_pair_get_all_by_user")
@mock.patch("nova.db.main.api.key_pair_get_all_by_user")
def test_keypair_list_limit_and_marker(self, mock_kp_get):
mock_kp_get.side_effect = db_key_pair_get_all_by_user
@ -467,7 +467,7 @@ class KeypairsTestV235(test.TestCase):
self.assertRaises(exception.ValidationError, self.controller.index,
req)
@mock.patch("nova.db.api.key_pair_get_all_by_user")
@mock.patch("nova.db.main.api.key_pair_get_all_by_user")
def test_keypair_list_limit_and_marker_invalid_in_old_microversion(
self, mock_kp_get):
mock_kp_get.side_effect = db_key_pair_get_all_by_user
@ -488,7 +488,7 @@ class KeypairsTestV275(test.TestCase):
super(KeypairsTestV275, self).setUp()
self.controller = keypairs_v21.KeypairController()
@mock.patch("nova.db.api.key_pair_get_all_by_user")
@mock.patch("nova.db.main.api.key_pair_get_all_by_user")
@mock.patch('nova.objects.KeyPair.get_by_name')
def test_keypair_list_additional_param_old_version(self, mock_get_by_name,
mock_kp_get):

View File

@ -24,7 +24,7 @@ import webob
from nova.api.openstack.compute import security_groups as secgroups_v21
from nova import context as context_maker
import nova.db.api
import nova.db.main.api
from nova import exception
from nova.network import model
from nova.network import neutron as neutron_api
@ -636,7 +636,7 @@ class TestSecurityGroupsV21(test.TestCase):
_context, instance_obj.Instance(), db_inst,
expected_attrs=instance_obj.INSTANCE_DEFAULT_FIELDS)
neutron = neutron_api.API()
with mock.patch.object(nova.db.api, 'instance_get_by_uuid',
with mock.patch.object(nova.db.main.api, 'instance_get_by_uuid',
return_value=db_inst):
neutron.allocate_for_instance(_context, instance, None,
security_groups=[sg['id']])

View File

@ -1038,8 +1038,9 @@ class ServerActionsControllerTestV21(test.TestCase):
'delete_on_termination': False,
'no_device': None})]
self.stub_out('nova.db.api.block_device_mapping_get_all_by_instance',
fake_block_device_mapping_get_all_by_instance)
self.stub_out(
'nova.db.main.api.block_device_mapping_get_all_by_instance',
fake_block_device_mapping_get_all_by_instance)
system_metadata = dict(image_kernel_id=_fake_id('b'),
image_ramdisk_id=_fake_id('c'),
@ -1150,8 +1151,9 @@ class ServerActionsControllerTestV21(test.TestCase):
'delete_on_termination': False,
'no_device': None})]
self.stub_out('nova.db.api.block_device_mapping_get_all_by_instance',
fake_block_device_mapping_get_all_by_instance)
self.stub_out(
'nova.db.main.api.block_device_mapping_get_all_by_instance',
fake_block_device_mapping_get_all_by_instance)
instance = fakes.fake_compute_get(
project_id=fakes.FAKE_PROJECT_ID,

View File

@ -23,7 +23,7 @@ import webob
from nova.api.openstack.compute import server_metadata \
as server_metadata_v21
from nova.compute import vm_states
import nova.db.api
import nova.db.main.api
from nova import exception
from nova import test
from nova.tests.unit.api.openstack import fakes
@ -96,7 +96,7 @@ class ServerMetaDataTestV21(test.TestCase):
'vm_state': vm_states.ACTIVE,
'metadata': metadata}))
self.stub_out('nova.db.api.instance_metadata_get',
self.stub_out('nova.db.main.api.instance_metadata_get',
return_server_metadata)
self._set_up_resources()
@ -124,14 +124,14 @@ class ServerMetaDataTestV21(test.TestCase):
self.assertEqual(expected, res_dict)
def test_index_nonexistent_server(self):
self.stub_out('nova.db.api.instance_metadata_get',
self.stub_out('nova.db.main.api.instance_metadata_get',
return_server_nonexistent)
req = self._get_request()
self.assertRaises(webob.exc.HTTPNotFound,
self.controller.index, req, self.url)
def test_index_no_data(self):
self.stub_out('nova.db.api.instance_metadata_get',
self.stub_out('nova.db.main.api.instance_metadata_get',
return_empty_server_metadata)
req = self._get_request()
res_dict = self.controller.index(req, self.uuid)
@ -145,23 +145,23 @@ class ServerMetaDataTestV21(test.TestCase):
self.assertEqual(expected, res_dict)
def test_show_nonexistent_server(self):
self.stub_out('nova.db.api.instance_metadata_get',
self.stub_out('nova.db.main.api.instance_metadata_get',
return_server_nonexistent)
req = self._get_request('/key2')
self.assertRaises(webob.exc.HTTPNotFound,
self.controller.show, req, self.uuid, 'key2')
def test_show_meta_not_found(self):
self.stub_out('nova.db.api.instance_metadata_get',
self.stub_out('nova.db.main.api.instance_metadata_get',
return_empty_server_metadata)
req = self._get_request('/key6')
self.assertRaises(webob.exc.HTTPNotFound,
self.controller.show, req, self.uuid, 'key6')
def test_delete(self):
self.stub_out('nova.db.api.instance_metadata_get',
self.stub_out('nova.db.main.api.instance_metadata_get',
return_server_metadata)
self.stub_out('nova.db.api.instance_metadata_delete',
self.stub_out('nova.db.main.api.instance_metadata_delete',
delete_server_metadata)
req = self._get_request('/key2')
req.method = 'DELETE'
@ -179,7 +179,7 @@ class ServerMetaDataTestV21(test.TestCase):
self.controller.delete, req, self.uuid, 'key1')
def test_delete_meta_not_found(self):
self.stub_out('nova.db.api.instance_metadata_get',
self.stub_out('nova.db.main.api.instance_metadata_get',
return_empty_server_metadata)
req = self._get_request('/key6')
req.method = 'DELETE'
@ -203,7 +203,7 @@ class ServerMetaDataTestV21(test.TestCase):
self.assertEqual(body, res_dict)
def test_create_empty_body(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = self._get_request()
req.method = 'POST'
@ -213,7 +213,7 @@ class ServerMetaDataTestV21(test.TestCase):
self.controller.create, req, self.uuid, body=None)
def test_create_item_empty_key(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = self._get_request('/key1')
req.method = 'PUT'
@ -225,7 +225,7 @@ class ServerMetaDataTestV21(test.TestCase):
self.controller.create, req, self.uuid, body=body)
def test_create_item_non_dict(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = self._get_request('/key1')
req.method = 'PUT'
@ -237,7 +237,7 @@ class ServerMetaDataTestV21(test.TestCase):
self.controller.create, req, self.uuid, body=body)
def test_create_item_key_too_long(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = self._get_request('/key1')
req.method = 'PUT'
@ -250,7 +250,7 @@ class ServerMetaDataTestV21(test.TestCase):
req, self.uuid, body=body)
def test_create_malformed_container(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = fakes.HTTPRequest.blank(self.url + '/key1')
req.method = 'PUT'
@ -262,7 +262,7 @@ class ServerMetaDataTestV21(test.TestCase):
self.controller.create, req, self.uuid, body=body)
def test_create_malformed_data(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = fakes.HTTPRequest.blank(self.url + '/key1')
req.method = 'PUT'
@ -329,7 +329,7 @@ class ServerMetaDataTestV21(test.TestCase):
self.assertEqual(expected, res_dict)
def test_update_all_empty_body_item(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = fakes.HTTPRequest.blank(self.url + '/key1')
req.method = 'PUT'
@ -340,7 +340,7 @@ class ServerMetaDataTestV21(test.TestCase):
body=None)
def test_update_all_with_non_dict_item(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = fakes.HTTPRequest.blank(self.url + '/bad')
req.method = 'PUT'
@ -353,7 +353,7 @@ class ServerMetaDataTestV21(test.TestCase):
body=body)
def test_update_all_malformed_container(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = self._get_request()
req.method = 'PUT'
@ -366,7 +366,7 @@ class ServerMetaDataTestV21(test.TestCase):
body=expected)
def test_update_all_malformed_data(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = self._get_request()
req.method = 'PUT'
@ -392,7 +392,7 @@ class ServerMetaDataTestV21(test.TestCase):
body=body)
def test_update_all_non_dict(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = self._get_request()
req.method = 'PUT'
@ -428,7 +428,7 @@ class ServerMetaDataTestV21(test.TestCase):
body=body)
def test_update_item_empty_body(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = self._get_request('/key1')
req.method = 'PUT'
@ -439,7 +439,7 @@ class ServerMetaDataTestV21(test.TestCase):
body=None)
def test_update_malformed_container(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = fakes.HTTPRequest.blank(self.url)
req.method = 'PUT'
@ -452,7 +452,7 @@ class ServerMetaDataTestV21(test.TestCase):
body=expected)
def test_update_malformed_data(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = fakes.HTTPRequest.blank(self.url)
req.method = 'PUT'
@ -465,7 +465,7 @@ class ServerMetaDataTestV21(test.TestCase):
body=expected)
def test_update_item_empty_key(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = self._get_request('/key1')
req.method = 'PUT'
@ -478,7 +478,7 @@ class ServerMetaDataTestV21(test.TestCase):
body=body)
def test_update_item_key_too_long(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = self._get_request('/key1')
req.method = 'PUT'
@ -491,7 +491,7 @@ class ServerMetaDataTestV21(test.TestCase):
req, self.uuid, ("a" * 260), body=body)
def test_update_item_value_too_long(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = self._get_request('/key1')
req.method = 'PUT'
@ -504,7 +504,7 @@ class ServerMetaDataTestV21(test.TestCase):
req, self.uuid, "key1", body=body)
def test_update_item_too_many_keys(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = self._get_request('/key1')
req.method = 'PUT'
@ -517,7 +517,7 @@ class ServerMetaDataTestV21(test.TestCase):
body=body)
def test_update_item_body_uri_mismatch(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = self._get_request('/bad')
req.method = 'PUT'
@ -530,7 +530,7 @@ class ServerMetaDataTestV21(test.TestCase):
body=body)
def test_update_item_non_dict(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = self._get_request('/bad')
req.method = 'PUT'
@ -556,7 +556,7 @@ class ServerMetaDataTestV21(test.TestCase):
body=expected)
def test_too_many_metadata_items_on_create(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
data = {"metadata": {}}
for num in range(CONF.quota.metadata_items + 1):
@ -570,7 +570,7 @@ class ServerMetaDataTestV21(test.TestCase):
self.controller.create, req, self.uuid, body=data)
def test_invalid_metadata_items_on_create(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = self._get_request()
req.method = 'POST'
@ -595,7 +595,7 @@ class ServerMetaDataTestV21(test.TestCase):
self.controller.create, req, self.uuid, body=data)
def test_too_many_metadata_items_on_update_item(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
data = {"metadata": {}}
for num in range(CONF.quota.metadata_items + 1):
@ -609,7 +609,7 @@ class ServerMetaDataTestV21(test.TestCase):
req, self.uuid, body=data)
def test_invalid_metadata_items_on_update_item(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
data = {"metadata": {}}
for num in range(CONF.quota.metadata_items + 1):
@ -645,14 +645,14 @@ class BadStateServerMetaDataTestV21(test.TestCase):
def setUp(self):
super(BadStateServerMetaDataTestV21, self).setUp()
self.stub_out('nova.db.api.instance_metadata_get',
self.stub_out('nova.db.main.api.instance_metadata_get',
return_server_metadata)
self.stub_out('nova.compute.api.API.get',
fakes.fake_compute_get(
**{'uuid': '0cc3346e-9fef-4445-abe6-5d2b2690ec64',
'name': 'fake',
'vm_state': vm_states.BUILDING}))
self.stub_out('nova.db.api.instance_metadata_delete',
self.stub_out('nova.db.main.api.instance_metadata_delete',
delete_server_metadata)
self._set_up_resources()
@ -672,7 +672,7 @@ class BadStateServerMetaDataTestV21(test.TestCase):
req, self.uuid, 'key2')
def test_invalid_state_on_update_metadata(self):
self.stub_out('nova.db.api.instance_metadata_update',
self.stub_out('nova.db.main.api.instance_metadata_update',
return_create_instance_metadata)
req = self._get_request()
req.method = 'POST'

View File

@ -18,7 +18,7 @@ import webob
from nova.api.openstack.compute import servers
from nova.compute import api as compute_api
from nova.db import api as db
from nova.db.main import api as db
from nova import exception
from nova import test
from nova.tests import fixtures as nova_fixtures
@ -32,7 +32,7 @@ class ServerStartStopTestV21(test.TestCase):
self._setup_controller()
self.req = fakes.HTTPRequest.blank('')
self.useFixture(nova_fixtures.SingleCellSimple())
self.stub_out('nova.db.api.instance_get_by_uuid',
self.stub_out('nova.db.main.api.instance_get_by_uuid',
fakes.fake_instance_get(
project_id=fakes.FAKE_PROJECT_ID))

View File

@ -17,7 +17,7 @@ from nova.api.openstack.compute import server_tags
from nova.api.openstack.compute import servers
from nova.compute import vm_states
from nova import context
from nova.db.sqlalchemy import models
from nova.db.main import models
from nova import exception
from nova import objects
from nova.objects import instance
@ -68,7 +68,7 @@ class ServerTagsTest(test.TestCase):
request.method = method
return request
@mock.patch('nova.db.api.instance_tag_exists')
@mock.patch('nova.db.main.api.instance_tag_exists')
def test_show(self, mock_exists):
mock_exists.return_value = True
req = self._get_request(
@ -78,7 +78,7 @@ class ServerTagsTest(test.TestCase):
self.controller.show(req, UUID, TAG1)
mock_exists.assert_called_once_with(mock.ANY, UUID, TAG1)
@mock.patch('nova.db.api.instance_tag_get_by_instance_uuid')
@mock.patch('nova.db.main.api.instance_tag_get_by_instance_uuid')
def test_index(self, mock_db_get_inst_tags):
fake_tags = [self._get_tag(tag) for tag in TAGS]
mock_db_get_inst_tags.return_value = fake_tags
@ -91,7 +91,7 @@ class ServerTagsTest(test.TestCase):
mock_db_get_inst_tags.assert_called_once_with(mock.ANY, UUID)
@mock.patch('nova.notifications.base.send_instance_update_notification')
@mock.patch('nova.db.api.instance_tag_set')
@mock.patch('nova.db.main.api.instance_tag_set')
def test_update_all(self, mock_db_set_inst_tags, mock_notify):
self.stub_out('nova.api.openstack.common.get_instance', return_server)
fake_tags = [self._get_tag(tag) for tag in TAGS]
@ -162,7 +162,7 @@ class ServerTagsTest(test.TestCase):
self.assertRaises(exc.HTTPConflict, self.controller.update_all,
req, UUID, body={'tags': TAGS})
@mock.patch('nova.db.api.instance_tag_exists')
@mock.patch('nova.db.main.api.instance_tag_exists')
def test_show_non_existing_tag(self, mock_exists):
mock_exists.return_value = False
req = self._get_request(
@ -172,8 +172,8 @@ class ServerTagsTest(test.TestCase):
req, UUID, TAG1)
@mock.patch('nova.notifications.base.send_instance_update_notification')
@mock.patch('nova.db.api.instance_tag_add')
@mock.patch('nova.db.api.instance_tag_get_by_instance_uuid')
@mock.patch('nova.db.main.api.instance_tag_add')
@mock.patch('nova.db.main.api.instance_tag_get_by_instance_uuid')
def test_update(self, mock_db_get_inst_tags, mock_db_add_inst_tags,
mock_notify):
self.stub_out('nova.api.openstack.common.get_instance', return_server)
@ -192,7 +192,7 @@ class ServerTagsTest(test.TestCase):
self.assertEqual(2, mock_db_get_inst_tags.call_count)
self.assertEqual(1, mock_notify.call_count)
@mock.patch('nova.db.api.instance_tag_get_by_instance_uuid')
@mock.patch('nova.db.main.api.instance_tag_get_by_instance_uuid')
def test_update_existing_tag(self, mock_db_get_inst_tags):
self.stub_out('nova.api.openstack.common.get_instance', return_server)
mock_db_get_inst_tags.return_value = [self._get_tag(TAG1)]
@ -206,7 +206,7 @@ class ServerTagsTest(test.TestCase):
self.assertEqual(0, len(res.body))
mock_db_get_inst_tags.assert_called_once_with(mock.ANY, UUID)
@mock.patch('nova.db.api.instance_tag_get_by_instance_uuid')
@mock.patch('nova.db.main.api.instance_tag_get_by_instance_uuid')
def test_update_tag_limit_exceed(self, mock_db_get_inst_tags):
self.stub_out('nova.api.openstack.common.get_instance', return_server)
fake_tags = [self._get_tag(str(i))
@ -219,7 +219,7 @@ class ServerTagsTest(test.TestCase):
self.assertRaises(exc.HTTPBadRequest, self.controller.update,
req, UUID, TAG2, body=None)
@mock.patch('nova.db.api.instance_tag_get_by_instance_uuid')
@mock.patch('nova.db.main.api.instance_tag_get_by_instance_uuid')
def test_update_too_long_tag(self, mock_db_get_inst_tags):
self.stub_out('nova.api.openstack.common.get_instance', return_server)
mock_db_get_inst_tags.return_value = []
@ -231,7 +231,7 @@ class ServerTagsTest(test.TestCase):
self.assertRaises(exc.HTTPBadRequest, self.controller.update,
req, UUID, tag, body=None)
@mock.patch('nova.db.api.instance_tag_get_by_instance_uuid')
@mock.patch('nova.db.main.api.instance_tag_get_by_instance_uuid')
def test_update_forbidden_characters(self, mock_db_get_inst_tags):
self.stub_out('nova.api.openstack.common.get_instance', return_server)
mock_db_get_inst_tags.return_value = []
@ -251,9 +251,9 @@ class ServerTagsTest(test.TestCase):
self.assertRaises(exc.HTTPConflict, self.controller.update, req, UUID,
TAG1, body=None)
@mock.patch('nova.db.api.instance_tag_get_by_instance_uuid')
@mock.patch('nova.db.main.api.instance_tag_get_by_instance_uuid')
@mock.patch('nova.notifications.base.send_instance_update_notification')
@mock.patch('nova.db.api.instance_tag_delete')
@mock.patch('nova.db.main.api.instance_tag_delete')
def test_delete(self, mock_db_delete_inst_tags, mock_notify,
mock_db_get_inst_tags):
self.stub_out('nova.api.openstack.common.get_instance', return_server)
@ -265,7 +265,7 @@ class ServerTagsTest(test.TestCase):
mock_db_get_inst_tags.assert_called_once_with(mock.ANY, UUID)
self.assertEqual(1, mock_notify.call_count)
@mock.patch('nova.db.api.instance_tag_delete')
@mock.patch('nova.db.main.api.instance_tag_delete')
def test_delete_non_existing_tag(self, mock_db_delete_inst_tags):
self.stub_out('nova.api.openstack.common.get_instance', return_server)
@ -291,7 +291,7 @@ class ServerTagsTest(test.TestCase):
TAG1)
@mock.patch('nova.notifications.base.send_instance_update_notification')
@mock.patch('nova.db.api.instance_tag_delete_all')
@mock.patch('nova.db.main.api.instance_tag_delete_all')
def test_delete_all(self, mock_db_delete_inst_tags, mock_notify):
self.stub_out('nova.api.openstack.common.get_instance', return_server)
req = self._get_request('/v2/%s/servers/%s/tags' % (

View File

@ -52,8 +52,8 @@ from nova.compute import vm_states
import nova.conf
from nova import context
from nova.db import constants as db_const
from nova.db.sqlalchemy import api as db_api
from nova.db.sqlalchemy import models
from nova.db.main import api as db
from nova.db.main import models
from nova import exception
from nova.image import glance
from nova import objects
@ -241,9 +241,9 @@ class ControllerTest(test.TestCase):
compute_api.API, 'get_all', side_effect=return_servers)).mock
self.mock_get = self.useFixture(fixtures.MockPatchObject(
compute_api.API, 'get', side_effect=return_server)).mock
self.stub_out('nova.db.api.instance_update_and_get_original',
self.stub_out('nova.db.main.api.instance_update_and_get_original',
instance_update_and_get_original)
self.stub_out('nova.db.api.'
self.stub_out('nova.db.main.api.'
'block_device_mapping_get_all_by_instance_uuids',
fake_bdms_get_all_by_instance_uuids)
self.stub_out('nova.objects.InstanceMappingList.'
@ -2923,7 +2923,8 @@ class ServersControllerDeleteTest(ControllerTest):
self.server_delete_called = True
deleted_at = timeutils.utcnow()
return fake_instance.fake_db_instance(deleted_at=deleted_at)
self.stub_out('nova.db.api.instance_destroy', instance_destroy_mock)
self.stub_out(
'nova.db.main.api.instance_destroy', instance_destroy_mock)
self.controller.delete(req, FAKE_UUID)
# delete() should be called for instance which has never been active,
@ -3258,7 +3259,7 @@ class ServersControllerRebuildInstanceTest(ControllerTest):
self.controller._stop_server, req, FAKE_UUID, body)
@mock.patch(
'nova.db.api.instance_get_by_uuid',
'nova.db.main.api.instance_get_by_uuid',
fake_instance_get_by_uuid_not_found)
def test_start_with_bogus_id(self):
req = fakes.HTTPRequestV21.blank(self.path_action % 'test_inst')
@ -3267,7 +3268,7 @@ class ServersControllerRebuildInstanceTest(ControllerTest):
self.controller._start_server, req, 'test_inst', body)
@mock.patch(
'nova.db.api.instance_get_by_uuid',
'nova.db.main.api.instance_get_by_uuid',
fake_instance_get_by_uuid_not_found)
def test_stop_with_bogus_id(self):
req = fakes.HTTPRequestV21.blank(self.path_action % 'test_inst')
@ -3336,7 +3337,7 @@ class ServersControllerRebuildTestV254(ServersControllerRebuildInstanceTest):
def test_rebuild_user_has_no_key_pair(self):
def no_key_pair(context, user_id, name):
raise exception.KeypairNotFound(user_id=user_id, name=name)
self.stub_out('nova.db.api.key_pair_get', no_key_pair)
self.stub_out('nova.db.main.api.key_pair_get', no_key_pair)
fake_get = fakes.fake_compute_get(vm_state=vm_states.ACTIVE,
key_name=None,
project_id=self.req_project_id,
@ -3478,7 +3479,7 @@ class ServersControllerRebuildTestV257(ServersControllerRebuildTestV254):
self.assertIn('user_data', str(ex))
@mock.patch.object(context.RequestContext, 'can')
@mock.patch('nova.db.api.instance_update_and_get_original')
@mock.patch('nova.db.main.api.instance_update_and_get_original')
def test_rebuild_reset_user_data(self, mock_update, mock_policy):
"""Tests that passing user_data=None resets the user_data on the
instance.
@ -3806,7 +3807,7 @@ class ServersControllerUpdateTest(ControllerTest):
req, FAKE_UUID, body=body)
def test_update_server_name_all_blank_spaces(self):
self.stub_out('nova.db.api.instance_get',
self.stub_out('nova.db.main.api.instance_get',
fakes.fake_instance_get(name='server_test'))
req = fakes.HTTPRequest.blank(self.path_with_id % FAKE_UUID)
req.method = 'PUT'
@ -3822,7 +3823,7 @@ class ServersControllerUpdateTest(ControllerTest):
self.controller.update(req, FAKE_UUID, body=body)
def test_update_server_name_with_leading_trailing_spaces(self):
self.stub_out('nova.db.api.instance_get',
self.stub_out('nova.db.main.api.instance_get',
fakes.fake_instance_get(name='server_test'))
req = fakes.HTTPRequest.blank(self.path_with_id % FAKE_UUID)
req.method = 'PUT'
@ -5494,7 +5495,7 @@ class ServersControllerCreateTest(test.TestCase):
mock_get_all_p.return_value = {'project_id': fakes.FAKE_PROJECT_ID}
mock_get_all_pu.return_value = {'project_id': fakes.FAKE_PROJECT_ID,
'user_id': 'fake_user'}
if resource in db_api.PER_PROJECT_QUOTAS:
if resource in db.PER_PROJECT_QUOTAS:
mock_get_all_p.return_value[resource] = quota
else:
mock_get_all_pu.return_value[resource] = quota
@ -5550,7 +5551,8 @@ class ServersControllerCreateTest(test.TestCase):
return fakes.stub_instance(1)
mock_limit_check.side_effect = fake_limit_check
self.stub_out('nova.db.api.instance_destroy', fake_instance_destroy)
self.stub_out(
'nova.db.main.api.instance_destroy', fake_instance_destroy)
self.body['os:scheduler_hints'] = {'group': fake_group.uuid}
self.req.body = jsonutils.dump_as_bytes(self.body)
expected_msg = "Quota exceeded, too many servers in group"
@ -5573,7 +5575,8 @@ class ServersControllerCreateTest(test.TestCase):
def fake_instance_destroy(context, uuid, constraint):
return fakes.stub_instance(1)
self.stub_out('nova.db.api.instance_destroy', fake_instance_destroy)
self.stub_out(
'nova.db.main.api.instance_destroy', fake_instance_destroy)
self.body['os:scheduler_hints'] = {'group': test_group.uuid}
self.req.body = jsonutils.dump_as_bytes(self.body)
server = self.controller.create(self.req, body=self.body).obj['server']
@ -5613,7 +5616,8 @@ class ServersControllerCreateTest(test.TestCase):
def fake_instance_destroy(context, uuid, constraint):
return fakes.stub_instance(1)
self.stub_out('nova.db.api.instance_destroy', fake_instance_destroy)
self.stub_out(
'nova.db.main.api.instance_destroy', fake_instance_destroy)
self.body['os:scheduler_hints'] = {
'group': '5b674f73-c8cf-40ef-9965-3b6fe4b304b1'}
self.req.body = jsonutils.dump_as_bytes(self.body)
@ -7102,7 +7106,7 @@ class ServersViewBuilderTest(test.TestCase):
fakes.stub_out_secgroup_api(
self, security_groups=[{'name': 'default'}])
self.stub_out('nova.db.api.'
self.stub_out('nova.db.main.api.'
'block_device_mapping_get_all_by_instance_uuids',
fake_bdms_get_all_by_instance_uuids)
self.stub_out('nova.objects.InstanceMappingList.'

View File

@ -191,9 +191,9 @@ class ServicesTestV21(test.TestCase):
mock.Mock(side_effect=fake_service_get_all(fake_services_list)))
self.useFixture(utils_fixture.TimeFixture(fake_utcnow()))
self.stub_out('nova.db.api.service_get_by_host_and_binary',
self.stub_out('nova.db.main.api.service_get_by_host_and_binary',
fake_db_service_get_by_host_binary(fake_services_list))
self.stub_out('nova.db.api.service_update',
self.stub_out('nova.db.main.api.service_update',
fake_db_service_update(fake_services_list))
# NOTE(gibi): enable / disable a compute service tries to call
@ -595,7 +595,7 @@ class ServicesTestV21(test.TestCase):
self.assertIsNone(values['disabled_reason'])
return dict(test_service.fake_service, id=service_id, **values)
self.stub_out('nova.db.api.service_update', _service_update)
self.stub_out('nova.db.main.api.service_update', _service_update)
body = {'host': 'host1', 'binary': 'nova-compute'}
res_dict = self.controller.update(self.req, "enable", body=body)

View File

@ -33,7 +33,7 @@ from nova.compute import flavors
from nova.compute import vm_states
import nova.conf
from nova import context
from nova.db.sqlalchemy import models
from nova.db.main import models
from nova import exception as exc
from nova import objects
from nova.objects import base
@ -105,10 +105,12 @@ def stub_out_key_pair_funcs(testcase, have_key_pair=True, **kwargs):
return []
if have_key_pair:
testcase.stub_out('nova.db.api.key_pair_get_all_by_user', key_pair)
testcase.stub_out('nova.db.api.key_pair_get', one_key_pair)
testcase.stub_out(
'nova.db.main.api.key_pair_get_all_by_user', key_pair)
testcase.stub_out('nova.db.main.api.key_pair_get', one_key_pair)
else:
testcase.stub_out('nova.db.api.key_pair_get_all_by_user', no_key_pair)
testcase.stub_out(
'nova.db.main.api.key_pair_get_all_by_user', no_key_pair)
def stub_out_trusted_certs(test, certs=None):

View File

@ -46,7 +46,7 @@ document_root = /tmp
self.useFixture(config_fixture.Config())
@mock.patch('sys.argv', return_value=mock.sentinel.argv)
@mock.patch('nova.db.sqlalchemy.api.configure')
@mock.patch('nova.db.main.api.configure')
@mock.patch('nova.api.openstack.wsgi_app._setup_service')
@mock.patch('nova.api.openstack.wsgi_app._get_config_files')
def test_init_application_called_twice(self, mock_get_files, mock_setup,

View File

@ -24,23 +24,12 @@ import fixtures
import mock
from nova.cmd import common as cmd_common
from nova.db import api
from nova import exception
from nova import test
class TestCmdCommon(test.NoDBTestCase):
@mock.patch.object(cmd_common, 'LOG')
@mock.patch.object(api, 'IMPL')
def test_block_db_access(self, mock_db_IMPL, mock_LOG):
cmd_common.block_db_access('unit-tests')
self.assertEqual(api.IMPL, api.IMPL.foo)
self.assertRaises(exception.DBNotAllowed, api.IMPL)
self.assertEqual('unit-tests',
mock_LOG.error.call_args[0][1]['service_name'])
def test_args_decorator(self):
@cmd_common.args(bar='<bar>')
@cmd_common.args('foo')

Some files were not shown because too many files have changed in this diff Show More