Skip to content

Commit 27ce82b

Browse files
authored
Merge pull request #232 from kpaulisse/kpaulisse-dbconnections
Manage the pool size configuration parameters in database.ini
2 parents 5a7d46a + 84fefe9 commit 27ce82b

6 files changed

Lines changed: 182 additions & 41 deletions

File tree

manifests/init.pp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@
7070
$temp_usage = $puppetdb::params::temp_usage,
7171
$certificate_whitelist_file = $puppetdb::params::certificate_whitelist_file,
7272
$certificate_whitelist = $puppetdb::params::certificate_whitelist,
73+
$database_max_pool_size = $puppetdb::params::database_max_pool_size,
74+
$read_database_max_pool_size = $puppetdb::params::read_database_max_pool_size,
7375
) inherits puppetdb::params {
7476

7577
class { '::puppetdb::server':
@@ -138,6 +140,8 @@
138140
temp_usage => $temp_usage,
139141
certificate_whitelist_file => $certificate_whitelist_file,
140142
certificate_whitelist => $certificate_whitelist,
143+
database_max_pool_size => $database_max_pool_size,
144+
read_database_max_pool_size => $read_database_max_pool_size,
141145
}
142146

143147
if ($database == 'postgres') {

manifests/params.pp

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,15 @@
2020
$postgres_version = '9.4'
2121

2222
# The remaining database settings are not used for an embedded database
23-
$database_host = 'localhost'
24-
$database_port = '5432'
25-
$database_name = 'puppetdb'
26-
$database_username = 'puppetdb'
27-
$database_password = 'puppetdb'
28-
$database_ssl = undef
29-
$jdbc_ssl_properties = ''
30-
$database_validate = true
23+
$database_host = 'localhost'
24+
$database_port = '5432'
25+
$database_name = 'puppetdb'
26+
$database_username = 'puppetdb'
27+
$database_password = 'puppetdb'
28+
$database_ssl = undef
29+
$jdbc_ssl_properties = ''
30+
$database_validate = true
31+
$database_max_pool_size = undef
3132

3233
# These settings manage the various auto-deactivation and auto-purge settings
3334
$node_ttl = '0s'
@@ -57,6 +58,7 @@
5758
$read_conn_max_age = '60'
5859
$read_conn_keep_alive = '45'
5960
$read_conn_lifetime = '0'
61+
$read_database_max_pool_size = undef
6062

6163
$manage_firewall = true
6264
$java_args = {}
@@ -173,4 +175,13 @@
173175
$certificate_whitelist = [ ]
174176
# change to this to only allow access by the puppet master by default:
175177
#$certificate_whitelist = [ $::servername ]
178+
179+
# Get the parameter name for the database connection pool tuning
180+
if $puppetdb_version in ['latest','present'] or versioncmp($puppetdb_version, '4.0.0') >= 0 {
181+
$database_max_pool_size_setting_name = 'maximum-pool-size'
182+
} elsif versioncmp($puppetdb_version, '2.8.0') >= 0 {
183+
$database_max_pool_size_setting_name = 'partition-conn-max'
184+
} else {
185+
$database_max_pool_size_setting_name = undef
186+
}
176187
}

manifests/server.pp

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@
6565
$temp_usage = $puppetdb::params::temp_usage,
6666
$certificate_whitelist_file = $puppetdb::params::certificate_whitelist_file,
6767
$certificate_whitelist = $puppetdb::params::certificate_whitelist,
68+
$database_max_pool_size = $puppetdb::params::database_max_pool_size,
69+
$read_database_max_pool_size = $puppetdb::params::read_database_max_pool_size,
6870
) inherits puppetdb::params {
6971
# deprecation warnings
7072
if $database_ssl != undef {
@@ -160,6 +162,7 @@
160162
database_password => $database_password,
161163
database_name => $database_name,
162164
database_ssl => $database_ssl,
165+
database_max_pool_size => $database_max_pool_size,
163166
jdbc_ssl_properties => $jdbc_ssl_properties,
164167
database_validate => $database_validate,
165168
database_embedded_path => $database_embedded_path,
@@ -178,23 +181,24 @@
178181
}
179182

180183
class { 'puppetdb::server::read_database':
181-
database => $read_database,
182-
database_host => $read_database_host,
183-
database_port => $read_database_port,
184-
database_username => $read_database_username,
185-
database_password => $read_database_password,
186-
database_name => $read_database_name,
187-
database_ssl => $read_database_ssl,
188-
jdbc_ssl_properties => $read_database_jdbc_ssl_properties,
189-
database_validate => $read_database_validate,
190-
log_slow_statements => $read_log_slow_statements,
191-
conn_max_age => $read_conn_max_age,
192-
conn_keep_alive => $read_conn_keep_alive,
193-
conn_lifetime => $read_conn_lifetime,
194-
confdir => $confdir,
195-
puppetdb_user => $puppetdb_user,
196-
puppetdb_group => $puppetdb_group,
197-
notify => Service[$puppetdb_service],
184+
database => $read_database,
185+
database_host => $read_database_host,
186+
database_port => $read_database_port,
187+
database_username => $read_database_username,
188+
database_password => $read_database_password,
189+
database_name => $read_database_name,
190+
database_ssl => $read_database_ssl,
191+
jdbc_ssl_properties => $read_database_jdbc_ssl_properties,
192+
database_validate => $read_database_validate,
193+
log_slow_statements => $read_log_slow_statements,
194+
conn_max_age => $read_conn_max_age,
195+
conn_keep_alive => $read_conn_keep_alive,
196+
conn_lifetime => $read_conn_lifetime,
197+
confdir => $confdir,
198+
puppetdb_user => $puppetdb_user,
199+
puppetdb_group => $puppetdb_group,
200+
notify => Service[$puppetdb_service],
201+
database_max_pool_size => $read_database_max_pool_size,
198202
}
199203

200204
if str2bool($ssl_set_cert_paths) == true

manifests/server/database.pp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
$confdir = $puppetdb::params::confdir,
2222
$puppetdb_user = $puppetdb::params::puppetdb_user,
2323
$puppetdb_group = $puppetdb::params::puppetdb_group,
24+
$database_max_pool_size = $puppetdb::params::database_max_pool_size,
2425
) inherits puppetdb::params {
2526

2627
if str2bool($database_validate) {
@@ -159,4 +160,18 @@
159160
setting => 'conn-lifetime',
160161
value => $conn_lifetime,
161162
}
163+
164+
if $puppetdb::params::database_max_pool_size_setting_name != undef {
165+
if $database_max_pool_size == 'absent' {
166+
ini_setting { 'puppetdb_database_max_pool_size':
167+
ensure => absent,
168+
setting => $puppetdb::params::database_max_pool_size_setting_name,
169+
}
170+
} elsif $database_max_pool_size != undef {
171+
ini_setting { 'puppetdb_database_max_pool_size':
172+
setting => $puppetdb::params::database_max_pool_size_setting_name,
173+
value => $database_max_pool_size,
174+
}
175+
}
176+
}
162177
}

manifests/server/read_database.pp

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
# PRIVATE CLASS - do not use directly
22
class puppetdb::server::read_database (
3-
$database = $puppetdb::params::read_database,
4-
$database_host = $puppetdb::params::read_database_host,
5-
$database_port = $puppetdb::params::read_database_port,
6-
$database_username = $puppetdb::params::read_database_username,
7-
$database_password = $puppetdb::params::read_database_password,
8-
$database_name = $puppetdb::params::read_database_name,
9-
$database_ssl = $puppetdb::params::read_database_ssl,
10-
$jdbc_ssl_properties = $puppetdb::params::read_database_jdbc_ssl_properties,
11-
$database_validate = $puppetdb::params::read_database_validate,
12-
$log_slow_statements = $puppetdb::params::read_log_slow_statements,
13-
$conn_max_age = $puppetdb::params::read_conn_max_age,
14-
$conn_keep_alive = $puppetdb::params::read_conn_keep_alive,
15-
$conn_lifetime = $puppetdb::params::read_conn_lifetime,
16-
$confdir = $puppetdb::params::confdir,
17-
$puppetdb_user = $puppetdb::params::puppetdb_user,
18-
$puppetdb_group = $puppetdb::params::puppetdb_group,
3+
$database = $puppetdb::params::read_database,
4+
$database_host = $puppetdb::params::read_database_host,
5+
$database_port = $puppetdb::params::read_database_port,
6+
$database_username = $puppetdb::params::read_database_username,
7+
$database_password = $puppetdb::params::read_database_password,
8+
$database_name = $puppetdb::params::read_database_name,
9+
$database_ssl = $puppetdb::params::read_database_ssl,
10+
$jdbc_ssl_properties = $puppetdb::params::read_database_jdbc_ssl_properties,
11+
$database_validate = $puppetdb::params::read_database_validate,
12+
$log_slow_statements = $puppetdb::params::read_log_slow_statements,
13+
$conn_max_age = $puppetdb::params::read_conn_max_age,
14+
$conn_keep_alive = $puppetdb::params::read_conn_keep_alive,
15+
$conn_lifetime = $puppetdb::params::read_conn_lifetime,
16+
$confdir = $puppetdb::params::confdir,
17+
$puppetdb_user = $puppetdb::params::puppetdb_user,
18+
$puppetdb_group = $puppetdb::params::puppetdb_group,
19+
$database_max_pool_size = $puppetdb::params::read_database_max_pool_size,
1920
) inherits puppetdb::params {
2021

2122
# Only add the read database configuration if database host is defined.
@@ -129,6 +130,20 @@
129130
setting => 'conn-lifetime',
130131
value => $conn_lifetime,
131132
}
133+
134+
if $puppetdb::params::database_max_pool_size_setting_name != undef {
135+
if $database_max_pool_size == 'absent' {
136+
ini_setting { 'puppetdb_read_database_max_pool_size':
137+
ensure => absent,
138+
setting => $puppetdb::params::database_max_pool_size_setting_name,
139+
}
140+
} elsif $database_max_pool_size != undef {
141+
ini_setting { 'puppetdb_read_database_max_pool_size':
142+
setting => $puppetdb::params::database_max_pool_size_setting_name,
143+
value => $database_max_pool_size,
144+
}
145+
}
146+
}
132147
} else {
133148
file { "${confdir}/read_database.ini":
134149
ensure => absent,

spec/unit/classes/server/database_ini_spec.rb

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@
125125
'setting' => 'conn-lifetime',
126126
'value' => '0'
127127
)}
128+
it { should_not contain_ini_setting('puppetdb_database_max_pool_size') }
128129
end
129130

130131
describe 'when using a legacy PuppetDB version' do
@@ -233,6 +234,7 @@
233234
'setting' => 'conn-lifetime',
234235
'value' => '0'
235236
)}
237+
it { should_not contain_ini_setting('puppetdb_database_max_pool_size') }
236238
end
237239

238240
describe 'when overriding database_path for embedded' do
@@ -251,5 +253,95 @@
251253
'value' => 'file:/tmp/foo;hsqldb.tx=mvcc;sql.syntax_pgs=true'
252254
)}
253255
end
256+
257+
describe 'when setting max pool size' do
258+
context 'on current PuppetDB' do
259+
describe 'to a numeric value' do
260+
let(:params) do
261+
{
262+
'database_max_pool_size' => 12345
263+
}
264+
end
265+
it { should contain_ini_setting('puppetdb_database_max_pool_size').
266+
with(
267+
'ensure' => 'present',
268+
'path' => '/etc/puppetlabs/puppetdb/conf.d/database.ini',
269+
'section' => 'database',
270+
'setting' => 'maximum-pool-size',
271+
'value' => '12345'
272+
)}
273+
end
274+
275+
describe 'to absent' do
276+
let(:params) do
277+
{
278+
'database_max_pool_size' => 'absent'
279+
}
280+
end
281+
it { should contain_ini_setting('puppetdb_database_max_pool_size').
282+
with(
283+
'ensure' => 'absent',
284+
'path' => '/etc/puppetlabs/puppetdb/conf.d/database.ini',
285+
'section' => 'database',
286+
'setting' => 'maximum-pool-size'
287+
)}
288+
end
289+
end
290+
291+
context 'on PuppetDB 3.2' do
292+
let (:pre_condition) { 'class { "puppetdb::globals": version => "3.2.0", }' }
293+
describe 'to a numeric value' do
294+
let(:params) do
295+
{
296+
'database_max_pool_size' => 12345
297+
}
298+
end
299+
it { should contain_ini_setting('puppetdb_database_max_pool_size').
300+
with(
301+
'ensure' => 'present',
302+
'path' => '/etc/puppetlabs/puppetdb/conf.d/database.ini',
303+
'section' => 'database',
304+
'setting' => 'partition-conn-max',
305+
'value' => '12345'
306+
)}
307+
end
308+
309+
describe 'to absent' do
310+
let(:params) do
311+
{
312+
'database_max_pool_size' => 'absent'
313+
}
314+
end
315+
it { should contain_ini_setting('puppetdb_database_max_pool_size').
316+
with(
317+
'ensure' => 'absent',
318+
'path' => '/etc/puppetlabs/puppetdb/conf.d/database.ini',
319+
'section' => 'database',
320+
'setting' => 'partition-conn-max'
321+
)}
322+
end
323+
end
324+
325+
context 'on a legacy PuppetDB version' do
326+
let (:pre_condition) { 'class { "puppetdb::globals": version => "2.2.0", }' }
327+
describe 'to a numeric value' do
328+
let(:params) do
329+
{
330+
'database_max_pool_size' => 12345
331+
}
332+
end
333+
it { should_not contain_ini_setting('puppetdb_database_max_pool_size') }
334+
end
335+
336+
describe 'to absent' do
337+
let(:params) do
338+
{
339+
'database_max_pool_size' => 'absent'
340+
}
341+
end
342+
it { should_not contain_ini_setting('puppetdb_database_max_pool_size') }
343+
end
344+
end
345+
end
254346
end
255347
end

0 commit comments

Comments
 (0)