diff --git a/manifests/db.pp b/manifests/db.pp index 813fe5914..41e5873a5 100644 --- a/manifests/db.pp +++ b/manifests/db.pp @@ -21,11 +21,6 @@ # # == 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 $::os_service_default -# # [*database_connection*] # (optional) Connection url to connect to nova database. # Defaults to $::os_service_default @@ -34,14 +29,6 @@ # (optional) Connection url to connect to nova slave database (read-only). # Defaults to $::os_service_default # -# [*api_database_connection*] -# (optional) Connection url to connect to nova api database. -# Defaults to $::os_service_default -# -# [*api_slave_connection*] -# (optional) Connection url to connect to nova api slave database (read-only). -# Defaults to $::os_service_default -# # [*database_connection_recycle_time*] # Timeout when db connections should be reaped. # (Optional) Defaults to $::os_service_default @@ -67,11 +54,49 @@ # (Optional) If set, use this value for pool_timeout with SQLAlchemy. # Defaults to $::os_service_default # +# [*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 $::os_service_default +# # [*mysql_enable_ndb*] # (Optional) If True, transparently enables support for handling MySQL # Cluster (NDB). # Defaults to $::os_service_default # +# [*api_database_connection*] +# (optional) Connection url to connect to nova api database. +# Defaults to $::os_service_default +# +# [*api_slave_connection*] +# (optional) Connection url to connect to nova api slave database (read-only). +# Defaults to $::os_service_default +# +# [*api_database_connection_recycle_time*] +# Timeout when nova api db connections should be reaped. +# (Optional) Defaults to $::os_service_default +# +# [*api_database_max_pool_size*] +# Maximum number of SQL connections to keep open in a pool. +# (Optional) Defaults to $::os_service_default +# +# [*api_database_max_retries*] +# Maximum db connection retries during startup. +# Setting -1 implies an infinite retry count. +# (Optional) Defaults to $::os_service_default +# +# [*api_database_retry_interval*] +# Interval between retries of opening a sql connection. +# (Optional) Defaults to $::os_service_default +# +# [*api_database_max_overflow*] +# If set, use this value for max_overflow with sqlalchemy. +# (Optional) Defaults to $::os_service_default +# +# [*api_database_pool_timeout*] +# (Optional) If set, use this value for pool_timeout with SQLAlchemy. +# Defaults to $::os_service_default +# # DEPRECATED PARAMETERS # # [*database_min_pool_size*] @@ -79,20 +104,26 @@ # (Optional) Defaults to undef # class nova::db ( - $database_db_max_retries = $::os_service_default, - $database_connection = $::os_service_default, - $slave_connection = $::os_service_default, - $api_database_connection = $::os_service_default, - $api_slave_connection = $::os_service_default, - $database_connection_recycle_time = $::os_service_default, - $database_max_pool_size = $::os_service_default, - $database_max_retries = $::os_service_default, - $database_retry_interval = $::os_service_default, - $database_max_overflow = $::os_service_default, - $database_pool_timeout = $::os_service_default, - $mysql_enable_ndb = $::os_service_default, + $database_connection = $::os_service_default, + $slave_connection = $::os_service_default, + $database_connection_recycle_time = $::os_service_default, + $database_max_pool_size = $::os_service_default, + $database_max_retries = $::os_service_default, + $database_retry_interval = $::os_service_default, + $database_max_overflow = $::os_service_default, + $database_pool_timeout = $::os_service_default, + $database_db_max_retries = $::os_service_default, + $mysql_enable_ndb = $::os_service_default, + $api_database_connection = $::os_service_default, + $api_slave_connection = $::os_service_default, + $api_database_connection_recycle_time = $::os_service_default, + $api_database_max_pool_size = $::os_service_default, + $api_database_max_retries = $::os_service_default, + $api_database_retry_interval = $::os_service_default, + $api_database_max_overflow = $::os_service_default, + $api_database_pool_timeout = $::os_service_default, # DEPRECATED PARAMETERS - $database_min_pool_size = undef, + $database_min_pool_size = undef, ) { include nova::deps @@ -130,12 +161,18 @@ class nova::db ( if !is_service_default($api_database_connection_real) { oslo::db { 'api_database': - config => 'nova_config', - config_group => 'api_database', - connection => $api_database_connection_real, - slave_connection => $api_slave_connection_real, + config => 'nova_config', + config_group => 'api_database', + connection => $api_database_connection_real, + slave_connection => $api_slave_connection_real, + connection_recycle_time => $api_database_connection_recycle_time, + max_pool_size => $api_database_max_pool_size, + max_retries => $api_database_max_retries, + retry_interval => $api_database_retry_interval, + max_overflow => $api_database_max_overflow, + pool_timeout => $api_database_pool_timeout, # Package management should be disabled here to avoid conflict. - manage_backend_package => false + manage_backend_package => false } } diff --git a/releasenotes/notes/add_api_database_parameters-bab34198427af74b.yaml b/releasenotes/notes/add_api_database_parameters-bab34198427af74b.yaml new file mode 100644 index 000000000..b5ae3563d --- /dev/null +++ b/releasenotes/notes/add_api_database_parameters-bab34198427af74b.yaml @@ -0,0 +1,11 @@ +--- +features: + - | + Add the support to configure following parameters for api_database: + + - ``nova::db::api_database_connection_recycle_time`` + - ``nova::db::api_database_max_pool_size`` + - ``nova::db::api_database_max_retries`` + - ``nova::db::api_database_retry_interval`` + - ``nova::db::api_database_max_overflow`` + - ``nova::db::api_database_pool_timeout`` diff --git a/spec/classes/nova_db_spec.rb b/spec/classes/nova_db_spec.rb index a10ae4c77..00b4bbafb 100644 --- a/spec/classes/nova_db_spec.rb +++ b/spec/classes/nova_db_spec.rb @@ -7,33 +7,21 @@ describe 'nova::db' do shared_examples 'nova::db' do context 'with default parameters' do - it { should_not contain_nova_config('database/db_max_retries') } - it { should_not contain_nova_config('database/connection') } - it { should_not contain_nova_config('database/slave_connection') } - it { should_not contain_nova_config('api_database/connection') } - it { should_not contain_nova_config('api_database/slave_connection') } - it { should_not contain_nova_config('database/connection_recycle_time') } - it { should_not contain_nova_config('database/max_pool_size') } - it { should_not contain_nova_config('database/max_retries') } - it { should_not contain_nova_config('database/retry_interval') } - it { should_not contain_nova_config('database/max_overflow') } - it { should_not contain_nova_config('database/pool_timeout') } - it { should_not contain_nova_config('database/mysql_enable_ndb') } + it { should_not contain_oslo__db('nova_config') } + it { should_not contain_oslo__db('api_database') } end - context 'with overridden parameters' do + context 'with connection parameters' do before :each do params.merge!( - :database_connection => 'mysql+pymysql://user:pass@db/db1', - :slave_connection => 'mysql+pymysql://user:pass@slave/db1', - :api_database_connection => 'mysql+pymysql://user:pass@db/db2', - :api_slave_connection => 'mysql+pymysql://user:pass@slave/db2', + :database_connection => 'mysql+pymysql://user:pass@db/db1', + :api_database_connection => 'mysql+pymysql://user:pass@db/db2' ) end it { should contain_oslo__db('nova_config').with( :connection => 'mysql+pymysql://user:pass@db/db1', - :slave_connection => 'mysql+pymysql://user:pass@slave/db1', + :slave_connection => '', :db_max_retries => '', :connection_recycle_time => '', :max_pool_size => '', @@ -43,12 +31,68 @@ describe 'nova::db' do :pool_timeout => '', :mysql_enable_ndb => '', )} + it { should contain_oslo__db('api_database').with( + :config => 'nova_config', + :config_group => 'api_database', + :connection => 'mysql+pymysql://user:pass@db/db2', + :slave_connection => '', + :connection_recycle_time => '', + :max_pool_size => '', + :max_retries => '', + :retry_interval => '', + :max_overflow => '', + :pool_timeout => '', + )} + end + + context 'with overridden parameters' do + before :each do + params.merge!( + :database_connection => 'mysql+pymysql://user:pass@db/db1', + :slave_connection => 'mysql+pymysql://user:pass@slave/db1', + :database_connection_recycle_time => '1800', + :database_max_pool_size => '30', + :database_max_retries => '20', + :database_retry_interval => '15', + :database_max_overflow => '5', + :database_pool_timeout => '20', + :database_db_max_retries => '10', + :mysql_enable_ndb => 'true', + :api_database_connection => 'mysql+pymysql://user:pass@db/db2', + :api_slave_connection => 'mysql+pymysql://user:pass@slave/db2', + :api_database_connection_recycle_time => '600', + :api_database_max_pool_size => '20', + :api_database_max_retries => '10', + :api_database_retry_interval => '5', + :api_database_max_overflow => '0', + :api_database_pool_timeout => '30', + ) + end + + it { should contain_oslo__db('nova_config').with( + :connection => 'mysql+pymysql://user:pass@db/db1', + :slave_connection => 'mysql+pymysql://user:pass@slave/db1', + :connection_recycle_time => '1800', + :max_pool_size => '30', + :max_retries => '20', + :retry_interval => '15', + :max_overflow => '5', + :pool_timeout => '20', + :db_max_retries => '10', + :mysql_enable_ndb => 'true', + )} it { should contain_oslo__db('api_database').with( :config => 'nova_config', :config_group => 'api_database', :connection => 'mysql+pymysql://user:pass@db/db2', :slave_connection => 'mysql+pymysql://user:pass@slave/db2', + :connection_recycle_time => '600', + :max_pool_size => '20', + :max_retries => '10', + :retry_interval => '5', + :max_overflow => '0', + :pool_timeout => '30', )} end end