pgtk 0.34.0 → 0.34.1
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/Gemfile.lock +5 -5
- data/lib/pgtk/retry.rb +11 -2
- data/lib/pgtk/version.rb +1 -1
- data/resources/pom.xml +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '08b1597d7c03e9dc13920cb5a017212d8d20abf1dfaf035ef2ba0780e65e5b9a'
|
|
4
|
+
data.tar.gz: 33ff4f8d10700ee5d6fd50dfffd554cf5e8ab64f22c64c827cee4b3e56515bf3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '00185a69a1f0e8c7aceb0c565009f04598e6919df83664a42e52dd848a8b73921bf3fe33f460d434fb89b5c2c132732f807e8c4dec531a5c2e4e64489104b955'
|
|
7
|
+
data.tar.gz: 61041c3d7cdd28ad34979e5cb0fd3c319d9113d31e0ad427e1713bd627b4978e6aa7a01aa4bb1ea3d6816c5935ef86ca0e77d1f3e488c69c5bc013e8ffedb905
|
data/Gemfile.lock
CHANGED
|
@@ -36,7 +36,7 @@ GEM
|
|
|
36
36
|
tago (~> 0.1)
|
|
37
37
|
ellipsized (0.3.0)
|
|
38
38
|
joined (0.4.0)
|
|
39
|
-
json (2.21.
|
|
39
|
+
json (2.21.2)
|
|
40
40
|
language_server-protocol (3.17.0.6)
|
|
41
41
|
lint_roller (1.1.0)
|
|
42
42
|
logger (1.7.0)
|
|
@@ -88,15 +88,15 @@ GEM
|
|
|
88
88
|
loog (> 0)
|
|
89
89
|
tago (> 0)
|
|
90
90
|
racc (1.8.1)
|
|
91
|
-
rack (3.2.
|
|
91
|
+
rack (3.2.7)
|
|
92
92
|
rainbow (3.1.1)
|
|
93
93
|
rake (13.4.2)
|
|
94
94
|
random-port (0.8.2)
|
|
95
95
|
tago (~> 0.0)
|
|
96
96
|
regexp_parser (2.12.0)
|
|
97
97
|
rexml (3.4.4)
|
|
98
|
-
rubocop (1.
|
|
99
|
-
json (
|
|
98
|
+
rubocop (1.90.0)
|
|
99
|
+
json (>= 2.3)
|
|
100
100
|
language_server-protocol (~> 3.17.0.2)
|
|
101
101
|
lint_roller (~> 1.1.0)
|
|
102
102
|
parallel (>= 1.10)
|
|
@@ -143,7 +143,7 @@ GEM
|
|
|
143
143
|
unicode-emoji (~> 4.1)
|
|
144
144
|
unicode-emoji (4.2.0)
|
|
145
145
|
waitutil (0.2.1)
|
|
146
|
-
xcop (0.
|
|
146
|
+
xcop (0.11.2)
|
|
147
147
|
differ (~> 0.1.2)
|
|
148
148
|
nokogiri (~> 1.8)
|
|
149
149
|
rainbow (~> 3.0)
|
data/lib/pgtk/retry.rb
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
require_relative '../pgtk'
|
|
7
7
|
require_relative 'impatient'
|
|
8
|
+
require_relative 'pool/busy'
|
|
8
9
|
|
|
9
10
|
# Retry is a decorator for Pool that automatically retries failed SELECT queries.
|
|
10
11
|
# It provides fault tolerance for transient database errors by retrying read-only
|
|
@@ -83,8 +84,12 @@ class Pgtk::Retry
|
|
|
83
84
|
end
|
|
84
85
|
|
|
85
86
|
# Execute a SQL query with automatic retry on transient failures.
|
|
86
|
-
# Only SELECT queries are retried, since reads are idempotent.
|
|
87
|
-
#
|
|
87
|
+
# Only SELECT queries are retried, since reads are idempotent. The
|
|
88
|
+
# single exception is Pgtk::Pool::Busy, which is retried for every
|
|
89
|
+
# query type: it is raised while waiting for a free connection, thus
|
|
90
|
+
# the statement provably never reached the server and a second
|
|
91
|
+
# attempt cannot duplicate a write.
|
|
92
|
+
# Other non-SELECT queries propagate the original error immediately, even
|
|
88
93
|
# on PG::ConnectionBad, because that error can be raised after the
|
|
89
94
|
# server already received the query but before the acknowledgement
|
|
90
95
|
# reached the client, and retrying a non-idempotent write could
|
|
@@ -100,6 +105,10 @@ class Pgtk::Retry
|
|
|
100
105
|
attempt = 0
|
|
101
106
|
begin
|
|
102
107
|
@pool.exec(sql, *)
|
|
108
|
+
rescue Pgtk::Pool::Busy => e
|
|
109
|
+
attempt += 1
|
|
110
|
+
raise(Exhausted, "Retry gave up after #{@attempts} attempts: #{e.message}") if attempt >= @attempts
|
|
111
|
+
retry
|
|
103
112
|
rescue StandardError, Pgtk::Impatient::TooSlow => e
|
|
104
113
|
raise(e) unless query.strip.upcase.start_with?('SELECT')
|
|
105
114
|
attempt += 1
|
data/lib/pgtk/version.rb
CHANGED
data/resources/pom.xml
CHANGED