gamma_replication 0.1.5 → 0.1.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d8ce98d7cce6b660795290077c80a235c062a98279e851040c252fd6b9c4123b
4
- data.tar.gz: 173d4951be58b1d7302e6f90805719cf72f4335971f16217b0a4f91c24c1990a
3
+ metadata.gz: cb4392908f3daf17928f115476739653bfebee77e940ac586eb17ef27e3104e3
4
+ data.tar.gz: 275c6b6227b7f1f2b700ef452cd10d5d18d079757d2390eb90e7bcfc4fd99b93
5
5
  SHA512:
6
- metadata.gz: c043ec458818b3751db13d6600e546446ca9ca4b77acecb2bdadf62decb6d8b632fe27ae07bf22c68df0645ffc80d5a2605ccdb45294a66ed7eaa9de5e9a901a
7
- data.tar.gz: f79356676876df5b2a52fb34d408cea11192af27db9a635f8495b2a11bb95d9f05b807567f81e93e8a39739e12109b204ba5f9f316f68788c8616714a7a39398
6
+ metadata.gz: 5e1f56ac2bed52cf873dde8b40d54f2278f2f749a624723805af5bb37cd024da2c8cbd9a53897fb194a69fc52b090607b0cd31d72f9f990c16147cfcc4e8501f
7
+ data.tar.gz: 17ea2d1a0fa8c619871b55270394af7c69f67b3d5a21127cf7c2cabca59306fb062dd849fa4ecce44d3d4fb97c394703c8a5557192f7497c97e94bd6e06fb8d0
@@ -3,6 +3,26 @@
3
3
  module GammaReplication
4
4
  module Command
5
5
  class Start < BaseReplication
6
+ FATAL_ERROR_KEYWORDS = [
7
+ /out of memory/i,
8
+ /cannot allocate memory/i,
9
+ /memory allocation failed/i,
10
+ /no space left on device/i,
11
+ /disk full/i,
12
+ /too many open files/i,
13
+ /segmentation fault/i,
14
+ /bus error/i,
15
+ /killed/i,
16
+ /can't connect to mysql server/i,
17
+ /lost connection to mysql server/i,
18
+ /mysql server has gone away/i,
19
+ /permission denied/i,
20
+ /read-only file system/i,
21
+ /network is unreachable/i,
22
+ /connection refused/i,
23
+ /connection timed out/i
24
+ ].freeze
25
+
6
26
  def initialize(opts)
7
27
  super
8
28
  @force_mode = opts[:force]
@@ -15,10 +35,30 @@ module GammaReplication
15
35
 
16
36
  def execute_query(query)
17
37
  logger.info("Executing: #{query}") if ENV["DEBUG"]
18
- @out_client.client.query(query)
19
- rescue StandardError => e
20
- error_message = e.message.to_s.split("\n").first
21
- logger.error("Query execution failed: #{error_message.gsub(/\s+/, " ")}")
38
+ retries = 0
39
+ begin
40
+ @out_client.client.query(query)
41
+ rescue StandardError => e
42
+ error_message = e.message.to_s.split("\n").first
43
+ log_msg = "Query execution failed: #{error_message.gsub(/\s+/, " ")}"
44
+ logger.error(log_msg)
45
+
46
+ if fatal_error?(error_message)
47
+ retries += 1
48
+ if retries < 3
49
+ logger.warn("Retrying due to fatal error (attempt #{retries})...")
50
+ sleep 2**retries
51
+ retry
52
+ else
53
+ logger.fatal("Fatal: unrecoverable error after #{retries} attempts. Exiting. Error: #{log_msg}")
54
+ exit(1)
55
+ end
56
+ end
57
+ end
58
+ end
59
+
60
+ def fatal_error?(msg)
61
+ FATAL_ERROR_KEYWORDS.any? { |pattern| msg =~ pattern }
22
62
  end
23
63
 
24
64
  def finalize
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GammaReplication
4
- VERSION = "0.1.5"
4
+ VERSION = "0.1.6"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gamma_replication
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shinsuke Nishio
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-05-01 00:00:00.000000000 Z
11
+ date: 2025-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport