manageiq-postgres_ha_admin 3.1.4 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yaml +1 -0
- data/CHANGELOG.md +19 -9
- data/lib/manageiq/postgres_ha_admin/config_handler.rb +3 -0
- data/lib/manageiq/postgres_ha_admin/failover_monitor.rb +29 -10
- data/lib/manageiq/postgres_ha_admin/logging.rb +4 -0
- data/lib/manageiq/postgres_ha_admin/server_store.rb +3 -3
- data/lib/manageiq/postgres_ha_admin/version.rb +1 -1
- data/lib/manageiq-postgres_ha_admin.rb +0 -1
- metadata +3 -4
- data/lib/manageiq/postgres_ha_admin/config_handler/pglogical_config_handler.rb +0 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56101e65dae001ffb46cd7694fbef68783b68e9a65acf249be6442de3bfe9946
|
4
|
+
data.tar.gz: 7168416de251ecc47a6f18b74ee670aff0e064f856f4977b9ba326251db6908e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca051fa5381377b6252a323a3f77befb7f544d155d86a5b749409a58f7af68d6d2d8cb1c248d8bea6ebbeab8f45a57b43bf87deca082f43720642b7b47f505c8
|
7
|
+
data.tar.gz: 4d32d6edb84ff1cdf9d4448fbc1239962c7b24382d31e143b8169f00156947ea6160a5e63b54647c7c94dee0e4d838320f85f1a2434ac736d7dc8019b7187cc9
|
data/.github/workflows/ci.yaml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -5,36 +5,46 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
5
5
|
|
6
6
|
## [Unreleased]
|
7
7
|
|
8
|
+
## [3.2.0] - 2022-09-26
|
9
|
+
### Added
|
10
|
+
- Add simple prefix to all log lines [#38](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/38)
|
11
|
+
|
12
|
+
### Changed
|
13
|
+
- 5 minute db checks is too long, use 2 minutes [#37](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/37)
|
14
|
+
|
15
|
+
### Removed
|
16
|
+
- Remove unused pglogical_config_handler [#35](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/35)
|
17
|
+
|
18
|
+
### Fixed
|
19
|
+
- Don't attempt a database failover without a known standby [#36](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/36)
|
20
|
+
|
8
21
|
## [3.1.4] - 2022-04-30
|
9
22
|
### Changed
|
10
|
-
-
|
11
|
-
- Support Ruby 3.0
|
23
|
+
- Loosen rails dependency to include rails 6.1 [#28](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/28)
|
12
24
|
|
13
25
|
## [3.1.3] - 2021-09-27
|
14
|
-
|
15
26
|
### Changed
|
16
27
|
- Loosen manageiq-password dependency to < 2 [#26](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/26)
|
17
|
-
- Update ruby versions to 2.5.8 minimum [#25](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/25)
|
28
|
+
- Update ruby versions to 2.5.8 minimum and support Ruby 3.0 [#25](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/25)
|
18
29
|
- Switch to manageiq-style [#24](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/24)
|
19
30
|
|
20
31
|
## [3.1.2] - 2020-12-21
|
32
|
+
### Changed
|
21
33
|
- Allow for Rails 6.0 [#23](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/23)
|
22
34
|
|
23
35
|
## [3.1.1] - 2019-12-12
|
36
|
+
### Changed
|
24
37
|
- Remove the dependency on linux_admin [#19](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/19)
|
25
38
|
|
26
39
|
## [3.1.0] - 2019-05-09
|
27
|
-
|
28
40
|
### Added
|
29
41
|
- Add a logical replication config handler [#17](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/17)
|
30
42
|
|
31
43
|
## [3.0.1] - 2019-03-19
|
32
|
-
|
33
44
|
### Changed
|
34
45
|
- Remove references to MiqPassword [#15](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/15)
|
35
46
|
|
36
47
|
## [3.0.0] - 2018-09-05
|
37
|
-
|
38
48
|
### Added
|
39
49
|
- Allow users of the gem to specify a logger object [#7](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/7)
|
40
50
|
|
@@ -44,7 +54,6 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
44
54
|
- Make failover monitor generic [#10](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/10)
|
45
55
|
|
46
56
|
## [2.0.0] - 2018-08-01
|
47
|
-
|
48
57
|
### Added
|
49
58
|
- Add pg-dsn_parser to the gemspec [#5](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/5)
|
50
59
|
- Add postgresql addon for travis [#6](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/6)
|
@@ -52,7 +61,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
52
61
|
### Changed
|
53
62
|
- Make changes for upgrading repmgr to version 4 [#4](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/4)
|
54
63
|
|
55
|
-
[Unreleased]: https://github.com/ManageIQ/manageiq-postgres_ha_admin/compare/v3.
|
64
|
+
[Unreleased]: https://github.com/ManageIQ/manageiq-postgres_ha_admin/compare/v3.2.0...master
|
65
|
+
[3.2.0]: https://github.com/ManageIQ/manageiq-postgres_ha_admin/compare/v3.1.4...v3.2.0
|
56
66
|
[3.1.4]: https://github.com/ManageIQ/manageiq-postgres_ha_admin/compare/v3.1.3...v3.1.4
|
57
67
|
[3.1.3]: https://github.com/ManageIQ/manageiq-postgres_ha_admin/compare/v3.1.2...v3.1.3
|
58
68
|
[3.1.2]: https://github.com/ManageIQ/manageiq-postgres_ha_admin/compare/v3.1.1...v3.1.2
|
@@ -27,9 +27,12 @@ module PostgresHaAdmin
|
|
27
27
|
@before_failover_cb&.call
|
28
28
|
end
|
29
29
|
|
30
|
+
# Upon successful failover
|
30
31
|
def do_after_failover(new_primary_conn_info)
|
31
32
|
@after_failover_cb&.call(new_primary_conn_info)
|
32
33
|
end
|
34
|
+
|
35
|
+
# If needed, we can add an unsuccessful failover hook
|
33
36
|
end
|
34
37
|
end
|
35
38
|
end
|
@@ -7,7 +7,7 @@ module PostgresHaAdmin
|
|
7
7
|
include Logging
|
8
8
|
|
9
9
|
FAILOVER_ATTEMPTS = 10
|
10
|
-
DB_CHECK_FREQUENCY =
|
10
|
+
DB_CHECK_FREQUENCY = 120
|
11
11
|
FAILOVER_CHECK_FREQUENCY = 60
|
12
12
|
attr_accessor :failover_attempts, :db_check_frequency, :failover_check_frequency
|
13
13
|
attr_reader :config_handlers
|
@@ -31,17 +31,20 @@ module PostgresHaAdmin
|
|
31
31
|
next
|
32
32
|
end
|
33
33
|
|
34
|
-
logger.error("Primary Database is not available for #{handler.name}. Starting to execute failover...")
|
34
|
+
logger.error("#{log_prefix(__callee__)} Primary Database is not available for #{handler.name}. Starting to execute failover...")
|
35
35
|
handler.do_before_failover
|
36
36
|
|
37
37
|
new_conn_info = execute_failover(handler, server_store)
|
38
|
+
|
38
39
|
if new_conn_info
|
40
|
+
# Upon success, we pass a connection hash
|
39
41
|
handler.do_after_failover(new_conn_info)
|
40
42
|
else
|
41
|
-
|
43
|
+
# Add failover_failed hook if we have a use case in the future
|
44
|
+
logger.error("#{log_prefix(__callee__)} Failover failed")
|
42
45
|
end
|
43
46
|
rescue => e
|
44
|
-
logger.error("Received #{e.class} error while monitoring #{handler.name}: #{e.message}")
|
47
|
+
logger.error("#{log_prefix(__callee__)} Received #{e.class} error while monitoring #{handler.name}: #{e.message}")
|
45
48
|
logger.error(e.backtrace)
|
46
49
|
end
|
47
50
|
end
|
@@ -52,7 +55,7 @@ module PostgresHaAdmin
|
|
52
55
|
begin
|
53
56
|
monitor
|
54
57
|
rescue => err
|
55
|
-
logger.error("#{err.class}: #{err}")
|
58
|
+
logger.error("#{log_prefix(__callee__)} #{err.class}: #{err}")
|
56
59
|
logger.error(err.backtrace.join("\n"))
|
57
60
|
end
|
58
61
|
sleep(db_check_frequency)
|
@@ -72,21 +75,37 @@ module PostgresHaAdmin
|
|
72
75
|
begin
|
73
76
|
ha_admin_yml = YAML.load_file(ha_admin_yml_file) if File.exist?(ha_admin_yml_file)
|
74
77
|
rescue SystemCallError, IOError => err
|
75
|
-
logger.error("#{err.class}: #{err}")
|
76
|
-
logger.info("File not loaded: #{ha_admin_yml_file}. Default settings for failover will be used.")
|
78
|
+
logger.error("#{log_prefix(__callee__)} #{err.class}: #{err}")
|
79
|
+
logger.info("#{log_prefix(__callee__)} File not loaded: #{ha_admin_yml_file}. Default settings for failover will be used.")
|
77
80
|
end
|
78
81
|
@failover_attempts = ha_admin_yml['failover_attempts'] || FAILOVER_ATTEMPTS
|
79
82
|
@db_check_frequency = ha_admin_yml['db_check_frequency'] || DB_CHECK_FREQUENCY
|
80
83
|
@failover_check_frequency = ha_admin_yml['failover_check_frequency'] || FAILOVER_CHECK_FREQUENCY
|
81
|
-
logger.info("FAILOVER_ATTEMPTS=#{@failover_attempts} DB_CHECK_FREQUENCY=#{@db_check_frequency} FAILOVER_CHECK_FREQUENCY=#{@failover_check_frequency}")
|
84
|
+
logger.info("#{log_prefix(__callee__)} FAILOVER_ATTEMPTS=#{@failover_attempts} DB_CHECK_FREQUENCY=#{@db_check_frequency} FAILOVER_CHECK_FREQUENCY=#{@failover_check_frequency}")
|
85
|
+
end
|
86
|
+
|
87
|
+
def any_known_standby?(handler, server_store)
|
88
|
+
current_host = handler.read[:host]
|
89
|
+
server_store.servers.any? do |server|
|
90
|
+
server[:host] != current_host && server[:type] == "standby"
|
91
|
+
end
|
82
92
|
end
|
83
93
|
|
84
94
|
def execute_failover(handler, server_store)
|
95
|
+
# TODO: Instead of returning false, we should raise:
|
96
|
+
# "No active standby"
|
97
|
+
# "Standby in recovery"
|
98
|
+
# "Exhausted all failover retry attempts" exceptions
|
99
|
+
unless any_known_standby?(handler, server_store)
|
100
|
+
logger.error("#{log_prefix(__callee__)} Cannot attempt failover without a known active standby. Please verify the database.yml and ensure the database is started.")
|
101
|
+
return false
|
102
|
+
end
|
103
|
+
|
85
104
|
failover_attempts.times do
|
86
105
|
with_each_standby_connection(handler, server_store) do |connection, params|
|
87
106
|
next if database_in_recovery?(connection)
|
88
107
|
next unless server_store.host_is_primary?(params[:host], connection)
|
89
|
-
logger.info("Failing over to server using conninfo: #{params.reject { |k, _v| k == :password }}")
|
108
|
+
logger.info("#{log_prefix(__callee__)} Failing over to server using conninfo: #{params.reject { |k, _v| k == :password }}")
|
90
109
|
server_store.update_servers(connection)
|
91
110
|
handler.write(params)
|
92
111
|
return params
|
@@ -111,7 +130,7 @@ module PostgresHaAdmin
|
|
111
130
|
def pg_connection(params)
|
112
131
|
PG::Connection.open(params)
|
113
132
|
rescue PG::Error => e
|
114
|
-
logger.error("Failed to establish PG connection: #{e.message}")
|
133
|
+
logger.error("#{log_prefix(__callee__)} Failed to establish PG connection: #{e.message}")
|
115
134
|
nil
|
116
135
|
end
|
117
136
|
|
@@ -25,11 +25,11 @@ module PostgresHaAdmin
|
|
25
25
|
def update_servers(connection)
|
26
26
|
new_servers = query_repmgr(connection)
|
27
27
|
if servers_changed?(new_servers)
|
28
|
-
logger.info("Updating servers cache to #{new_servers}")
|
28
|
+
logger.info("#{log_prefix(__callee__)} Updating servers cache to #{new_servers}")
|
29
29
|
@servers = new_servers
|
30
30
|
end
|
31
31
|
rescue IOError => err
|
32
|
-
logger.error("#{err.class}: #{err}")
|
32
|
+
logger.error("#{log_prefix(__callee__)} #{err.class}: #{err}")
|
33
33
|
logger.error(err.backtrace.join("\n"))
|
34
34
|
end
|
35
35
|
|
@@ -59,7 +59,7 @@ module PostgresHaAdmin
|
|
59
59
|
db_result.clear
|
60
60
|
result
|
61
61
|
rescue PG::Error => err
|
62
|
-
logger.error("#{err.class}: #{err}")
|
62
|
+
logger.error("#{log_prefix(__callee__)} #{err.class}: #{err}")
|
63
63
|
logger.error(err.backtrace.join("\n"))
|
64
64
|
result
|
65
65
|
end
|
@@ -8,7 +8,6 @@ require 'manageiq/postgres_ha_admin/failover_monitor'
|
|
8
8
|
|
9
9
|
require 'manageiq/postgres_ha_admin/config_handler'
|
10
10
|
require 'manageiq/postgres_ha_admin/config_handler/rails_config_handler'
|
11
|
-
require 'manageiq/postgres_ha_admin/config_handler/pglogical_config_handler'
|
12
11
|
require 'manageiq/postgres_ha_admin/config_handler/logical_replication_config_handler'
|
13
12
|
|
14
13
|
module ManageIQ
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: manageiq-postgres_ha_admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ManageIQ Developers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -180,7 +180,6 @@ files:
|
|
180
180
|
- lib/manageiq-postgres_ha_admin.rb
|
181
181
|
- lib/manageiq/postgres_ha_admin/config_handler.rb
|
182
182
|
- lib/manageiq/postgres_ha_admin/config_handler/logical_replication_config_handler.rb
|
183
|
-
- lib/manageiq/postgres_ha_admin/config_handler/pglogical_config_handler.rb
|
184
183
|
- lib/manageiq/postgres_ha_admin/config_handler/rails_config_handler.rb
|
185
184
|
- lib/manageiq/postgres_ha_admin/failover_monitor.rb
|
186
185
|
- lib/manageiq/postgres_ha_admin/logging.rb
|
@@ -210,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
210
209
|
- !ruby/object:Gem::Version
|
211
210
|
version: '0'
|
212
211
|
requirements: []
|
213
|
-
rubygems_version: 3.3.
|
212
|
+
rubygems_version: 3.3.18
|
214
213
|
signing_key:
|
215
214
|
specification_version: 4
|
216
215
|
summary: ManageIQ Postgres H.A. Admin
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'pg'
|
2
|
-
require 'pg/dsn_parser'
|
3
|
-
|
4
|
-
module ManageIQ
|
5
|
-
module PostgresHaAdmin
|
6
|
-
class PglogicalConfigHandler < ConfigHandler
|
7
|
-
attr_reader :subscription, :conn_info
|
8
|
-
|
9
|
-
def initialize(options = {})
|
10
|
-
@subscription = options[:subscription]
|
11
|
-
@conn_info = options[:conn_info]
|
12
|
-
end
|
13
|
-
|
14
|
-
def name
|
15
|
-
"pglogical subscription #{subscription} Config Handler"
|
16
|
-
end
|
17
|
-
|
18
|
-
def read
|
19
|
-
conn = PG::Connection.open(@conn_info)
|
20
|
-
dsn = conn.exec_params(<<~SQL, [@subscription]).first["if_dsn"]
|
21
|
-
SELECT if_dsn
|
22
|
-
FROM pglogical.subscription s
|
23
|
-
JOIN pglogical.node_interface i
|
24
|
-
ON s.sub_origin_if = i.if_id
|
25
|
-
WHERE s.sub_name = $1
|
26
|
-
SQL
|
27
|
-
PG::DSNParser.new.parse(dsn)
|
28
|
-
end
|
29
|
-
|
30
|
-
def write(_params)
|
31
|
-
# Nothing to do here as the expectation is that the user will
|
32
|
-
# remove and re-add the subscription in the after failover callback
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|