roma-client 0.4.2 → 0.4.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: 9bf98250d1cdace281868bb804e5b6ff0f8967ba
4
- data.tar.gz: b509fa06dc3c6e732a0f3c472c5641f93ee0dff4
3
+ metadata.gz: 8fa08ca4abf7e429b64dd7ccede43f0cc1b8df38
4
+ data.tar.gz: 4229f43985000b6c82ff5dac4b87251988bbf60f
5
5
  SHA512:
6
- metadata.gz: 6df5d76cfb1a9ff408fc930a0b33b883a558a8da3764cb483914430cf064cb08d95b39c9312fb87adad1359578f9f9d3c4ef42dd2c01324c4c382f5345bad3cc
7
- data.tar.gz: de2c9ed944175faa9db14b203840f9ac9f406ad202befa783a9c0338ad49c9faddbe89d0d46e4f2e36c5a6ef8ce1106a05dd9f950b54cdd623592804b17d5f6c
6
+ metadata.gz: 2724bde9c6a933562b4729e05bdaad563fe6e604d8ed7840410b516ff366c706f844605e1205339a24cc88a5fc5640b15c815bab2dbbad51f8d7096b126e5aeb
7
+ data.tar.gz: 8e62fccf9a0a168c494500fe3509a3cad98eeb5cbfd4aafd86110a2df53fd1477699dc94989259a1e7c62262dbc81abdb8193f7b19654bb0464974f80e75e82c
data/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ * 0.4.3 (Aug 19 2015)
2
+
3
+ * Change interface of Stat object and refactoring [Hiroki Matsue] 7438faf
4
+ * Add tests for argumetns of stats [Hiroki Matsue] 9939760
5
+ * Refactor codes [Hiroki Matsue] 3d37030
6
+ * Support stat command [Hiroki Matsue] 1d75694
7
+
1
8
  * 0.4.2 (Mar 31 2015)
2
9
 
3
10
  * Add gemspec and convert "should" to "expect" on rspec tests. [Hiroki Matsue] 4c7c465
data/Gemfile.lock CHANGED
@@ -1,30 +1,29 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- roma-client (0.4.2)
4
+ roma-client (0.4.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  diff-lcs (1.2.5)
10
- json (1.8.2)
11
- rake (10.4.2)
12
- rdoc (4.2.0)
10
+ eventmachine (1.0.3)
11
+ jaro_winkler (1.3.5)
12
+ json (1.8.1)
13
+ rake (10.2.2)
14
+ rdoc (4.1.1)
13
15
  json (~> 1.4)
14
- rr (1.1.2)
15
- rspec (3.2.0)
16
- rspec-core (~> 3.2.0)
17
- rspec-expectations (~> 3.2.0)
18
- rspec-mocks (~> 3.2.0)
19
- rspec-core (3.2.2)
20
- rspec-support (~> 3.2.0)
21
- rspec-expectations (3.2.0)
22
- diff-lcs (>= 1.2.0, < 2.0)
23
- rspec-support (~> 3.2.0)
24
- rspec-mocks (3.2.1)
25
- diff-lcs (>= 1.2.0, < 2.0)
26
- rspec-support (~> 3.2.0)
27
- rspec-support (3.2.2)
16
+ roma (1.2.0)
17
+ eventmachine (~> 1.0.0)
18
+ jaro_winkler (~> 1.3.5)
19
+ rspec (2.14.1)
20
+ rspec-core (~> 2.14.0)
21
+ rspec-expectations (~> 2.14.0)
22
+ rspec-mocks (~> 2.14.0)
23
+ rspec-core (2.14.8)
24
+ rspec-expectations (2.14.5)
25
+ diff-lcs (>= 1.1.3, < 2.0)
26
+ rspec-mocks (2.14.6)
28
27
 
29
28
  PLATFORMS
30
29
  ruby
@@ -32,6 +31,6 @@ PLATFORMS
32
31
  DEPENDENCIES
33
32
  rake
34
33
  rdoc
34
+ roma
35
35
  roma-client!
36
- rr
37
36
  rspec
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  require 'singleton'
3
2
 
4
3
  module Roma
@@ -117,6 +116,7 @@ module Roma
117
116
  end
118
117
 
119
118
  private
119
+
120
120
  def initialize
121
121
  @max_pool_size = 1
122
122
  @clients = []
@@ -1,25 +1,24 @@
1
- # -*- coding: utf-8 -*-
2
1
  #
3
2
  # = roma/client/proxy/version.rb
4
3
  # This file is derived from roma client proxy daemon.
5
4
  #
6
5
  module Roma #:nodoc:
7
- module Client #:nodoc:
8
- # == What Is This Library?
9
- # ROMA client proxy daemon's version module
10
- #
11
- module VERSION
12
- # メジャーバージョン
13
- MAJOR = 0
6
+ module Client #:nodoc:
7
+ # == What Is This Library?
8
+ # ROMA client proxy daemon's version module
9
+ #
10
+ module VERSION
11
+ # MAJOR version
12
+ MAJOR = 0
14
13
 
15
- # マイナバージョン
16
- MINOR = 1
14
+ # MINOR version
15
+ MINOR = 1
17
16
 
18
- # TINY version
19
- TINY = 0
17
+ # TINY version
18
+ TINY = 0
20
19
 
21
- # バージョン文字列
22
- STRING = [MAJOR, MINOR, TINY].join('.')
23
- end
20
+ # Version string
21
+ STRING = [MAJOR, MINOR, TINY].join('.')
24
22
  end
23
+ end
25
24
  end
@@ -7,10 +7,8 @@ require 'roma/client/sender'
7
7
 
8
8
  module Roma
9
9
  module Client
10
-
11
10
  # Class to access ROMA .
12
11
  class RomaClient
13
-
14
12
  # ROMA server connect timeout .
15
13
  @@timeout = 5
16
14
 
@@ -24,33 +22,33 @@ module Roma
24
22
  #
25
23
  # [ini_nodes] ROMA nodes array
26
24
  # [plugin_modules] set plugin modules if you use .
27
- def initialize(ini_nodes,plugin_modules = nil, start_sync_routing_proc = true)
25
+ def initialize(ini_nodes, plugin_modules = nil, start_sync_routing_proc = true)
28
26
  @retry_count_write = 10
29
27
  @retry_count_read = 5
30
28
  @default_hash_name = 'roma'
31
29
 
32
30
  if plugin_modules
33
- plugin_modules.each do|plugin|
31
+ plugin_modules.each do |plugin|
34
32
  self.extend plugin
35
33
  end
36
34
  end
37
35
 
38
36
  init_sender
39
- update_rttable(ini_nodes.map{|n| n.sub(':','_')})
37
+ update_rttable(ini_nodes.map { |n| n.sub(':', '_') })
40
38
  init_sync_routing_proc if start_sync_routing_proc
41
39
  end
42
40
 
43
41
  def init_sync_routing_proc
44
- Thread.new {
42
+ Thread.new do
45
43
  begin
46
- loop {
44
+ loop do
47
45
  sleep 10
48
46
  update_rttable
49
- }
47
+ end
50
48
  rescue => e
51
49
  puts "#{e}\n#{$@}"
52
50
  end
53
- }
51
+ end
54
52
  end
55
53
  private :init_sync_routing_proc
56
54
 
@@ -377,9 +375,8 @@ module Roma
377
375
  ret.to_i
378
376
  end
379
377
 
380
- def stats
381
- raise RuntimeError.new("Unsupported yet") # TODO
382
- @sender.send_stats_command
378
+ def stats(filter: "", node: @rttable.nodes.first)
379
+ @sender.send_stats_command(filter, node)
383
380
  end
384
381
 
385
382
  def version
@@ -1,30 +1,29 @@
1
1
  require 'timeout'
2
2
  require 'yaml'
3
3
  require 'roma/client/con_pool'
4
+ require 'roma/client/stats'
4
5
 
5
6
  module Roma
6
7
  module Client
7
-
8
8
  class Sender
9
-
10
9
  def initialize
11
10
  end
12
11
 
13
12
  def send_route_mklhash_command(node_id)
14
- timeout(1){
13
+ timeout(1) do
15
14
  conn = ConPool.instance.get_connection(node_id)
16
15
  conn.write "mklhash 0\r\n"
17
16
  ret = conn.gets
18
17
  ConPool.instance.return_connection(node_id, conn)
19
18
  return ret.chomp if ret
20
- }
21
- rescue =>e
19
+ end
20
+ rescue => e
22
21
  STDERR.puts "#{node_id} #{e.inspect}"
23
22
  return nil
24
23
  end
25
24
 
26
25
  def send_routedump_command(node_id)
27
- timeout(1){
26
+ timeout(1) do
28
27
  buf = RUBY_VERSION.split('.')
29
28
  if buf[0].to_i == 1 && buf[1].to_i == 8
30
29
  return send_routedump_yaml_command(node_id)
@@ -47,8 +46,8 @@ module Roma
47
46
  rd = Marshal.load(routes)
48
47
  ConPool.instance.return_connection(node_id, conn)
49
48
  return rd
50
- }
51
- rescue =>e
49
+ end
50
+ rescue => e
52
51
  STDERR.puts "#{node_id} #{e.inspect}"
53
52
  nil
54
53
  end
@@ -58,17 +57,29 @@ module Roma
58
57
  conn.write "routingdump yaml\r\n"
59
58
 
60
59
  yaml = ''
61
- while( (line = conn.gets) != "END\r\n" )
60
+ while ((line = conn.gets) != "END\r\n")
62
61
  yaml << line
63
62
  end
64
63
 
65
64
  rd = YAML.load(yaml)
66
65
  ConPool.instance.return_connection(node_id, conn)
67
- return rd
66
+ rd
68
67
  end
69
68
 
70
- def send_stats_command
71
- # TODO
69
+ def send_stats_command(filter, node_id)
70
+ conn = ConPool.instance.get_connection(node_id)
71
+ cmd = 'stats'
72
+ cmd += " #{filter}" if filter
73
+ conn.write "#{cmd}\r\n"
74
+
75
+ stats_str = ''
76
+ while ((line = conn.gets) != "END\r\n")
77
+ stats_str << line
78
+ end
79
+
80
+ stats = Roma::Client::Stats.new(stats_str)
81
+ ConPool.instance.return_connection(node_id, conn)
82
+ stats
72
83
  end
73
84
 
74
85
  def send_version_command(ap)
@@ -76,8 +87,8 @@ module Roma
76
87
  conn.write("version\r\n")
77
88
  res = conn.gets.chomp
78
89
  ConPool.instance.return_connection(ap, conn)
79
- raise unless res
80
- return res
90
+ fail unless res
91
+ res
81
92
  end
82
93
 
83
94
  def send_verbosity_command(ap)
@@ -88,7 +99,7 @@ module Roma
88
99
 
89
100
  def send_command(nid, cmd, value = nil, receiver = :oneline_receiver)
90
101
  con = ConPool.instance.get_connection(nid)
91
- raise unless con
102
+ fail unless con
92
103
  if value
93
104
  con.write "#{cmd}\r\n#{value}\r\n"
94
105
  else
@@ -97,8 +108,8 @@ module Roma
97
108
  ret = send(receiver, con)
98
109
  ConPool.instance.return_connection(nid, con)
99
110
  if ret && ret.instance_of?(String) &&
100
- (ret =~ /^SERVER_ERROR/ || ret =~ /^CLIENT_ERROR/)
101
- raise ret
111
+ (ret =~ /^SERVER_ERROR/ || ret =~ /^CLIENT_ERROR/)
112
+ fail ret
102
113
  end
103
114
  ret
104
115
  end
@@ -107,7 +118,7 @@ module Roma
107
118
 
108
119
  def oneline_receiver(con)
109
120
  ret = con.gets
110
- raise "connection closed" if ret.nil?
121
+ fail 'connection closed' if ret.nil?
111
122
  ret.chomp
112
123
  end
113
124
 
@@ -160,7 +171,6 @@ module Roma
160
171
  end
161
172
  ret
162
173
  end
163
-
164
174
  end
165
175
  end
166
176
  end
@@ -0,0 +1,17 @@
1
+ module Roma
2
+ module Client
3
+ # TODO: Implement accessors and return values with correct type
4
+ # Now: client.stats["routing.redundant"] #=> "2"
5
+ # Better: client.stats.routing.redundant #=> 2
6
+ class Stats < Hash
7
+ def initialize(stats_str)
8
+ stats_str.each_line do |line|
9
+ line =~ /^(.+?)\s(.+)/
10
+ key = Regexp.last_match(1)
11
+ value = Regexp.last_match(2).chomp
12
+ self[key] = value
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,21 +1,20 @@
1
- # -*- coding: utf-8 -*-
2
1
  #
3
2
  # = roma/client/version.rb
4
3
  # This file is derived from roma client.
5
4
  #
6
5
  module Roma #:nodoc:
7
- module Client #:nodoc:
8
- # == What Is This Library?
9
- # ROMA client version info.
10
- #
11
- module VERSION
12
- MAJOR = 0
6
+ module Client #:nodoc:
7
+ # == What Is This Library?
8
+ # ROMA client version info.
9
+ #
10
+ module VERSION
11
+ MAJOR = 0
13
12
 
14
- MINOR = 4
13
+ MINOR = 4
15
14
 
16
- TINY = 2
15
+ TINY = 3
17
16
 
18
- STRING = [MAJOR, MINOR, TINY].join('.')
19
- end
17
+ STRING = [MAJOR, MINOR, TINY].join('.')
20
18
  end
19
+ end
21
20
  end
@@ -1,44 +1,42 @@
1
1
  require File.expand_path(File.join('..', '..', 'spec_helper'), File.dirname(__FILE__))
2
2
 
3
3
  describe Roma::Client::ClientPool do
4
+ before(:all) do
5
+ start_roma
6
+ end
7
+
8
+ after(:all) do
9
+ stop_roma
10
+ end
11
+
4
12
  def get_nodes
5
- ['127.0.0.1:12001', '127.0.0.1:12002']
13
+ DEFAULT_PORTS.map { |port| "#{DEFAULT_HOST}:#{port}" }
6
14
  end
7
15
 
8
- context "Singleton" do
16
+ context 'Singleton' do
9
17
  subject { Roma::Client::ClientPool.instance(:test) }
10
- it {
11
- expect(subject.class).to eq(Roma::Client::ClientPool)
12
- }
13
-
14
- it {
15
- expect(subject).to be_equal Roma::Client::ClientPool.instance(:test)
16
- }
17
-
18
- it {
19
- expect(subject).not_to be_equal Roma::Client::ClientPool.instance(:test2)
20
- }
21
-
22
- it {
23
- expect {
24
- Roma::Client::ClientPool.new
25
- }.to raise_error(NoMethodError,
26
- "private method `new' called for Roma::Client::ClientPool:Class")
27
- }
18
+ it { expect(subject.class).to eq(Roma::Client::ClientPool) }
19
+
20
+ it { expect(subject).to be_equal Roma::Client::ClientPool.instance(:test) }
21
+
22
+ it { expect(subject).not_to be_equal Roma::Client::ClientPool.instance(:test2) }
23
+
24
+ it do
25
+ expect { Roma::Client::ClientPool.new }.to raise_error(NoMethodError,
26
+ "private method `new' called for Roma::Client::ClientPool:Class")
27
+ end
28
28
  end
29
29
 
30
- context "max pool size of default" do
31
- subject{ Roma::Client::ClientPool.instance(:test) }
30
+ context 'max pool size of default' do
31
+ subject { Roma::Client::ClientPool.instance(:test) }
32
32
 
33
33
  describe '#max_pool_size' do
34
34
  subject { super().max_pool_size }
35
- it {
36
- is_expected.to eq(1)
37
- }
35
+ it { is_expected.to eq(1) }
38
36
  end
39
37
  end
40
38
 
41
- context "set max pool size " do
39
+ context 'set max pool size ' do
42
40
  it do
43
41
  pool = Roma::Client::ClientPool.instance(:test)
44
42
  expect(pool.max_pool_size).to eq(1)
@@ -50,7 +48,7 @@ describe Roma::Client::ClientPool do
50
48
  end
51
49
  end
52
50
 
53
- context "servers default" do
51
+ context 'servers default' do
54
52
  subject { Roma::Client::ClientPool.instance(:test) }
55
53
 
56
54
  describe '#servers' do
@@ -59,8 +57,8 @@ describe Roma::Client::ClientPool do
59
57
  end
60
58
  end
61
59
 
62
- context "servers set" do
63
- it {
60
+ context 'servers set' do
61
+ it do
64
62
  pool = Roma::Client::ClientPool.instance(:test_servers_set)
65
63
  expect(pool.servers).to be_nil
66
64
  nodes = get_nodes
@@ -68,35 +66,34 @@ describe Roma::Client::ClientPool do
68
66
  expect(pool.servers).to eq(nodes)
69
67
 
70
68
  expect(Roma::Client::ClientPool.instance(:test_ini_nodes_set2).servers).to be_nil
71
- }
69
+ end
72
70
  end
73
71
 
74
- context "client" do
72
+ context 'client' do
75
73
  subject do
76
74
  pool = Roma::Client::ClientPool.instance(:test_client)
77
75
  pool.servers = get_nodes
78
76
  pool
79
77
  end
80
78
 
81
- it { skip 'TODO: startup or mock roma server'}
82
79
  it { expect(subject.pool_count).to eq(0) }
83
- it {
80
+ it do
84
81
  client = subject.client
85
82
  expect(client.class).to eq(Roma::Client::RomaClient)
86
83
  subject.push_client(client)
87
84
  expect(subject.pool_count).to eq(1)
88
- }
89
- it { skip "TODO: check nodes" }
85
+ end
86
+ it { expect(subject.servers).to eq(get_nodes) }
90
87
  end
91
88
 
92
- context "client multi pool" do
89
+ context 'client multi pool' do
93
90
  subject do
94
91
  pool = Roma::Client::ClientPool.instance(:test_client2)
95
92
  pool.servers = get_nodes
96
93
  pool
97
94
  end
98
95
 
99
- it {
96
+ it do
100
97
  expect(subject.pool_count).to eq(0)
101
98
  client = subject.client
102
99
  expect(client).not_to be_nil
@@ -112,23 +109,23 @@ describe Roma::Client::ClientPool do
112
109
 
113
110
  expect(client).to be_equal subject.client
114
111
  expect(subject.pool_count).to eq(0)
115
- }
112
+ end
116
113
  end
117
114
 
118
- context "plugin modules" do
115
+ context 'plugin modules' do
119
116
  module TestPlugin
120
117
  def test_plugin
121
- "test_plugin"
118
+ 'test_plugin'
122
119
  end
123
120
  end
124
121
 
125
122
  module TestPlugin2
126
123
  def test_plugin2
127
- "test_plugin2"
124
+ 'test_plugin2'
128
125
  end
129
126
  end
130
127
 
131
- it {
128
+ it do
132
129
  pool = Roma::Client::ClientPool.instance(:pm_test)
133
130
  expect(pool.plugin_modules).to be_nil
134
131
 
@@ -136,9 +133,9 @@ describe Roma::Client::ClientPool do
136
133
  expect(pool.plugin_modules).not_to be_nil
137
134
  expect(pool.plugin_modules.size).to eq(1)
138
135
  pool.plugin_modules[0] == TestPlugin
139
- }
136
+ end
140
137
 
141
- it {
138
+ it do
142
139
  pool = Roma::Client::ClientPool.instance(:pms_test)
143
140
  expect(pool.plugin_modules).to be_nil
144
141
 
@@ -146,9 +143,9 @@ describe Roma::Client::ClientPool do
146
143
  expect(pool.plugin_modules.size).to eq(2)
147
144
  pool.plugin_modules[0] == TestPlugin
148
145
  pool.plugin_modules[1] == TestPlugin2
149
- }
146
+ end
150
147
 
151
- it {
148
+ it do
152
149
  pool = Roma::Client::ClientPool.instance(:pms_test2)
153
150
  pool.servers = get_nodes
154
151
  expect(pool.plugin_modules).to be_nil
@@ -156,31 +153,29 @@ describe Roma::Client::ClientPool do
156
153
  pool.plugin_modules = [TestPlugin, TestPlugin2]
157
154
  client = pool.client
158
155
  expect(client).not_to be_nil
159
- expect(client.test_plugin).to eq("test_plugin")
160
- expect(client.test_plugin2).to eq("test_plugin2")
161
- }
156
+ expect(client.test_plugin).to eq('test_plugin')
157
+ expect(client.test_plugin2).to eq('test_plugin2')
158
+ end
162
159
  end
163
160
 
164
- context "default type" do
161
+ context 'default type' do
165
162
  subject { Roma::Client::ClientPool.instance }
166
163
  it { is_expected.not_to be_nil }
167
164
  it { expect(subject.class).to eq(Roma::Client::ClientPool) }
168
165
  it { expect(subject).to be_equal Roma::Client::ClientPool.instance(:default) }
169
166
  end
170
167
 
171
- context "support hash name" do
172
- after(:all) {
173
- Roma::Client::ClientPool.instance.default_hash_name = 'roma'
174
- }
168
+ context 'support hash name' do
169
+ after(:all) { Roma::Client::ClientPool.instance.default_hash_name = 'roma' }
175
170
 
176
- subject {
171
+ subject do
177
172
  pool = Roma::Client::ClientPool.instance
178
173
  pool.servers = get_nodes
179
174
  pool
180
- }
175
+ end
181
176
 
182
177
  it { expect(subject.default_hash_name).to eq('roma') }
183
- it {
178
+ it do
184
179
  subject.default_hash_name = 'new_name'
185
180
  expect(subject.default_hash_name).to eq('new_name')
186
181
  expect(Roma::Client::ClientPool.instance.default_hash_name).to eq('new_name')
@@ -188,17 +183,17 @@ describe Roma::Client::ClientPool do
188
183
 
189
184
  client = subject.client
190
185
  expect(client.default_hash_name).to eq('new_name')
191
- }
186
+ end
192
187
  end
193
188
 
194
- context "release" do
195
- subject {
189
+ context 'release' do
190
+ subject do
196
191
  pool = Roma::Client::ClientPool.instance(:release_test)
197
192
  pool.servers = get_nodes
198
193
  pool
199
- }
194
+ end
200
195
 
201
- it {
196
+ it do
202
197
  expect(subject.pool_count).to eq(0)
203
198
  subject.client do |client|
204
199
  end
@@ -206,48 +201,48 @@ describe Roma::Client::ClientPool do
206
201
  expect(subject.pool_count).to eq(1)
207
202
  expect(subject.release).to be_truthy
208
203
  expect(subject.pool_count).to eq(0)
209
- }
204
+ end
210
205
  end
211
206
 
212
- context "client block" do
207
+ context 'client block' do
213
208
  before(:each) do
214
209
  pool = Roma::Client::ClientPool.instance(:client_block)
215
210
  pool.release
216
211
  end
217
212
 
218
- subject {
213
+ subject do
219
214
  pool = Roma::Client::ClientPool.instance(:client_block)
220
215
  pool.servers = get_nodes
221
216
  pool
222
- }
217
+ end
223
218
 
224
- it "use block"do
219
+ it 'use block'do
225
220
  expect(subject.pool_count).to eq(0)
226
221
  subject.client do |client|
227
- expect(client.set("test", "value")).to eq("STORED")
222
+ expect(client.set('test', 'value')).to eq('STORED')
228
223
  end
229
224
  expect(subject.pool_count).to eq(1)
230
225
  end
231
226
 
232
- it "raise exception in block, but pool certainly" do
227
+ it 'raise exception in block, but pool certainly' do
233
228
  expect(subject.pool_count).to eq(0)
234
229
  subject.client do |client|
235
- expect(client.set("test", "value")).to eq("STORED")
230
+ expect(client.set('test', 'value')).to eq('STORED')
236
231
  end
237
232
  expect(subject.pool_count).to eq(1)
238
233
 
239
- expect {
234
+ expect do
240
235
  subject.client do |client|
241
- raise "test error"
236
+ raise 'test error'
242
237
  end
243
- }.to raise_error RuntimeError, "test error"
238
+ end.to raise_error RuntimeError, 'test error'
244
239
 
245
240
  expect(subject.pool_count).to eq(1)
246
241
  end
247
242
  end
248
243
 
249
- context "start sync routing proc" do
250
- it {
244
+ context 'start sync routing proc' do
245
+ it do
251
246
  pool = Roma::Client::ClientPool.instance(:sync_test)
252
247
  pool.servers = get_nodes
253
248
  old_thread_count = Thread.list.length
@@ -256,9 +251,9 @@ describe Roma::Client::ClientPool do
256
251
 
257
252
  expect(pool.pool_count).to eq(1)
258
253
  expect(Thread.list.length).to eq(old_thread_count + 1)
259
- }
254
+ end
260
255
 
261
- it {
256
+ it do
262
257
  pool = Roma::Client::ClientPool.instance(:no_sync_test)
263
258
  pool.servers = get_nodes
264
259
  pool.start_sync_routing_proc = false
@@ -268,11 +263,11 @@ describe Roma::Client::ClientPool do
268
263
 
269
264
  expect(pool.pool_count).to eq(1)
270
265
  expect(Thread.list.length).to eq(old_thread_count)
271
- }
266
+ end
272
267
  end
273
268
 
274
- context "release all" do
275
- it {
269
+ context 'release all' do
270
+ it do
276
271
  pool = Roma::Client::ClientPool.instance(:release_all_1)
277
272
  pool.servers = get_nodes
278
273
  pool.client do |c|
@@ -292,7 +287,6 @@ describe Roma::Client::ClientPool do
292
287
 
293
288
  expect(Roma::Client::ClientPool.instance(:release_all_1).servers).to eq(get_nodes)
294
289
  expect(Roma::Client::ClientPool.instance(:release_all_2).servers).to eq(get_nodes)
295
- }
290
+ end
296
291
  end
297
292
  end
298
-
@@ -0,0 +1,63 @@
1
+ require File.expand_path(File.join('..', '..', 'spec_helper'), File.dirname(__FILE__))
2
+
3
+ describe Roma::Client::Stats do
4
+ before(:all) do
5
+ start_roma
6
+ nodes = DEFAULT_PORTS.map { |port| "#{DEFAULT_HOST}:#{port}" }
7
+ @client = Roma::Client::RomaClient.new(nodes)
8
+ @stats = @client.stats
9
+ end
10
+
11
+ after(:all) do
12
+ stop_roma
13
+ end
14
+
15
+ context 'first level' do
16
+ it 'accessible to version' do
17
+ expect(@stats['version']).to match(/\d+\.\d+\.\d+.*/)
18
+ end
19
+ end
20
+
21
+ context 'second level' do
22
+ it 'accessible to routing.redundant' do
23
+ expect(@stats['routing.redundant']).to eq('2')
24
+ end
25
+ end
26
+
27
+ context 'third level' do
28
+ it 'accessible to routing.nodes.length' do
29
+ expect(@stats['routing.vnodes.length']).to eq('512')
30
+ end
31
+ end
32
+
33
+ context 'filter argument' do
34
+ it 'responce only stats.run_recover' do
35
+ keyword = 'stats.run_recover'
36
+ stat = @client.stats(filter: keyword)
37
+ expect(stat.keys.size).to eq(1)
38
+ expect(stat[keyword]).to eq('false')
39
+ end
40
+ end
41
+
42
+ context 'node argument' do
43
+ it 'responce from accessed port' do
44
+ DEFAULT_PORTS.each do |port|
45
+ stat = @client.stats(node: "#{DEFAULT_HOST}:#{port}")
46
+ expect(stat['stats.address']).to eq(DEFAULT_HOST)
47
+ expect(stat['stats.port']).to eq(port)
48
+ end
49
+ end
50
+ end
51
+
52
+ context 'filter and node arguments' do
53
+ it 'responce only stats.address and stats.port from accessed port' do
54
+ DEFAULT_PORTS.each do |port|
55
+ keywords = %w(address port)
56
+ stat = @client.stats(filter: keywords.join('|'), node: "#{DEFAULT_HOST}:#{port}")
57
+ expect(stat.keys.size).to eq(2)
58
+ expect(stat['stats.address']).to eq(DEFAULT_HOST)
59
+ expect(stat['stats.port']).to eq(port)
60
+ end
61
+ end
62
+ end
63
+ end
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  require File.expand_path(File.join('..', '..', 'spec_helper'), File.dirname(__FILE__))
3
2
 
4
3
  describe Roma::Client::VERSION do
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,39 @@
1
- # -*- coding: utf-8 -*-
2
1
  require 'rspec'
2
+ require 'roma/romad'
3
3
 
4
- $:.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
5
- Dir[File.dirname(__FILE__) + "/supports/**/*.rb"].each {|f| require f}
4
+ $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ Dir[File.dirname(__FILE__) + '/supports/**/*.rb'].each { |f| require f }
6
6
 
7
7
  require 'roma-client'
8
8
 
9
- RSpec.configure do |config|
10
- config.mock_with :rr
9
+ DEFAULT_HOST = '127.0.0.1'
10
+ DEFAULT_PORTS = %w(12001 12002)
11
+ SHELL_LOG_PATH = 'roma_spec_outputs.log'
12
+
13
+ def start_roma(host: DEFAULT_HOST, ports: DEFAULT_PORTS)
14
+ nodes = ports.map { |port| "#{host}_#{port}" }
15
+
16
+ nodes.each do |node|
17
+ FileUtils.rm(Dir.glob(["#{node}.log*", "#{node}.route*"]))
18
+ end
19
+
20
+ system("mkroute #{nodes.join(' ')} --replication_in_host >> #{SHELL_LOG_PATH} 2>&1")
21
+
22
+ ports.each do |port|
23
+ system("romad #{host} -p #{port} -d --replication_in_host --disabled_cmd_protect >> #{SHELL_LOG_PATH} 2>&1")
24
+ end
11
25
  end
12
26
 
27
+ def stop_roma(host: DEFAULT_HOST, port: DEFAULT_PORTS[0])
28
+ conn = Roma::Messaging::ConPool.instance.get_connection("#{host}_#{port}")
29
+ if conn
30
+ conn.write "balse\r\n"
31
+ conn.gets
32
+ conn.write "yes\r\n"
33
+ conn.gets
34
+ conn.close
35
+ end
36
+ Roma::Client::ConPool.instance.close_all
37
+ rescue => e
38
+ puts "#{e} #{ $ERROR_POSITION}"
39
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roma-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Muga Nishizawa
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-03-31 00:00:00.000000000 Z
12
+ date: 2015-08-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -40,7 +40,7 @@ dependencies:
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0'
42
42
  - !ruby/object:Gem::Dependency
43
- name: rr
43
+ name: rdoc
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - ">="
@@ -54,7 +54,7 @@ dependencies:
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
- name: rdoc
57
+ name: roma
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - ">="
@@ -98,9 +98,11 @@ files:
98
98
  - lib/roma/client/rlogger.rb
99
99
  - lib/roma/client/routing/routing_data.rb
100
100
  - lib/roma/client/sender.rb
101
+ - lib/roma/client/stats.rb
101
102
  - lib/roma/client/tools/showbalance.rb
102
103
  - lib/roma/client/version.rb
103
104
  - spec/roma/client/client_pool_spec.rb
105
+ - spec/roma/client/stats_spec.rb
104
106
  - spec/roma/client/version_spec.rb
105
107
  - spec/spec_helper.rb
106
108
  homepage: http://roma-kvs.org/