config options: centralize section "database" + "api_database"

The config options of the "nova.conf" section "database" and
"api_database" got moved to the new central location
"nova/conf/database.py". Also the database related options which are
in DEFAULT section.

Follow up changes will improve the help texts.

bp centralize-config-options-newton

Change-Id: Iaba9b49490fea4950bb25eed3ba1252db206f3c9
This commit is contained in:
Markus Zoeller
2016-05-03 17:39:10 +02:00
committed by John Garbutt
parent 9a05d38f48
commit 2811ff43af
7 changed files with 131 additions and 97 deletions

View File

@@ -37,7 +37,7 @@ from nova.conf import consoleauth
# from nova.conf import cors # from nova.conf import cors
# from nova.conf import cors.subdomain # from nova.conf import cors.subdomain
from nova.conf import crypto from nova.conf import crypto
# from nova.conf import database from nova.conf import database
# from nova.conf import disk # from nova.conf import disk
from nova.conf import ephemeral_storage from nova.conf import ephemeral_storage
from nova.conf import floating_ips from nova.conf import floating_ips
@@ -110,7 +110,7 @@ consoleauth.register_opts(CONF)
# cors.register_opts(CONF) # cors.register_opts(CONF)
# cors.subdomain.register_opts(CONF) # cors.subdomain.register_opts(CONF)
crypto.register_opts(CONF) crypto.register_opts(CONF)
# database.register_opts(CONF) database.register_opts(CONF)
# disk.register_opts(CONF) # disk.register_opts(CONF)
ephemeral_storage.register_opts(CONF) ephemeral_storage.register_opts(CONF)
floating_ips.register_opts(CONF) floating_ips.register_opts(CONF)

View File

@@ -309,6 +309,23 @@ whenever an RPC call to the compute service is made.
"""), """),
] ]
db_opts = [
cfg.StrOpt('osapi_compute_unique_server_name_scope',
default='',
help='When set, compute API will consider duplicate hostnames '
'invalid within the specified scope, regardless of case. '
'Should be empty, "project" or "global".'),
cfg.BoolOpt('enable_new_services',
default=True,
help='Services to be added to the available pool on create'),
cfg.StrOpt('instance_name_template',
default='instance-%08x',
help='Template string to be used to generate instance names'),
cfg.StrOpt('snapshot_name_template',
default='snapshot-%s',
help='Template string to be used to generate snapshot names'),
]
ALL_OPTS = list(itertools.chain( ALL_OPTS = list(itertools.chain(
compute_opts, compute_opts,
resource_tracker_opts, resource_tracker_opts,
@@ -319,6 +336,7 @@ ALL_OPTS = list(itertools.chain(
running_deleted_opts, running_deleted_opts,
instance_cleaning_opts, instance_cleaning_opts,
rpcapi_opts, rpcapi_opts,
db_opts,
)) ))

106
nova/conf/database.py Normal file
View File

@@ -0,0 +1,106 @@
# Copyright 2015 OpenStack Foundation
# All Rights Reserved.
#
# 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.
from oslo_config import cfg
from oslo_db import options as oslo_db_options
# NOTE(sdague): we know of at least 1 instance of out of tree usage
# for this config in RAX. They used this because of performance issues
# with some queries. We think the right path forward is fixing the
# SQLA queries to be more performant for everyone.
db_driver_opt = cfg.StrOpt(
'db_driver',
default='nova.db',
help='DEPRECATED: The driver to use for database access',
deprecated_for_removal=True)
# NOTE(markus_z): We cannot simply do:
# conf.register_opts(oslo_db_options.database_opts, 'api_database')
# If we reuse a db config option for two different groups ("api_database"
# and "database") and deprecate or rename a config option in one of these
# groups, "oslo.config" cannot correctly determine which one to update.
# That's why we copied & pasted these config options for the "api_database"
# group here. See commit ba407e3 ("Add support for multiple database engines")
# for more details.
api_db_opts = [
cfg.StrOpt('connection',
help='The SQLAlchemy connection string to use to connect to '
'the Nova API database.',
secret=True),
cfg.BoolOpt('sqlite_synchronous',
default=True,
help='If True, SQLite uses synchronous mode.'),
cfg.StrOpt('slave_connection',
secret=True,
help='The SQLAlchemy connection string to use to connect to the'
' slave database.'),
cfg.StrOpt('mysql_sql_mode',
default='TRADITIONAL',
help='The SQL mode to be used for MySQL sessions. '
'This option, including the default, overrides any '
'server-set SQL mode. To use whatever SQL mode '
'is set by the server configuration, '
'set this to no value. Example: mysql_sql_mode='),
cfg.IntOpt('idle_timeout',
default=3600,
help='Timeout before idle SQL connections are reaped.'),
cfg.IntOpt('max_pool_size',
help='Maximum number of SQL connections to keep open in a '
'pool.'),
cfg.IntOpt('max_retries',
default=10,
help='Maximum number of database connection retries '
'during startup. Set to -1 to specify an infinite '
'retry count.'),
cfg.IntOpt('retry_interval',
default=10,
help='Interval between retries of opening a SQL connection.'),
cfg.IntOpt('max_overflow',
help='If set, use this value for max_overflow with '
'SQLAlchemy.'),
cfg.IntOpt('connection_debug',
default=0,
help='Verbosity of SQL debugging information: 0=None, '
'100=Everything.'),
cfg.BoolOpt('connection_trace',
default=False,
help='Add Python stack traces to SQL as comment strings.'),
cfg.IntOpt('pool_timeout',
help='If set, use this value for pool_timeout with '
'SQLAlchemy.'),
]
def register_opts(conf):
conf.register_opts(oslo_db_options.database_opts, 'database')
conf.register_opt(db_driver_opt)
conf.register_opts(api_db_opts, group='api_database')
def list_opts():
# NOTE(markus_z): 2016-04-04: If we list the oslo_db_options here, they
# get emitted twice(!) in the "sample.conf" file. First
# under the namespace "nova.conf" and second under the
# namespace "oslo.db". This is due to the setting in file
# "etc/nova/nova-config-generator.conf". As I think it
# is useful to have the "oslo.db" namespace information
# in the "sample.conf" file, I omit the listing of the
# "oslo_db_options" here.
return {'DEFAULT': [db_driver_opt],
'api_database': api_db_opts,
}

View File

@@ -27,28 +27,15 @@ these objects be simple dictionaries.
""" """
from oslo_config import cfg
from oslo_db import concurrency from oslo_db import concurrency
from oslo_log import log as logging from oslo_log import log as logging
from nova.cells import rpcapi as cells_rpcapi from nova.cells import rpcapi as cells_rpcapi
import nova.conf
from nova.i18n import _LE from nova.i18n import _LE
db_opts = [ CONF = nova.conf.CONF
cfg.BoolOpt('enable_new_services',
default=True,
help='Services to be added to the available pool on create'),
cfg.StrOpt('instance_name_template',
default='instance-%08x',
help='Template string to be used to generate instance names'),
cfg.StrOpt('snapshot_name_template',
default='snapshot-%s',
help='Template string to be used to generate snapshot names'),
]
CONF = cfg.CONF
CONF.register_opts(db_opts)
_BACKEND_MAPPING = {'sqlalchemy': 'nova.db.sqlalchemy.api'} _BACKEND_MAPPING = {'sqlalchemy': 'nova.db.sqlalchemy.api'}

View File

@@ -16,22 +16,12 @@
"""Base class for classes that need modular database access.""" """Base class for classes that need modular database access."""
from oslo_config import cfg
from oslo_utils import importutils from oslo_utils import importutils
# NOTE(sdague): we know of at least 1 instance of out of tree usage import nova.conf
# for this config in RAX. They used this because of performance issues
# with some queries. We think the right path forward is fixing the
# SQLA queries to be more performant for everyone.
db_driver_opt = cfg.StrOpt(
'db_driver',
default='nova.db',
help='DEPRECATED: The driver to use for database access',
deprecated_for_removal=True)
CONF = cfg.CONF CONF = nova.conf.CONF
CONF.register_opt(db_driver_opt)
class Base(object): class Base(object):

View File

@@ -25,10 +25,8 @@ import inspect
import sys import sys
import uuid import uuid
from oslo_config import cfg
from oslo_db import api as oslo_db_api from oslo_db import api as oslo_db_api
from oslo_db import exception as db_exc from oslo_db import exception as db_exc
from oslo_db import options as oslo_db_options
from oslo_db.sqlalchemy import enginefacade from oslo_db.sqlalchemy import enginefacade
from oslo_db.sqlalchemy import update_match from oslo_db.sqlalchemy import update_match
from oslo_db.sqlalchemy import utils as sqlalchemyutils from oslo_db.sqlalchemy import utils as sqlalchemyutils
@@ -70,66 +68,9 @@ from nova.objects import fields
from nova import quota from nova import quota
from nova import safe_utils from nova import safe_utils
db_opts = [
cfg.StrOpt('osapi_compute_unique_server_name_scope',
default='',
help='When set, compute API will consider duplicate hostnames '
'invalid within the specified scope, regardless of case. '
'Should be empty, "project" or "global".'),
]
api_db_opts = [
cfg.StrOpt('connection',
help='The SQLAlchemy connection string to use to connect to '
'the Nova API database.',
secret=True),
cfg.BoolOpt('sqlite_synchronous',
default=True,
help='If True, SQLite uses synchronous mode.'),
cfg.StrOpt('slave_connection',
secret=True,
help='The SQLAlchemy connection string to use to connect to the'
' slave database.'),
cfg.StrOpt('mysql_sql_mode',
default='TRADITIONAL',
help='The SQL mode to be used for MySQL sessions. '
'This option, including the default, overrides any '
'server-set SQL mode. To use whatever SQL mode '
'is set by the server configuration, '
'set this to no value. Example: mysql_sql_mode='),
cfg.IntOpt('idle_timeout',
default=3600,
help='Timeout before idle SQL connections are reaped.'),
cfg.IntOpt('max_pool_size',
help='Maximum number of SQL connections to keep open in a '
'pool.'),
cfg.IntOpt('max_retries',
default=10,
help='Maximum number of database connection retries '
'during startup. Set to -1 to specify an infinite '
'retry count.'),
cfg.IntOpt('retry_interval',
default=10,
help='Interval between retries of opening a SQL connection.'),
cfg.IntOpt('max_overflow',
help='If set, use this value for max_overflow with '
'SQLAlchemy.'),
cfg.IntOpt('connection_debug',
default=0,
help='Verbosity of SQL debugging information: 0=None, '
'100=Everything.'),
cfg.BoolOpt('connection_trace',
default=False,
help='Add Python stack traces to SQL as comment strings.'),
cfg.IntOpt('pool_timeout',
help='If set, use this value for pool_timeout with '
'SQLAlchemy.'),
]
CONF = nova.conf.CONF CONF = nova.conf.CONF
CONF.register_opts(db_opts)
CONF.register_opts(oslo_db_options.database_opts, 'database')
CONF.register_opts(api_db_opts, group='api_database')
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)

View File

@@ -21,9 +21,6 @@ import nova.conf
import nova.console.rpcapi import nova.console.rpcapi
import nova.console.serial import nova.console.serial
import nova.consoleauth.rpcapi import nova.consoleauth.rpcapi
import nova.db.api
import nova.db.base
import nova.db.sqlalchemy.api
import nova.exception import nova.exception
import nova.image.download.file import nova.image.download.file
import nova.volume import nova.volume
@@ -33,12 +30,7 @@ def list_opts():
return [ return [
('DEFAULT', ('DEFAULT',
itertools.chain( itertools.chain(
[nova.db.base.db_driver_opt],
nova.db.api.db_opts,
nova.db.sqlalchemy.api.db_opts,
nova.exception.exc_log_opts, nova.exception.exc_log_opts,
nova.volume._volume_opts, nova.volume._volume_opts,
)), )),
('api_database', nova.db.sqlalchemy.api.api_db_opts),
('database', nova.db.sqlalchemy.api.oslo_db_options.database_opts),
] ]