manageiq-postgres_ha_admin 3.2.0 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 56101e65dae001ffb46cd7694fbef68783b68e9a65acf249be6442de3bfe9946
4
- data.tar.gz: 7168416de251ecc47a6f18b74ee670aff0e064f856f4977b9ba326251db6908e
3
+ metadata.gz: 6f7b943098fa2b607f670d3505cc3aa1996eb66bd592466083256bd73a74c850
4
+ data.tar.gz: 39a22f1501b7174790e419aec205d8ccf2197d15cf075c5b4080b88f36ab2fe4
5
5
  SHA512:
6
- metadata.gz: ca051fa5381377b6252a323a3f77befb7f544d155d86a5b749409a58f7af68d6d2d8cb1c248d8bea6ebbeab8f45a57b43bf87deca082f43720642b7b47f505c8
7
- data.tar.gz: 4d32d6edb84ff1cdf9d4448fbc1239962c7b24382d31e143b8169f00156947ea6160a5e63b54647c7c94dee0e4d838320f85f1a2434ac736d7dc8019b7187cc9
6
+ metadata.gz: 73d0bce84c88772e4eff29c11439bb76de2a957cfebe16e2318f9f5ea99ea215fb741aec241a7f81b3a83acfff469a7fd366a9da648f561785e4b015d866872b
7
+ data.tar.gz: 7bf2436cc0d06dbd2a28a0b25a02d250fe0b922ffcb9003e00916e3308cb6201979321d9d71fc517eb1f89837155d33dd3f50bdb0d61ee9aceec1af2173d0780
data/.codeclimate.yml CHANGED
@@ -12,7 +12,7 @@ plugins:
12
12
  rubocop:
13
13
  enabled: true
14
14
  config: ".rubocop_cc.yml"
15
- channel: rubocop-0-82
15
+ channel: rubocop-1-56-3
16
16
  brakeman:
17
17
  enabled: false
18
18
  bundler-audit:
@@ -12,16 +12,16 @@ jobs:
12
12
  strategy:
13
13
  matrix:
14
14
  ruby-version:
15
- - '2.5'
16
- - '2.6'
17
15
  - '2.7'
18
16
  - '3.0'
17
+ - '3.1'
19
18
  rails-version:
20
19
  - '6.0'
21
20
  - '6.1'
21
+ - '7.0'
22
22
  services:
23
23
  postgres:
24
- image: manageiq/postgresql:10
24
+ image: manageiq/postgresql:13
25
25
  env:
26
26
  POSTGRESQL_USER: root
27
27
  POSTGRESQL_PASSWORD: smartvm
@@ -34,7 +34,7 @@ jobs:
34
34
  TEST_RAILS_VERSION: ${{ matrix.rails-version }}
35
35
  CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
36
36
  steps:
37
- - uses: actions/checkout@v2
37
+ - uses: actions/checkout@v4
38
38
  - name: Set up Ruby
39
39
  uses: ruby/setup-ruby@v1
40
40
  with:
@@ -46,4 +46,4 @@ jobs:
46
46
  - name: Report code coverage
47
47
  if: ${{ github.ref == 'refs/heads/master' && matrix.ruby-version == '3.0' && matrix.rails-version == '6.1' }}
48
48
  continue-on-error: true
49
- uses: paambaati/codeclimate-action@v3.0.0
49
+ uses: paambaati/codeclimate-action@v6
data/CHANGELOG.md CHANGED
@@ -5,6 +5,14 @@ This project adheres to [Semantic Versioning](http://semver.org/).
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [3.3.0] - 2024-05-14
9
+ ### Added
10
+ - Rails 7 support [#43](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/43)
11
+
12
+ ## [3.2.1] - 2023-03-22
13
+ ### Changed
14
+ - Improve failover logging [#39](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/39)
15
+
8
16
  ## [3.2.0] - 2022-09-26
9
17
  ### Added
10
18
  - Add simple prefix to all log lines [#38](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/38)
@@ -61,7 +69,9 @@ This project adheres to [Semantic Versioning](http://semver.org/).
61
69
  ### Changed
62
70
  - Make changes for upgrading repmgr to version 4 [#4](https://github.com/ManageIQ/manageiq-postgres_ha_admin/pull/4)
63
71
 
64
- [Unreleased]: https://github.com/ManageIQ/manageiq-postgres_ha_admin/compare/v3.2.0...master
72
+ [Unreleased]: https://github.com/ManageIQ/manageiq-postgres_ha_admin/compare/v3.3.0...master
73
+ [3.3.0]: https://github.com/ManageIQ/manageiq-postgres_ha_admin/compare/v3.2.1...v3.3.0
74
+ [3.2.1]: https://github.com/ManageIQ/manageiq-postgres_ha_admin/compare/v3.2.0...v3.2.1
65
75
  [3.2.0]: https://github.com/ManageIQ/manageiq-postgres_ha_admin/compare/v3.1.4...v3.2.0
66
76
  [3.1.4]: https://github.com/ManageIQ/manageiq-postgres_ha_admin/compare/v3.1.3...v3.1.4
67
77
  [3.1.3]: https://github.com/ManageIQ/manageiq-postgres_ha_admin/compare/v3.1.2...v3.1.3
data/Gemfile CHANGED
@@ -3,9 +3,14 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in manageiq-postgres_ha_admin.gemspec
4
4
  gemspec
5
5
 
6
- case ENV['TEST_RAILS_VERSION']
7
- when "6.0"
8
- gem "activesupport", "~>6.0.4"
9
- when "6.1"
10
- gem "activesupport", "~>6.1.4"
11
- end
6
+ minimum_version =
7
+ case ENV['TEST_RAILS_VERSION']
8
+ when "6.0"
9
+ "~>6.0.4"
10
+ when "7.0"
11
+ "~>7.0.8"
12
+ else
13
+ "~>6.1.4"
14
+ end
15
+
16
+ gem "activesupport", minimum_version
@@ -26,23 +26,20 @@ module PostgresHaAdmin
26
26
  begin
27
27
  connection = pg_connection(handler.read)
28
28
  if connection
29
- server_store.update_servers(connection)
29
+ server_store.update_servers(connection, handler.name)
30
30
  connection.finish
31
31
  next
32
32
  end
33
33
 
34
+ log_settings
35
+ server_store.log_current_server_store(handler.name)
34
36
  logger.error("#{log_prefix(__callee__)} Primary Database is not available for #{handler.name}. Starting to execute failover...")
35
37
  handler.do_before_failover
36
38
 
37
39
  new_conn_info = execute_failover(handler, server_store)
38
40
 
39
- if new_conn_info
40
- # Upon success, we pass a connection hash
41
- handler.do_after_failover(new_conn_info)
42
- else
43
- # Add failover_failed hook if we have a use case in the future
44
- logger.error("#{log_prefix(__callee__)} Failover failed")
45
- end
41
+ # Upon success, we pass a connection hash
42
+ handler.do_after_failover(new_conn_info) if new_conn_info
46
43
  rescue => e
47
44
  logger.error("#{log_prefix(__callee__)} Received #{e.class} error while monitoring #{handler.name}: #{e.message}")
48
45
  logger.error(e.backtrace)
@@ -70,6 +67,10 @@ module PostgresHaAdmin
70
67
 
71
68
  private
72
69
 
70
+ def log_settings
71
+ logger.info("#{log_prefix(__callee__)} Current HA settings: FAILOVER_ATTEMPTS=#{@failover_attempts} DB_CHECK_FREQUENCY=#{@db_check_frequency} FAILOVER_CHECK_FREQUENCY=#{@failover_check_frequency}")
72
+ end
73
+
73
74
  def initialize_settings(ha_admin_yml_file)
74
75
  ha_admin_yml = {}
75
76
  begin
@@ -81,7 +82,7 @@ module PostgresHaAdmin
81
82
  @failover_attempts = ha_admin_yml['failover_attempts'] || FAILOVER_ATTEMPTS
82
83
  @db_check_frequency = ha_admin_yml['db_check_frequency'] || DB_CHECK_FREQUENCY
83
84
  @failover_check_frequency = ha_admin_yml['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
+ log_settings
85
86
  end
86
87
 
87
88
  def any_known_standby?(handler, server_store)
@@ -97,7 +98,7 @@ module PostgresHaAdmin
97
98
  # "Standby in recovery"
98
99
  # "Exhausted all failover retry attempts" exceptions
99
100
  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
+ logger.error("#{log_prefix(__callee__)} Cannot attempt failover without a known active standby for #{handler.name}. Please verify the database.yml and ensure the database is started.")
101
102
  return false
102
103
  end
103
104
 
@@ -105,18 +106,20 @@ module PostgresHaAdmin
105
106
  with_each_standby_connection(handler, server_store) do |connection, params|
106
107
  next if database_in_recovery?(connection)
107
108
  next unless server_store.host_is_primary?(params[:host], connection)
108
- logger.info("#{log_prefix(__callee__)} Failing over to server using conninfo: #{params.reject { |k, _v| k == :password }}")
109
- server_store.update_servers(connection)
109
+ logger.info("#{log_prefix(__callee__)} Failing over for #{handler.name} to server using conninfo: #{server_store.sanitized_connection_parameters(params)}")
110
+ server_store.update_servers(connection, handler.name)
110
111
  handler.write(params)
111
112
  return params
112
113
  end
113
114
  sleep(failover_check_frequency)
114
115
  end
116
+ logger.error("#{log_prefix(__callee__)} Failover failed for #{handler.name}")
115
117
  false
116
118
  end
117
119
 
118
120
  def with_each_standby_connection(handler, server_store)
119
121
  active_servers_conninfo(handler, server_store).each do |params|
122
+ logger.info("#{log_prefix(__callee__)} Checking active server for #{handler.name} using conninfo: #{server_store.sanitized_connection_parameters(params)}")
120
123
  connection = pg_connection(params)
121
124
  next if connection.nil?
122
125
  begin
@@ -22,10 +22,11 @@ module PostgresHaAdmin
22
22
  end
23
23
  end
24
24
 
25
- def update_servers(connection)
25
+ def update_servers(connection, handler_name = "unspecified handler")
26
26
  new_servers = query_repmgr(connection)
27
27
  if servers_changed?(new_servers)
28
- logger.info("#{log_prefix(__callee__)} Updating servers cache to #{new_servers}")
28
+ log_current_server_store(handler_name)
29
+ logger.info("#{log_prefix(__callee__)} Updating servers cache to #{sanitized_servers_array(new_servers)} for #{handler_name}")
29
30
  @servers = new_servers
30
31
  end
31
32
  rescue IOError => err
@@ -42,6 +43,18 @@ module PostgresHaAdmin
42
43
  false
43
44
  end
44
45
 
46
+ def log_current_server_store(handler_name)
47
+ logger.info("#{log_prefix(__callee__)} Current servers cache: #{sanitized_servers_array(@servers)} for #{handler_name}")
48
+ end
49
+
50
+ def sanitized_servers_array(server_array)
51
+ server_array.collect { |p| sanitized_connection_parameters(p) }
52
+ end
53
+
54
+ def sanitized_connection_parameters(params)
55
+ params.reject { |k, _v| k.to_s == "password" }
56
+ end
57
+
45
58
  private
46
59
 
47
60
  def servers_changed?(new_servers)
@@ -1,5 +1,5 @@
1
1
  module ManageIQ
2
2
  module PostgresHaAdmin
3
- VERSION = '3.2.0'.freeze
3
+ VERSION = '3.3.0'.freeze
4
4
  end
5
5
  end
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
27
27
 
28
28
  spec.required_ruby_version = ">= 2.5.8"
29
29
 
30
- spec.add_runtime_dependency "activesupport", ">=5.0", "< 7.0"
30
+ spec.add_runtime_dependency "activesupport", ">=5.0", "<7.1"
31
31
  spec.add_runtime_dependency "awesome_spawn", "~> 1.4"
32
32
  spec.add_runtime_dependency "manageiq-password", "< 2"
33
33
  spec.add_runtime_dependency "pg"
data/renovate.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
+ "extends": [
4
+ "config:recommended"
5
+ ]
6
+ }
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.2.0
4
+ version: 3.3.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-09-26 00:00:00.000000000 Z
11
+ date: 2024-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '5.0'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '7.0'
22
+ version: '7.1'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '5.0'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '7.0'
32
+ version: '7.1'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: awesome_spawn
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -187,6 +187,7 @@ files:
187
187
  - lib/manageiq/postgres_ha_admin/server_store.rb
188
188
  - lib/manageiq/postgres_ha_admin/version.rb
189
189
  - manageiq-postgres_ha_admin.gemspec
190
+ - renovate.json
190
191
  homepage: https://github.com/ManageIQ/manageiq-postgres_ha_admin
191
192
  licenses:
192
193
  - Apache-2.0
@@ -209,7 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
209
210
  - !ruby/object:Gem::Version
210
211
  version: '0'
211
212
  requirements: []
212
- rubygems_version: 3.3.18
213
+ rubygems_version: 3.3.27
213
214
  signing_key:
214
215
  specification_version: 4
215
216
  summary: ManageIQ Postgres H.A. Admin