semian 0.5.2 → 0.5.3
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/lib/semian/mysql2.rb +17 -2
- data/lib/semian/version.rb +1 -1
- data/test/mysql2_test.rb +21 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b365b861b701b9fa52df84a771d48cfce3fbfc8
|
4
|
+
data.tar.gz: 18fe305ce3d4132fde7d3c358255097e7e6fa5bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3f2acf17c3d39ebbc595b58c099ba0711f4bcc356f4c9fdc00d7e401e26959cf547d5fe2395aa3324dbf632abecb6802885a69e76d08ce8ced17bf139868b310
|
7
|
+
data.tar.gz: fb0343a60116861285186ec5009db34e8a4296c7b08f4d16e94c96628ef11829d3425b1f37b9c60d3fd3a6aa3e40b8c71ca4784bf96f1713cf01a7c8ecf901c6
|
data/lib/semian/mysql2.rb
CHANGED
@@ -21,12 +21,13 @@ module Semian
|
|
21
21
|
|
22
22
|
CONNECTION_ERROR = Regexp.union(
|
23
23
|
/Can't connect to MySQL server on/i,
|
24
|
-
/Lost connection to MySQL server
|
24
|
+
/Lost connection to MySQL server/i,
|
25
25
|
/MySQL server has gone away/i,
|
26
26
|
)
|
27
27
|
|
28
28
|
ResourceBusyError = ::Mysql2::ResourceBusyError
|
29
29
|
CircuitOpenError = ::Mysql2::CircuitOpenError
|
30
|
+
PingFailure = Class.new(::Mysql2::Error)
|
30
31
|
|
31
32
|
DEFAULT_HOST = 'localhost'
|
32
33
|
DEFAULT_PORT = 3306
|
@@ -44,6 +45,9 @@ module Semian
|
|
44
45
|
|
45
46
|
base.send(:alias_method, :raw_connect, :connect)
|
46
47
|
base.send(:remove_method, :connect)
|
48
|
+
|
49
|
+
base.send(:alias_method, :raw_ping, :ping)
|
50
|
+
base.send(:remove_method, :ping)
|
47
51
|
end
|
48
52
|
|
49
53
|
def semian_identifier
|
@@ -57,6 +61,17 @@ module Semian
|
|
57
61
|
end
|
58
62
|
end
|
59
63
|
|
64
|
+
def ping
|
65
|
+
result = nil
|
66
|
+
acquire_semian_resource(adapter: :mysql, scope: :ping) do
|
67
|
+
result = raw_ping
|
68
|
+
raise PingFailure.new(result.to_s) unless result
|
69
|
+
end
|
70
|
+
result
|
71
|
+
rescue ResourceBusyError, CircuitOpenError, PingFailure
|
72
|
+
false
|
73
|
+
end
|
74
|
+
|
60
75
|
def query(*args)
|
61
76
|
if query_whitelisted?(*args)
|
62
77
|
raw_query(*args)
|
@@ -84,7 +99,7 @@ module Semian
|
|
84
99
|
def acquire_semian_resource(*)
|
85
100
|
super
|
86
101
|
rescue ::Mysql2::Error => error
|
87
|
-
if error.message =~ CONNECTION_ERROR
|
102
|
+
if error.message =~ CONNECTION_ERROR || error.is_a?(PingFailure)
|
88
103
|
semian_resource.mark_failed(error)
|
89
104
|
error.semian_identifier = semian_identifier
|
90
105
|
end
|
data/lib/semian/version.rb
CHANGED
data/test/mysql2_test.rb
CHANGED
@@ -255,11 +255,32 @@ class TestMysql2 < Minitest::Test
|
|
255
255
|
assert_equal 2, client.query('SELECT 1 + 1 as sum;').to_a.first['sum']
|
256
256
|
end
|
257
257
|
|
258
|
+
def test_pings_are_circuit_broken
|
259
|
+
client = connect_to_mysql!
|
260
|
+
|
261
|
+
def client.raw_ping
|
262
|
+
@real_pings ||= 0
|
263
|
+
@real_pings += 1
|
264
|
+
super
|
265
|
+
end
|
266
|
+
|
267
|
+
@proxy.downstream(:latency, latency: 1200).apply do
|
268
|
+
ERROR_THRESHOLD.times do
|
269
|
+
client.ping
|
270
|
+
end
|
271
|
+
|
272
|
+
assert_equal false, client.ping
|
273
|
+
end
|
274
|
+
|
275
|
+
assert_equal ERROR_THRESHOLD, client.instance_variable_get(:@real_pings)
|
276
|
+
end
|
277
|
+
|
258
278
|
private
|
259
279
|
|
260
280
|
def connect_to_mysql!(semian_options = {})
|
261
281
|
Mysql2::Client.new(
|
262
282
|
connect_timeout: 1,
|
283
|
+
read_timeout: 1,
|
263
284
|
host: '127.0.0.1',
|
264
285
|
port: '13306',
|
265
286
|
semian: SEMIAN_OPTIONS.merge(semian_options),
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: semian
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Francis
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-08-
|
12
|
+
date: 2016-08-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake-compiler
|