Skip to content

Commit 283b2dc

Browse files
committed
(SUP-2404) Migrate from cron to systemd units
Prior to this commit, maintenance and backups were done with cron entries. This commit replaces all but the backup feature with systemd services and timers to provide better logging.
1 parent 13bc998 commit 283b2dc

18 files changed

+281
-429
lines changed

.sync.yml

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,11 @@ spec/spec_helper.rb:
3434
coverage_report: true
3535
spec/default_facts.yml:
3636
extra_facts:
37-
pe_server_version: 2018.1.0
38-
memory:
39-
"system":
40-
"total": "16.00 GiB"
41-
"total_bytes": 17179869184
42-
processors:
43-
"count": 8
44-
spec/default_facts.yml:
45-
extra_facts:
37+
pe_databases:
38+
have_systemd: true
4639
pe_postgresql_info:
47-
installed_server_version: 9.6
48-
pe_server_version: 2018.1.0
40+
installed_server_version: 11
41+
pe_server_version: 2019.8.6
4942
memory:
5043
system:
5144
total: 16.00 GiB

files/vacuum_full_tables.sh

Lines changed: 0 additions & 43 deletions
This file was deleted.

lib/facter/pe_databases.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
Facter.add(:pe_databases, type: :aggregate) do
2+
confine kernel: 'Linux'
3+
4+
chunk(:have_systemd) do
5+
if Puppet::FileSystem.exist?('/proc/1/comm') && Puppet::FileSystem.read('/proc/1/comm').include?('systemd')
6+
{ have_systemd: true }
7+
else
8+
{ have_systemd: false }
9+
end
10+
end
11+
end

manifests/collect.pp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Create systemd units for repacking a given database type
2+
define pe_databases::collect (
3+
String $database_type = $title,
4+
String $command = undef,
5+
Boolean $disable_maintenance = false,
6+
String $on_cal = undef,
7+
) {
8+
9+
Service {
10+
notify => Exec['pe_databases_daemon_reload'],
11+
}
12+
File {
13+
notify => Exec['pe_databases_daemon_reload'],
14+
}
15+
16+
$ensure_service = $disable_maintenance ? {
17+
true => stopped,
18+
default => running,
19+
}
20+
21+
$ensure_file = $disable_maintenance ? {
22+
true => absent,
23+
default => present
24+
}
25+
26+
file {"/etc/systemd/system/pe_databases-${database_type}.service":
27+
ensure => $ensure_file,
28+
content => epp('pe_databases/service.epp', { 'tables' => $database_type, 'command' => $command }),
29+
}
30+
file {"/etc/systemd/system/pe_databases-${database_type}.timer":
31+
ensure => $ensure_file,
32+
content => epp('pe_databases/timer.epp', { 'tables' => $database_type, 'on_cal' => $on_cal }),
33+
}
34+
35+
service { "pe_databases-${database_type}.service": }
36+
service { "pe_databases-${database_type}.timer":
37+
ensure => $ensure_service,
38+
enable => ! $disable_maintenance,
39+
subscribe => File["/etc/systemd/system/pe_databases-${database_type}.timer"],
40+
}
41+
}

manifests/init.pp

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# @summary Tuning, maintenance, and backups for PE PostgreSQL.
44

55
class pe_databases (
6-
Boolean $manage_database_backups = true,
6+
Boolean $manage_database_backups = false,
77
Boolean $manage_database_maintenance = true,
88
Boolean $manage_postgresql_settings = true,
99
Boolean $manage_table_settings = true,
@@ -21,27 +21,39 @@
2121
mode => '0755',
2222
}
2323

24-
if $manage_database_maintenance {
25-
include pe_databases::maintenance
24+
exec { 'pe_databases_daemon_reload':
25+
command => 'systemctl daemon-reload',
26+
path => ['/bin', '/usr/bin'],
27+
refreshonly => true,
2628
}
2729

28-
# Do not manage postgresql_settings in 2018.1.0 or newer.
29-
if $manage_postgresql_settings and (versioncmp('2018.1.0', $facts['pe_server_version']) > 0) {
30-
include pe_databases::postgresql_settings
31-
class { 'pe_databases::postgresql_settings::table_settings' :
32-
manage_reports_autovacuum_cost_delay => $pe_databases::postgresql_settings::manage_reports_autovacuum_cost_delay,
33-
factsets_autovacuum_vacuum_scale_factor => $pe_databases::postgresql_settings::factsets_autovacuum_vacuum_scale_factor,
34-
reports_autovacuum_vacuum_scale_factor => $pe_databases::postgresql_settings::reports_autovacuum_vacuum_scale_factor,
35-
require => Class['pe_databases::postgresql_settings'],
30+
if $facts.dig('pe_databases', 'have_systemd') {
31+
if $manage_database_maintenance and (versioncmp('2019.0.2', $facts['pe_server_version']) <= 0) {
32+
class {'pe_databases::pg_repack':
33+
disable_maintenance => lookup('pe_databases::maintenance::disable_maintenance', {'default_value' => false}),
34+
}
35+
if $manage_table_settings {
36+
# This is to provide for situations, like PE XL,
37+
# where the pe-puppetdb database does not exist on the PostgreSQL system being tuned.
38+
# In PE XL, the Master and Replica run PostgreSQL for all databases *except* for pe-puppetdb.
39+
include pe_databases::postgresql_settings::table_settings
40+
}
41+
42+
if $manage_database_backups {
43+
include pe_databases::backup
44+
}
45+
}
46+
else {
47+
notify { 'pe_databases_version_warn':
48+
message => 'This module only supports PE 2019.0.2 and later',
49+
loglevel => warning,
50+
}
3651
}
37-
} elsif $manage_table_settings {
38-
# This is to provide for situations, like PE XL,
39-
# where the pe-puppetdb database does not exist on the PostgreSQL system being tuned.
40-
# In PE XL, the Master and Replica run PostgreSQL for all databases *except* for pe-puppetdb.
41-
include pe_databases::postgresql_settings::table_settings
4252
}
43-
44-
if $manage_database_backups {
45-
include pe_databases::backup
53+
else {
54+
notify { 'pe_databases_systemd_warn':
55+
message => 'This module only works with systemd as the provider',
56+
loglevel => warning,
57+
}
4658
}
4759
}

manifests/maintenance.pp

Lines changed: 0 additions & 31 deletions
This file was deleted.

manifests/maintenance/pg_repack.pp

Lines changed: 0 additions & 94 deletions
This file was deleted.

manifests/maintenance/vacuum_full.pp

Lines changed: 0 additions & 68 deletions
This file was deleted.

0 commit comments

Comments
 (0)