Support customizing oslo.db options

Gnocchi uses oslo.db internally when mysql or PostgreSQL is used as
the indexer backend. Expose oslo.db options so that users can customize
some of these options for tunings.

Change-Id: I248a7ab2287c8252478b25f020fc5e5f5e653813
This commit is contained in:
Takashi Kajinami 2024-10-28 02:28:56 +09:00
parent 7929bd422d
commit 67d29a9f29
3 changed files with 118 additions and 5 deletions

View File

@ -4,24 +4,92 @@
#
# === Parameters
#
# [*database_db_max_retries*]
# (optional) Maximum retries in case of connection error or deadlock error
# before error is raised. Set to -1 to specify an infinite retry count.
# Defaults to $facts['os_service_default']
#
# [*database_connection*]
# Url used to connect to database.
# (Optional) Defaults to 'sqlite:////var/lib/gnocchi/gnocchi.sqlite'.
#
# [*slave_connection*]
# (optional) Connection url to connect to aodh slave database (read-only).
# Defaults to $facts['os_service_default'].
#
# [*database_connection_recycle_time*]
# Timeout when db connections should be reaped.
# (Optional) Defaults to $facts['os_service_default'].
#
# [*database_max_pool_size*]
# Maximum number of SQL connections to keep open in a pool.
# (Optional) Defaults to $facts['os_service_default'].
#
# [*database_max_retries*]
# Maximum number of database connection retries during startup.
# Setting -1 implies an infinite retry count.
# (Optional) Defaults to $facts['os_service_default'].
#
# [*database_retry_interval*]
# Interval between retries of opening a database connection.
# (Optional) Defaults to $facts['os_service_default'].
#
# [*database_max_overflow*]
# If set, use this value for max_overflow with sqlalchemy.
# (Optional) Defaults to $facts['os_service_default'].
#
# [*database_pool_timeout*]
# (Optional) If set, use this value for pool_timeout with SQLAlchemy.
# Defaults to $facts['os_service_default']
#
# [*mysql_enable_ndb*]
# (Optional) If True, transparently enables support for handling MySQL
# Cluster (NDB).
# Defaults to $facts['os_service_default']
#
# [*package_ensure*]
# (optional) The state of gnocchi packages
# Defaults to 'present'
#
class gnocchi::db (
$database_db_max_retries = $facts['os_service_default'],
Oslo::DBconn $database_connection = 'sqlite:////var/lib/gnocchi/gnocchi.sqlite',
$slave_connection = $facts['os_service_default'],
$database_connection_recycle_time = $facts['os_service_default'],
$database_max_pool_size = $facts['os_service_default'],
$database_max_retries = $facts['os_service_default'],
$database_retry_interval = $facts['os_service_default'],
$database_max_overflow = $facts['os_service_default'],
$database_pool_timeout = $facts['os_service_default'],
$mysql_enable_ndb = $facts['os_service_default'],
$package_ensure = 'present',
) inherits gnocchi::params {
include gnocchi::deps
oslo::db { 'gnocchi_config':
db_max_retries => $database_db_max_retries,
slave_connection => $slave_connection,
connection_recycle_time => $database_connection_recycle_time,
max_pool_size => $database_max_pool_size,
max_retries => $database_max_retries,
retry_interval => $database_retry_interval,
max_overflow => $database_max_overflow,
pool_timeout => $database_pool_timeout,
mysql_enable_ndb => $mysql_enable_ndb,
manage_backend_package => false,
manage_config => true,
}
# NOTE(tkajinam): Gnocchi does not use [database] connection but use
# [indexer] url to obtain database connection url. So
# database_connection is used separately only to determine
# the required dependencies we should install.
oslo::db { 'gnocchi_config_connection':
config => 'gnocchi_config',
connection => $database_connection,
backend_package_ensure => $package_ensure,
manage_backend_package => true,
manage_config => false,
}
@ -32,4 +100,5 @@ class gnocchi::db (
# all db settings should be applied and all packages should be installed
# before dbsync starts
Oslo::Db['gnocchi_config'] -> Anchor['gnocchi::dbsync::begin']
Oslo::Db['gnocchi_config_connection'] -> Anchor['gnocchi::dbsync::begin']
}

View File

@ -0,0 +1,4 @@
---
features:
- |
The ``gnocchi::db`` class now supports customizing oslo.db options.

View File

@ -6,9 +6,25 @@ describe 'gnocchi::db' do
it { should contain_class('gnocchi::deps') }
it { should contain_oslo__db('gnocchi_config').with(
:connection => 'sqlite:////var/lib/gnocchi/gnocchi.sqlite',
:manage_config => false,
:db_max_retries => '<SERVICE DEFAULT>',
:connection_recycle_time => '<SERVICE DEFAULT>',
:max_pool_size => '<SERVICE DEFAULT>',
:max_retries => '<SERVICE DEFAULT>',
:retry_interval => '<SERVICE DEFAULT>',
:max_overflow => '<SERVICE DEFAULT>',
:pool_timeout => '<SERVICE DEFAULT>',
:mysql_enable_ndb => '<SERVICE DEFAULT>',
:manage_backend_package => false,
:manage_config => true,
)}
it { should contain_oslo__db('gnocchi_config_connection').with(
:config => 'gnocchi_config',
:connection => 'sqlite:////var/lib/gnocchi/gnocchi.sqlite',
:manage_backend_package => true,
:manage_config => false,
)}
it { should contain_gnocchi_config('indexer/url').with(
:value => 'sqlite:////var/lib/gnocchi/gnocchi.sqlite',
:secret => true,
@ -18,15 +34,39 @@ describe 'gnocchi::db' do
context 'with specific parameters' do
let :params do
{
:database_connection => 'mysql+pymysql://gnocchi:gnocchi@localhost/gnocchi'
:database_db_max_retries => '-1',
:database_connection => 'mysql+pymysql://gnocchi:gnocchi@localhost/gnocchi',
:slave_connection => 'mysql+pymysql://gnocchi:gnocchi@localhost2/gnocchi',
:database_connection_recycle_time => '3601',
:database_max_pool_size => '11',
:database_max_retries => '11',
:database_retry_interval => '11',
:database_max_overflow => '21',
:database_pool_timeout => '21',
:mysql_enable_ndb => true,
}
end
it { should contain_class('gnocchi::deps') }
it { should contain_oslo__db('gnocchi_config').with(
:connection => 'mysql+pymysql://gnocchi:gnocchi@localhost/gnocchi',
:manage_config => false,
:db_max_retries => '-1',
:slave_connection => 'mysql+pymysql://gnocchi:gnocchi@localhost2/gnocchi',
:connection_recycle_time => '3601',
:max_pool_size => '11',
:max_retries => '11',
:retry_interval => '11',
:max_overflow => '21',
:pool_timeout => '21',
:mysql_enable_ndb => true,
:manage_backend_package => false,
:manage_config => true,
)}
it { should contain_oslo__db('gnocchi_config_connection').with(
:config => 'gnocchi_config',
:connection => 'mysql+pymysql://gnocchi:gnocchi@localhost/gnocchi',
:manage_backend_package => true,
:manage_config => false,
)}
it { should contain_gnocchi_config('indexer/url').with(
:value => 'mysql+pymysql://gnocchi:gnocchi@localhost/gnocchi',