cellect-server 1.3.3 → 2.0.0.beta1
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/.travis.yml +2 -0
- data/Guardfile +6 -0
- data/README.md +9 -5
- data/bin/console +9 -0
- data/bin/setup +6 -0
- data/cellect-server.gemspec +3 -2
- data/cellect.gemspec +2 -1
- data/lib/cellect.rb +5 -2
- data/lib/cellect/server.rb +1 -1
- data/lib/cellect/server/api.rb +2 -2
- data/lib/cellect/server/node_set.rb +6 -16
- data/lib/cellect/version.rb +1 -1
- data/spec/{server → cellect/server}/api/add_seen_spec.rb +0 -0
- data/spec/{server → cellect/server}/api/add_spec.rb +0 -0
- data/spec/{server → cellect/server}/api/remove_spec.rb +0 -0
- data/spec/{server → cellect/server}/api/sample_spec.rb +0 -0
- data/spec/{server → cellect/server}/api/user_load_spec.rb +0 -0
- data/spec/{server → cellect/server}/grouped_workflow_spec.rb +0 -0
- data/spec/cellect/server/node_set_spec.rb +16 -0
- data/spec/{server → cellect/server}/server_spec.rb +1 -10
- data/spec/{server → cellect/server}/user_spec.rb +0 -0
- data/spec/{server → cellect/server}/workflow_spec.rb +0 -0
- data/spec/spec_helper.rb +3 -7
- data/spec/support/cellect_helper.rb +3 -3
- metadata +61 -48
- data/lib/cellect/node_set.rb +0 -44
- data/lib/cellect/testing.rb +0 -7
- data/spec/server/node_set_spec.rb +0 -13
- data/spec/support/shared_examples_for_node_set.rb +0 -28
- data/spec/support/zk_setup.rb +0 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ef80181a6f62fe2ba4b39b0377cc8805377da52
|
4
|
+
data.tar.gz: 7a306ae04dbaa28fde48068f1d628dba47cb1c44
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2caf888d305d48e668d094e1216a438f4c6247968fba2991f89c1625121fda77641022320f714deb01ae5b90fbd980cc5290706f3bd9060327b0d4e16010fff1
|
7
|
+
data.tar.gz: b3c37669fe2308f65b4b77957cd41fc72017763ba03a8d598afc00cb91b87ffcc13a80f98e48850eb7f23905234ee9d3579d0fdd3efcd2ec98338bb1178e17b8
|
data/.travis.yml
CHANGED
data/Guardfile
ADDED
data/README.md
CHANGED
@@ -14,7 +14,7 @@ Available as
|
|
14
14
|
|
15
15
|
## Cellect::Server
|
16
16
|
|
17
|
-
An actor based system that provides an API around subject selection actions. Server nodes are discovered via [
|
17
|
+
An actor based system that provides an API around subject selection actions. Server nodes are discovered via [Attention](https://github.com/parrish/attention).
|
18
18
|
|
19
19
|
### Cellect::Server::Adapters
|
20
20
|
|
@@ -25,7 +25,13 @@ We're overriding the default adapter with a customization in [cellect_panoptes](
|
|
25
25
|
|
26
26
|
## Cellect::Client
|
27
27
|
|
28
|
-
Provides
|
28
|
+
Provides operations for server awareness and API communication.
|
29
|
+
|
30
|
+
API timeouts can be set with
|
31
|
+
|
32
|
+
```ruby
|
33
|
+
Cellect::Client::Connection.timeout = 5 # seconds
|
34
|
+
```
|
29
35
|
|
30
36
|
|
31
37
|
## Building
|
@@ -42,9 +48,7 @@ To install rice your Ruby must be compiled with shared libraries enabled, from t
|
|
42
48
|
|
43
49
|
## Testing
|
44
50
|
|
45
|
-
* You'll need a local
|
46
|
-
* `brew install zookeeper`
|
47
|
-
* Note: this may require a Java Runtime (JRE) install, `brew cask install java`
|
51
|
+
* You'll need a local Redis server to run the specs.
|
48
52
|
|
49
53
|
Run the specs with `rake`
|
50
54
|
|
data/bin/console
ADDED
data/bin/setup
ADDED
data/cellect-server.gemspec
CHANGED
@@ -27,14 +27,15 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_development_dependency 'rspec'
|
28
28
|
spec.add_development_dependency 'rack-test'
|
29
29
|
spec.add_development_dependency 'pry'
|
30
|
+
spec.add_development_dependency 'guard'
|
31
|
+
spec.add_development_dependency 'guard-rspec'
|
30
32
|
spec.add_development_dependency 'puma', '~> 2.8'
|
31
33
|
spec.add_development_dependency 'pg', '~> 0.17'
|
32
34
|
spec.add_development_dependency 'connection_pool', '~> 2.0'
|
33
35
|
|
34
36
|
spec.add_runtime_dependency 'diff_set', '~> 0.0.3'
|
35
37
|
spec.add_runtime_dependency 'celluloid', '0.16.0'
|
36
|
-
spec.add_runtime_dependency 'celluloid-io', '0.16.0'
|
37
38
|
spec.add_runtime_dependency 'http', '~> 0.6'
|
38
|
-
spec.add_runtime_dependency '
|
39
|
+
spec.add_runtime_dependency 'attention', '~> 0.0.4'
|
39
40
|
spec.add_runtime_dependency 'grape', '~> 0.7'
|
40
41
|
end
|
data/cellect.gemspec
CHANGED
@@ -23,8 +23,9 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency 'oj'
|
24
24
|
spec.add_development_dependency 'rspec'
|
25
25
|
spec.add_development_dependency 'rack-test'
|
26
|
-
spec.add_development_dependency 'zk-server'
|
27
26
|
spec.add_development_dependency 'pry'
|
27
|
+
spec.add_development_dependency 'guard'
|
28
|
+
spec.add_development_dependency 'guard-rspec'
|
28
29
|
spec.add_development_dependency 'puma', '~> 2.8'
|
29
30
|
spec.add_development_dependency 'pg', '~> 0.17'
|
30
31
|
spec.add_development_dependency 'connection_pool', '~> 2.0'
|
data/lib/cellect.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
require 'celluloid'
|
2
|
-
require 'celluloid/io'
|
3
2
|
require 'cellect/version'
|
3
|
+
require 'attention'
|
4
4
|
|
5
5
|
module Cellect
|
6
|
-
|
7
6
|
end
|
7
|
+
|
8
|
+
Attention.options[:namespace] = 'cellect'
|
9
|
+
Attention.options[:redis_url] = ENV['REDIS_URL'] if ENV['REDIS_URL']
|
10
|
+
Attention.options[:ttl] = 20
|
data/lib/cellect/server.rb
CHANGED
data/lib/cellect/server/api.rb
CHANGED
@@ -13,7 +13,7 @@ module Cellect
|
|
13
13
|
#
|
14
14
|
# Provides system load information
|
15
15
|
get :stats do
|
16
|
-
|
16
|
+
instance = Attention.instance
|
17
17
|
usage = ->(keyword) do
|
18
18
|
`ps axo #{ keyword }`.chomp.split("\n")[1..-1].collect(&:to_f).inject :+
|
19
19
|
end
|
@@ -21,7 +21,7 @@ module Cellect
|
|
21
21
|
{
|
22
22
|
memory: usage.call('%mem'),
|
23
23
|
cpu: usage.call('%cpu'),
|
24
|
-
|
24
|
+
instance: instance.id,
|
25
25
|
status: Cellect::Server.adapter.status.merge({
|
26
26
|
workflows_ready: Cellect::Server.ready?,
|
27
27
|
workflows: Workflow.all.map(&:status)
|
@@ -1,22 +1,12 @@
|
|
1
|
-
require 'cellect/node_set'
|
2
|
-
require 'socket'
|
3
|
-
|
4
1
|
module Cellect
|
5
2
|
module Server
|
6
|
-
class NodeSet
|
7
|
-
|
8
|
-
|
9
|
-
protected
|
3
|
+
class NodeSet
|
4
|
+
attr_reader :instance
|
10
5
|
|
11
|
-
# Registers this server instance
|
12
|
-
def
|
13
|
-
|
14
|
-
|
15
|
-
address = Socket.ip_address_list.find{ |address| address.ipv4? && !address.ipv4_loopback? }
|
16
|
-
raise "Cannot identify IP address" unless address
|
17
|
-
# Register this instance with an autoincrementing id
|
18
|
-
path = zk.create '/nodes/node', data: address.ip_address, mode: :ephemeral_sequential
|
19
|
-
self.id = path.sub /^\/nodes\//, ''
|
6
|
+
# Registers this server instance
|
7
|
+
def initialize
|
8
|
+
Attention.activate
|
9
|
+
@instance = Attention.instance
|
20
10
|
end
|
21
11
|
end
|
22
12
|
end
|
data/lib/cellect/version.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Cellect::Server
|
4
|
+
describe NodeSet do
|
5
|
+
describe '#setup' do
|
6
|
+
it 'should activate this node' do
|
7
|
+
expect(Attention).to receive :activate
|
8
|
+
subject
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should register this node' do
|
12
|
+
expect(subject.instance).to be_a Attention::Instance
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -42,16 +42,7 @@ module Cellect::Server
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it 'should include information' do
|
45
|
-
expect(response.keys).to match_array %w(memory cpu
|
46
|
-
end
|
47
|
-
|
48
|
-
context 'node_set' do
|
49
|
-
let(:node_set){ response['node_set'] }
|
50
|
-
|
51
|
-
it 'should include information' do
|
52
|
-
expect(node_set['id']).to eql 'node0000000000'
|
53
|
-
expect(node_set['ready']).to eql true
|
54
|
-
end
|
45
|
+
expect(response.keys).to match_array %w(memory cpu instance status)
|
55
46
|
end
|
56
47
|
|
57
48
|
context 'status' do
|
File without changes
|
File without changes
|
data/spec/spec_helper.rb
CHANGED
@@ -10,11 +10,8 @@ end
|
|
10
10
|
|
11
11
|
Bundler.require :test, :development
|
12
12
|
|
13
|
-
ENV['CELLECT_POOL_SIZE'] = '3'
|
14
|
-
SPAWN_ZK = !ENV['ZK_URL']
|
15
13
|
require 'pry'
|
16
14
|
require 'oj'
|
17
|
-
require './spec/support/zk_setup.rb'
|
18
15
|
require 'cellect/server'
|
19
16
|
require 'cellect/client'
|
20
17
|
require 'celluloid/rspec'
|
@@ -33,12 +30,11 @@ RSpec.configure do |config|
|
|
33
30
|
config.include CellectHelper
|
34
31
|
|
35
32
|
config.around(:each) do |example|
|
33
|
+
Redis.new.flushdb
|
36
34
|
Celluloid.boot
|
35
|
+
Attention.deactivate
|
37
36
|
example.run
|
38
37
|
Celluloid.shutdown
|
39
|
-
|
40
|
-
|
41
|
-
config.after(:suite) do
|
42
|
-
ZK_Setup.stop_zk
|
38
|
+
Attention.deactivate
|
43
39
|
end
|
44
40
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'timeout'
|
2
2
|
|
3
3
|
module CellectHelper
|
4
|
-
def pass_until(&block)
|
5
|
-
Timeout::timeout(
|
4
|
+
def pass_until(timeout: 1, &block)
|
5
|
+
Timeout::timeout(timeout) do
|
6
6
|
Thread.pass until block.call
|
7
7
|
end
|
8
8
|
rescue => e
|
@@ -10,7 +10,7 @@ module CellectHelper
|
|
10
10
|
raise e
|
11
11
|
end
|
12
12
|
|
13
|
-
def pass_until_state_of(obj, is:)
|
13
|
+
def pass_until_state_of(obj, timeout: 1, is:)
|
14
14
|
Timeout::timeout(1) do
|
15
15
|
Thread.pass until obj.state == is
|
16
16
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cellect-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Parrish
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -94,6 +94,34 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: guard
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: guard-rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
126
|
name: puma
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,20 +192,6 @@ dependencies:
|
|
164
192
|
- - '='
|
165
193
|
- !ruby/object:Gem::Version
|
166
194
|
version: 0.16.0
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: celluloid-io
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - '='
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: 0.16.0
|
174
|
-
type: :runtime
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - '='
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: 0.16.0
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
196
|
name: http
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -193,19 +207,19 @@ dependencies:
|
|
193
207
|
- !ruby/object:Gem::Version
|
194
208
|
version: '0.6'
|
195
209
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
210
|
+
name: attention
|
197
211
|
requirement: !ruby/object:Gem::Requirement
|
198
212
|
requirements:
|
199
213
|
- - "~>"
|
200
214
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
215
|
+
version: 0.0.4
|
202
216
|
type: :runtime
|
203
217
|
prerelease: false
|
204
218
|
version_requirements: !ruby/object:Gem::Requirement
|
205
219
|
requirements:
|
206
220
|
- - "~>"
|
207
221
|
- !ruby/object:Gem::Version
|
208
|
-
version:
|
222
|
+
version: 0.0.4
|
209
223
|
- !ruby/object:Gem::Dependency
|
210
224
|
name: grape
|
211
225
|
requirement: !ruby/object:Gem::Requirement
|
@@ -223,7 +237,9 @@ dependencies:
|
|
223
237
|
description: ''
|
224
238
|
email:
|
225
239
|
- michael@zooniverse.org
|
226
|
-
executables:
|
240
|
+
executables:
|
241
|
+
- console
|
242
|
+
- setup
|
227
243
|
extensions: []
|
228
244
|
extra_rdoc_files: []
|
229
245
|
files:
|
@@ -231,14 +247,16 @@ files:
|
|
231
247
|
- ".rspec"
|
232
248
|
- ".travis.yml"
|
233
249
|
- Gemfile
|
250
|
+
- Guardfile
|
234
251
|
- LICENSE
|
235
252
|
- README.md
|
236
253
|
- Rakefile
|
254
|
+
- bin/console
|
255
|
+
- bin/setup
|
237
256
|
- cellect-server.gemspec
|
238
257
|
- cellect.gemspec
|
239
258
|
- data/.gitkeep
|
240
259
|
- lib/cellect.rb
|
241
|
-
- lib/cellect/node_set.rb
|
242
260
|
- lib/cellect/server.rb
|
243
261
|
- lib/cellect/server/adapters.rb
|
244
262
|
- lib/cellect/server/adapters/default.rb
|
@@ -251,9 +269,18 @@ files:
|
|
251
269
|
- lib/cellect/server/node_set.rb
|
252
270
|
- lib/cellect/server/user.rb
|
253
271
|
- lib/cellect/server/workflow.rb
|
254
|
-
- lib/cellect/testing.rb
|
255
272
|
- lib/cellect/version.rb
|
256
273
|
- log/.gitkeep
|
274
|
+
- spec/cellect/server/api/add_seen_spec.rb
|
275
|
+
- spec/cellect/server/api/add_spec.rb
|
276
|
+
- spec/cellect/server/api/remove_spec.rb
|
277
|
+
- spec/cellect/server/api/sample_spec.rb
|
278
|
+
- spec/cellect/server/api/user_load_spec.rb
|
279
|
+
- spec/cellect/server/grouped_workflow_spec.rb
|
280
|
+
- spec/cellect/server/node_set_spec.rb
|
281
|
+
- spec/cellect/server/server_spec.rb
|
282
|
+
- spec/cellect/server/user_spec.rb
|
283
|
+
- spec/cellect/server/workflow_spec.rb
|
257
284
|
- spec/fixtures/user_data/complete_user.json
|
258
285
|
- spec/fixtures/user_data/new_user.json
|
259
286
|
- spec/fixtures/user_data/partial_user.json
|
@@ -265,24 +292,12 @@ files:
|
|
265
292
|
- spec/fixtures/workflow_data/pairwise_random.json
|
266
293
|
- spec/fixtures/workflow_data/priority.json
|
267
294
|
- spec/fixtures/workflow_data/random.json
|
268
|
-
- spec/server/api/add_seen_spec.rb
|
269
|
-
- spec/server/api/add_spec.rb
|
270
|
-
- spec/server/api/remove_spec.rb
|
271
|
-
- spec/server/api/sample_spec.rb
|
272
|
-
- spec/server/api/user_load_spec.rb
|
273
|
-
- spec/server/grouped_workflow_spec.rb
|
274
|
-
- spec/server/node_set_spec.rb
|
275
|
-
- spec/server/server_spec.rb
|
276
|
-
- spec/server/user_spec.rb
|
277
|
-
- spec/server/workflow_spec.rb
|
278
295
|
- spec/spec_helper.rb
|
279
296
|
- spec/support/cellect_helper.rb
|
280
297
|
- spec/support/shared_api_context.rb
|
281
|
-
- spec/support/shared_examples_for_node_set.rb
|
282
298
|
- spec/support/shared_examples_for_set.rb
|
283
299
|
- spec/support/shared_examples_for_workflow.rb
|
284
300
|
- spec/support/spec_adapter.rb
|
285
|
-
- spec/support/zk_setup.rb
|
286
301
|
- tmp/.gitkeep
|
287
302
|
homepage: https://github.com/parrish/Cellect
|
288
303
|
licenses:
|
@@ -299,9 +314,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
299
314
|
version: '0'
|
300
315
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
301
316
|
requirements:
|
302
|
-
- - "
|
317
|
+
- - ">"
|
303
318
|
- !ruby/object:Gem::Version
|
304
|
-
version:
|
319
|
+
version: 1.3.1
|
305
320
|
requirements: []
|
306
321
|
rubyforge_project:
|
307
322
|
rubygems_version: 2.4.2
|
@@ -309,6 +324,16 @@ signing_key:
|
|
309
324
|
specification_version: 4
|
310
325
|
summary: ''
|
311
326
|
test_files:
|
327
|
+
- spec/cellect/server/api/add_seen_spec.rb
|
328
|
+
- spec/cellect/server/api/add_spec.rb
|
329
|
+
- spec/cellect/server/api/remove_spec.rb
|
330
|
+
- spec/cellect/server/api/sample_spec.rb
|
331
|
+
- spec/cellect/server/api/user_load_spec.rb
|
332
|
+
- spec/cellect/server/grouped_workflow_spec.rb
|
333
|
+
- spec/cellect/server/node_set_spec.rb
|
334
|
+
- spec/cellect/server/server_spec.rb
|
335
|
+
- spec/cellect/server/user_spec.rb
|
336
|
+
- spec/cellect/server/workflow_spec.rb
|
312
337
|
- spec/fixtures/user_data/complete_user.json
|
313
338
|
- spec/fixtures/user_data/new_user.json
|
314
339
|
- spec/fixtures/user_data/partial_user.json
|
@@ -320,21 +345,9 @@ test_files:
|
|
320
345
|
- spec/fixtures/workflow_data/pairwise_random.json
|
321
346
|
- spec/fixtures/workflow_data/priority.json
|
322
347
|
- spec/fixtures/workflow_data/random.json
|
323
|
-
- spec/server/api/add_seen_spec.rb
|
324
|
-
- spec/server/api/add_spec.rb
|
325
|
-
- spec/server/api/remove_spec.rb
|
326
|
-
- spec/server/api/sample_spec.rb
|
327
|
-
- spec/server/api/user_load_spec.rb
|
328
|
-
- spec/server/grouped_workflow_spec.rb
|
329
|
-
- spec/server/node_set_spec.rb
|
330
|
-
- spec/server/server_spec.rb
|
331
|
-
- spec/server/user_spec.rb
|
332
|
-
- spec/server/workflow_spec.rb
|
333
348
|
- spec/spec_helper.rb
|
334
349
|
- spec/support/cellect_helper.rb
|
335
350
|
- spec/support/shared_api_context.rb
|
336
|
-
- spec/support/shared_examples_for_node_set.rb
|
337
351
|
- spec/support/shared_examples_for_set.rb
|
338
352
|
- spec/support/shared_examples_for_workflow.rb
|
339
353
|
- spec/support/spec_adapter.rb
|
340
|
-
- spec/support/zk_setup.rb
|
data/lib/cellect/node_set.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'zk'
|
2
|
-
|
3
|
-
module Cellect
|
4
|
-
class NodeSet
|
5
|
-
include Celluloid
|
6
|
-
ConnectionError = Class.new(StandardError)
|
7
|
-
|
8
|
-
attr_accessor :zk, :state
|
9
|
-
|
10
|
-
# Sets up the node set and starts connecting to ZooKeeper
|
11
|
-
def initialize(zk_url = nil)
|
12
|
-
@zk_url = zk_url
|
13
|
-
self.state = :initializing
|
14
|
-
after(0.001){ async.initialize_zk } # don't block waiting for ZK to connect
|
15
|
-
end
|
16
|
-
|
17
|
-
# Connect to ZooKeeper, setup this node, and change state
|
18
|
-
def initialize_zk
|
19
|
-
Timeout::timeout(timeout_duration) do
|
20
|
-
self.zk = ZK.new zk_url, chroot: '/cellect'
|
21
|
-
end
|
22
|
-
setup
|
23
|
-
self.state = :ready
|
24
|
-
end
|
25
|
-
|
26
|
-
def ready?
|
27
|
-
state == :ready
|
28
|
-
end
|
29
|
-
|
30
|
-
protected
|
31
|
-
|
32
|
-
def timeout_duration
|
33
|
-
ENV.fetch('ZK_TIMEOUT', 5).to_i
|
34
|
-
end
|
35
|
-
|
36
|
-
def zk_url
|
37
|
-
@zk_url || ENV.fetch('ZK_URL', 'localhost:2181')
|
38
|
-
end
|
39
|
-
|
40
|
-
def setup
|
41
|
-
# Specialized in subclasses
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
data/lib/cellect/testing.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Cellect::Server
|
4
|
-
describe NodeSet do
|
5
|
-
it_behaves_like 'node set'
|
6
|
-
let(:node_set){ Cellect::Server.node_set.actors.first }
|
7
|
-
|
8
|
-
it 'should register this node' do
|
9
|
-
expect(node_set.id).to eq 'node0000000000'
|
10
|
-
expect(node_set.zk.get('/nodes/node0000000000').first).to match /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
shared_examples_for 'node set' do
|
2
|
-
let(:node_set){ Cellect::NodeSet.new }
|
3
|
-
|
4
|
-
it 'should connect to zoo keeper' do
|
5
|
-
expect(node_set.zk).to be_nil
|
6
|
-
pass_until_state_of node_set, is: :ready
|
7
|
-
expect(node_set.zk).to be_connected
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'should know the connection state' do
|
11
|
-
expect(node_set.state).to be :initializing
|
12
|
-
pass_until_state_of node_set, is: :ready
|
13
|
-
expect(node_set).to be_ready
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should accept a connection string' do
|
17
|
-
url_before = ENV['ZK_URL']
|
18
|
-
begin
|
19
|
-
pass_until_state_of node_set, is: :ready
|
20
|
-
ENV['ZK_URL'] = 'foobar'
|
21
|
-
expect(node_set.send(:zk_url)).to eq 'foobar'
|
22
|
-
ENV.delete 'ZK_URL'
|
23
|
-
expect(node_set.send(:zk_url)).to eq 'localhost:2181'
|
24
|
-
ensure
|
25
|
-
ENV['ZK_URL'] = url_before
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
data/spec/support/zk_setup.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
module ZK_Setup
|
2
|
-
def self.start_zk(port=21811)
|
3
|
-
@port = port
|
4
|
-
if SPAWN_ZK
|
5
|
-
kill_old_zk_servers
|
6
|
-
remove_zk_data
|
7
|
-
server = ZK::Server.new do |config|
|
8
|
-
config.client_port = port
|
9
|
-
config.client_port_address = 'localhost'
|
10
|
-
config.force_sync = false
|
11
|
-
config.tick_time = 2000
|
12
|
-
config.init_limit = 10
|
13
|
-
config.sync_limit = 5
|
14
|
-
config.snap_count = 1000000
|
15
|
-
config.base_dir = zk_dir
|
16
|
-
end
|
17
|
-
server.run
|
18
|
-
@zk_server = server
|
19
|
-
ENV['ZK_URL'] = "localhost:#{port}"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.stop_zk
|
24
|
-
if SPAWN_ZK
|
25
|
-
@zk_server.shutdown
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.zk_dir
|
30
|
-
File.join CELLECT_ROOT, 'tmp/zookeeper'
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.zk_ok?
|
34
|
-
`echo ruok | nc 127.0.0.1 #{@port}`.chomp == 'imok'
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.kill_old_zk_servers
|
38
|
-
if zk_ok?
|
39
|
-
pid = `ps aux | grep -e 'Cellect[\/]tmp[\/]zookeeper'`.split[1]
|
40
|
-
puts "Killing rogue zookeeper process: #{ pid }..."
|
41
|
-
`kill -s TERM #{ pid }`
|
42
|
-
sleep 1
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.remove_zk_data
|
47
|
-
`rm -rf #{ zk_dir }; mkdir -p #{ zk_dir }`
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
ZK_Setup.start_zk
|