ebisu_connection 0.0.2 → 0.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f7397a17d9b203b5278468bc1f0bbea7a315d133
4
- data.tar.gz: 4d5904d664ec3ec2f05e4e2d6f327b0e59f683cf
3
+ metadata.gz: 4d18980741ce133172b0fb8ab9bbaa1e171a1190
4
+ data.tar.gz: 4e44601e1a9137721c63b69be36604155b8b7e0e
5
5
  SHA512:
6
- metadata.gz: 3940807ea924e4720501d3070c1a9cd51846a1f871c4923d8206770ca0435e092b2ddf3969e5210ca8c5fdb30250b215475d8c88e307950ffbff88c280b09785
7
- data.tar.gz: 945d266756d44550d10bb26884d5a37978d022980757b6f9e07255c0de27a162a8d26c2674e238a5f5238bb434e6da8fa08d6a061b86f82f2afe1b10b0a96b27
6
+ metadata.gz: 61ce15decbf4956cb90a81ac924bc62e89758bf2c290f1a73c0684350d7cd90192d3086ea268e1a0ca8951a73b64eff15e36d0c10b72002682089c507880b1e3
7
+ data.tar.gz: 88d8e8e397020242d01dd69c7d386e1a0f09a1a6295f51cf2d3dbb48faeae9f64fc2af19a5d693f64421724e5956f8e0e07d1c7467502156ac83b369a877e541
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # EbisuConnection
1
+ # EbisuConnection
2
2
 
3
3
  EbisuConnection supports to connect with Mysql slave servers. It doesn't need Load Balancer.
4
4
  You can assign a performance weight to each slave server. And slave config is reflected dynamic.
@@ -45,11 +45,12 @@ Others will use the master setting. If you want to change, write in the slave.
45
45
 
46
46
  Config of each slave server fill out config/slave.yaml
47
47
 
48
- - "slave1, 10"
49
- - "slave2, 20"
50
- -
51
- host: "slave3"
52
- weight: 30
48
+ production:
49
+ - "slave1, 10"
50
+ - "slave2, 20"
51
+ -
52
+ host: "slave3"
53
+ weight: 30
53
54
 
54
55
  config/slave.yaml is checked by end of action. If config changed, it's reflected dynamic. Application doesn't need restart.
55
56
 
@@ -59,17 +60,18 @@ String format is it. You can write config with hash.
59
60
 
60
61
  ### Only master models
61
62
 
62
- config/initializers/fresh_connection.rb
63
+ config/initializers/ebisu_connection.rb
63
64
 
64
- FreshConnection::SlaveConnection.ignore_models = %w|Model1 Model2|
65
+ EbisuConnection::ConnectionManager.ignore_models = %w|Model1 Model2|
65
66
 
66
- If models that ignore access to slave servers is exist, You can write model name at FreshConnection::SlaveConnection.ignore models.
67
+ If models that ignore access to slave servers is exist, You can write model name at EbisuConnection::ConnectionManager.ignore models.
67
68
 
68
69
  ## Usage
69
70
 
70
71
  Read query will be access to slave server.
71
72
 
72
73
  Article.where(:id => 1)
74
+ Article.count
73
75
 
74
76
  If you want to access to master saver, use readonly(false).
75
77
 
@@ -1,5 +1,6 @@
1
1
  require "fresh_connection"
2
2
  require "ebisu_connection/version"
3
+ require "ebisu_connection/conf_file"
3
4
  require "ebisu_connection/slaves"
4
5
  require "ebisu_connection/connection_manager"
5
6
 
@@ -0,0 +1,63 @@
1
+ module EbisuConnection
2
+ class ConfFile
3
+ class << self
4
+ attr_writer :slaves_file, :check_interval
5
+ attr_accessor :slave_type
6
+
7
+ def if_modify
8
+ if time_to_check? && modify?
9
+ yield
10
+ end
11
+ end
12
+
13
+ def conf_clear!
14
+ @slaves_conf = nil
15
+ @spec = nil
16
+ end
17
+
18
+ def slaves_conf
19
+ @slaves_conf ||= get_slaves_conf
20
+ end
21
+
22
+ def spec
23
+ @spec ||= get_spec
24
+ end
25
+
26
+ def slaves_file
27
+ @slaves_file || File.join(Rails.root, "config/slave.yaml")
28
+ end
29
+
30
+ def check_interval
31
+ @check_interval || 1.minute
32
+ end
33
+
34
+ private
35
+
36
+ def time_to_check?
37
+ now = Time.now
38
+ @check_time ||= now
39
+
40
+ return false if now - @check_time < check_interval
41
+
42
+ @check_time = now
43
+ true
44
+ end
45
+
46
+ def modify?
47
+ @file_mtime != File.mtime(slaves_file)
48
+ end
49
+
50
+ def get_slaves_conf
51
+ @file_mtime = File.mtime(slaves_file)
52
+ conf = YAML.load_file(slaves_file)
53
+ conf = conf[Rails.env.to_s] if conf.is_a?(Hash)
54
+ slave_type ? conf[slave_type.to_s] : conf
55
+ end
56
+
57
+ def get_spec
58
+ ret = ActiveRecord::Base.configurations[Rails.env]
59
+ ret.merge(ret["slave"] || {})
60
+ end
61
+ end
62
+ end
63
+ end
@@ -2,19 +2,19 @@ require 'yaml'
2
2
 
3
3
  module EbisuConnection
4
4
  class ConnectionManager
5
- CHECK_INTERVAL = 1.minute
6
-
7
5
  class << self
8
- attr_writer :slaves_file
9
- attr_accessor :slave_type
6
+ delegate :slave_file, :slave_file=, :check_interval, :check_interval=,
7
+ :slave_type, :slave_type=, :to => EbisuConnection::ConfFile
10
8
 
11
- def slaves_file
12
- @slaves_file || File.join(Rails.root, "config/slave.yaml")
13
- end
9
+ delegate :ignore_models=, :to => FreshConnection::SlaveConnection
14
10
  end
15
11
 
12
+ delegate :if_modify, :conf_clear!, :slaves_conf, :spec,
13
+ :to => EbisuConnection::ConfFile
14
+
16
15
  def initialize
17
16
  @mutex = Mutex.new
17
+ @slaves = {}
18
18
  end
19
19
 
20
20
  def slave_connection
@@ -23,63 +23,51 @@ module EbisuConnection
23
23
 
24
24
  def put_aside!
25
25
  return if check_own_connection
26
- return unless @file_mtime
27
-
28
- now = Time.now
29
- @check_time ||= now
30
- return if now - @check_time < CHECK_INTERVAL
31
- @check_time = now
32
26
 
33
- mtime = File.mtime(self.class.slaves_file)
34
- return if @file_mtime == mtime
35
-
36
- reserve_release_all_connection
37
- check_own_connection
27
+ if_modify do
28
+ reserve_release_all_connection
29
+ check_own_connection
30
+ end
38
31
  end
39
32
 
40
33
  def clear_all_connection!
41
34
  @mutex.synchronize do
42
- @slaves ||= {}
43
35
  @slaves.values.each do |s|
44
36
  s.all_disconnect!
45
37
  end
46
38
 
47
- @slaves = nil
48
- @slave_conf = nil
49
- @spec = nil
39
+ @slaves = {}
40
+ conf_clear!
50
41
  end
51
42
  end
52
43
 
53
44
  private
54
45
 
55
46
  def check_own_connection
56
- ret = false
57
47
  @mutex.synchronize do
58
- @slaves ||= {}
59
- if s = @slaves[current_thread_id]
60
- if ret = s.reserved_release?
61
- s.all_disconnect!
62
- @slaves.delete(current_thread_id)
63
- end
48
+ s = @slaves[current_thread_id]
49
+
50
+ if s && s.reserved_release?
51
+ s.all_disconnect!
52
+ @slaves.delete(current_thread_id)
53
+ true
54
+ else
55
+ false
64
56
  end
65
57
  end
66
- ret
67
58
  end
68
59
 
69
60
  def reserve_release_all_connection
70
61
  @mutex.synchronize do
71
- @slaves ||= {}
72
62
  @slaves.values.each do |s|
73
63
  s.reserve_release_connection!
74
64
  end
75
- @slave_conf = nil
76
- @spec = nil
65
+ conf_clear!
77
66
  end
78
67
  end
79
68
 
80
69
  def slaves
81
70
  @mutex.synchronize do
82
- @slaves ||= {}
83
71
  @slaves[current_thread_id] ||= get_slaves
84
72
  end
85
73
  end
@@ -88,25 +76,6 @@ module EbisuConnection
88
76
  EbisuConnection::Slaves.new(slaves_conf, spec)
89
77
  end
90
78
 
91
- def slaves_conf
92
- @slaves_conf ||= get_slaves_conf
93
- end
94
-
95
- def spec
96
- @spec ||= get_spec
97
- end
98
-
99
- def get_slaves_conf
100
- @file_mtime = File.mtime(self.class.slaves_file)
101
- conf = YAML.load_file(self.class.slaves_file)
102
- self.class.slave_type ? conf[self.class.slave_type] : conf
103
- end
104
-
105
- def get_spec
106
- ret = ActiveRecord::Base.configurations[Rails.env]
107
- ret.merge(ret["slave"] || {})
108
- end
109
-
110
79
  def current_thread_id
111
80
  Thread.current.object_id
112
81
  end
@@ -1,3 +1,3 @@
1
1
  module EbisuConnection
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ebisu_connection
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - tsukasaoishi
@@ -81,6 +81,7 @@ files:
81
81
  - Rakefile
82
82
  - ebisu_connection.gemspec
83
83
  - lib/ebisu_connection.rb
84
+ - lib/ebisu_connection/conf_file.rb
84
85
  - lib/ebisu_connection/connection_manager.rb
85
86
  - lib/ebisu_connection/slaves.rb
86
87
  - lib/ebisu_connection/version.rb