slave_pools 1.1.1 → 1.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/README.md +0 -11
- data/lib/slave_pools/config.rb +0 -6
- data/lib/slave_pools/connection_proxy.rb +2 -20
- data/lib/slave_pools/engine.rb +0 -5
- data/lib/slave_pools/version.rb +1 -1
- data/spec/connection_proxy_spec.rb +1 -10
- 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: 50f5e7c113601d6c4102dd8660462ae9a1f62330
|
4
|
+
data.tar.gz: f0af5c9ca9d4c7bf04e93688d6090374389ff091
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d51b2c0210454fbf3188f7c95ae46556846676bb3d5453ba46a29eef8f374ec75a3c1e16fdbff13f117e22fa953001e9a2db9a1587456008ab9e9fbe376c37a6
|
7
|
+
data.tar.gz: db186e0357c7221d768a285e39d666bc3139e15170d9b6b14f78399ab35e8baa657268f751a7faaceb5808347d70019a10c56d85c9faa739743332ed79007a63
|
data/README.md
CHANGED
@@ -88,17 +88,6 @@ Add a `config/initializers/slave_pools.rb` if you want to change config settings
|
|
88
88
|
|
89
89
|
SlavePools.config.defaults_to_master = true
|
90
90
|
|
91
|
-
#### Configure Errors to not replay on master
|
92
|
-
|
93
|
-
Some errors you may not want to replay on master, e.g. queries that timeout.
|
94
|
-
|
95
|
-
This can be configured by updating the no_replay_on_master with a hash of errors and the corresponding messages that should not be replayed, e.g.:
|
96
|
-
|
97
|
-
SlavePools.config.no_replay_on_master = {
|
98
|
-
'Mysql2::Error' => ['Timeout waiting for a response from the last query', 'other error message that you don't want to replay'],
|
99
|
-
'TimeoutError' => ['some message']
|
100
|
-
}
|
101
|
-
|
102
91
|
## Usage
|
103
92
|
|
104
93
|
Toggle to next replica:
|
data/lib/slave_pools/config.rb
CHANGED
@@ -13,16 +13,10 @@ module SlavePools
|
|
13
13
|
# Defaults are based on Rails version.
|
14
14
|
attr_accessor :safe_methods
|
15
15
|
|
16
|
-
# enter a list of errors/messages that shouldn't fall back to master
|
17
|
-
# of the form {'ErrorClass' => ['message regex1', 'message regex 2'], }
|
18
|
-
# Defaults are {'Mysql2::Error' => ['Timeout waiting for a response from the last query']}.
|
19
|
-
attr_accessor :no_replay_on_master
|
20
|
-
|
21
16
|
def initialize
|
22
17
|
@environment = 'development'
|
23
18
|
@defaults_to_master = false
|
24
19
|
@safe_methods = []
|
25
|
-
@no_replay_on_master = {}
|
26
20
|
end
|
27
21
|
end
|
28
22
|
end
|
@@ -108,27 +108,9 @@ module SlavePools
|
|
108
108
|
rescue => e
|
109
109
|
SlavePools.log :error, "Error during ##{method}: #{e}"
|
110
110
|
log_proxy_state
|
111
|
-
raise if conn == master
|
112
111
|
|
113
|
-
|
114
|
-
|
115
|
-
SlavePools.log :error, "Replaying on master."
|
116
|
-
route_to(master, method, *args, &block)
|
117
|
-
else
|
118
|
-
current.retrieve_connection.verify! # may reconnect
|
119
|
-
raise e
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
# decides whether to replay query against master based on the
|
124
|
-
# exception and message.
|
125
|
-
# These can be adjusted by setting SlavePools.configs.no_replay_on_master.
|
126
|
-
def safe_to_replay(e)
|
127
|
-
return true unless flagged_messages_for_error = SlavePools.config.no_replay_on_master[e.class.to_s]
|
128
|
-
|
129
|
-
return false if flagged_messages_for_error.any? {|m| e.message.match(m)}
|
130
|
-
|
131
|
-
true
|
112
|
+
current.retrieve_connection.verify! # may reconnect
|
113
|
+
raise e
|
132
114
|
end
|
133
115
|
|
134
116
|
private
|
data/lib/slave_pools/engine.rb
CHANGED
@@ -21,11 +21,6 @@ module SlavePools
|
|
21
21
|
else
|
22
22
|
warn "Unsupported ActiveRecord version #{ActiveRecord.version}. Please whitelist the safe methods."
|
23
23
|
end
|
24
|
-
if SlavePools.config.no_replay_on_master.blank?
|
25
|
-
SlavePools.config.no_replay_on_master = {
|
26
|
-
'Mysql2::Error' => ['Timeout waiting for a response from the last query']
|
27
|
-
}
|
28
|
-
end
|
29
24
|
end
|
30
25
|
|
31
26
|
config.after_initialize do
|
data/lib/slave_pools/version.rb
CHANGED
@@ -143,16 +143,7 @@ describe SlavePools do
|
|
143
143
|
@proxy.should respond_to(:unsafe)
|
144
144
|
end
|
145
145
|
|
146
|
-
it 'should
|
147
|
-
SlavePools.config.no_replay_on_master = {'Mysql2::Error' => ['random message']}
|
148
|
-
@default_slave1.should_receive(:select_all).once.and_raise(Mysql2::Error.new('Timeout waiting for a response'))
|
149
|
-
@default_slave2.should_not_receive(:select_all)
|
150
|
-
@master.should_receive(:select_all).and_return(true)
|
151
|
-
lambda { @proxy.select_all(@sql) }.should_not raise_error
|
152
|
-
end
|
153
|
-
|
154
|
-
it 'should re-raise a Error that is flagged as no replay' do
|
155
|
-
SlavePools.config.no_replay_on_master = {'ArgumentError' => ['random message']}
|
146
|
+
it 'should not replay errors on master' do
|
156
147
|
@default_slave1.should_receive(:select_all).once.and_raise(ArgumentError.new('random message'))
|
157
148
|
@default_slave2.should_not_receive(:select_all)
|
158
149
|
@master.should_not_receive(:select_all)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slave_pools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Drabik
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-06-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|