nsq-cluster 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ea9ecab09ef0e8a1a4f7fdd3b2974d9cd4fdebaf
4
- data.tar.gz: 0dfce152f7eaff2f132018b25e36be8411e8c0d6
3
+ metadata.gz: d5964e86f6d17a088bca32caac96fccafc557c8e
4
+ data.tar.gz: 2377c713fadbadaf2346bbebe2fb2d49232670bf
5
5
  SHA512:
6
- metadata.gz: ee04feb92da1d0d50008527183d28df993f3651585148facd50c77a763454af276b0833aa3ec9815afd0eefab6568deddb00e962f1f1c9f364c3b4e8dfaef2f7
7
- data.tar.gz: bbe511eda616cfd82a5c6d09af1be2e215e1782840f8dc46da1dd1233116e9492266f52638be46114f7beac494340616d724611002fbe3e10489d6439b664cb5
6
+ metadata.gz: 31dc299ac5de30c0e4603a6361431623031fa09c4050376847804f54ecabb18038eabab6d02e5c51d1585cc1fb05dbc6838f479f15237e3dbb9582f8e9dce265
7
+ data.tar.gz: e052bb7324161a4e08b53eca460dfa805eda5627df0de60a3e94e889a87a256e9d850d5899f2d45989021867b0bf38dfd560d4c3b3883d4310ceddfb516f97b2
data/lib/nsq-cluster.rb CHANGED
@@ -11,7 +11,7 @@
11
11
  # cluster.destroy
12
12
  #
13
13
 
14
- require 'socket'
14
+ require 'net/http'
15
15
  require 'timeout'
16
16
 
17
17
  require_relative 'nsq-cluster/nsqlookupd'
@@ -19,7 +19,6 @@ require_relative 'nsq-cluster/nsqd'
19
19
  require_relative 'nsq-cluster/nsqadmin'
20
20
 
21
21
  class NsqCluster
22
- PORTSCAN_INTERVAL = 0.01
23
22
  attr_reader :nsqd, :nsqlookupd, :nsqadmin
24
23
 
25
24
  def initialize(opts = {})
@@ -31,7 +30,6 @@ class NsqCluster
31
30
  nsqd_options: {},
32
31
  silent: true
33
32
  }.merge(opts)
34
-
35
33
  @silent = opts[:silent]
36
34
 
37
35
  @nsqlookupd = create_nsqlookupds(opts[:nsqlookupd_count], opts[:nsqdlookupd_options])
@@ -39,7 +37,7 @@ class NsqCluster
39
37
  @nsqadmin = create_nsqadmin if opts[:nsqadmin]
40
38
 
41
39
  # start everything!
42
- (@nsqlookupd + @nsqd + [@nsqadmin]).compact.each { |d| d.start }
40
+ all_services.each { |d| d.start }
43
41
  end
44
42
 
45
43
 
@@ -89,9 +87,7 @@ class NsqCluster
89
87
  puts "Waiting for cluster to launch..." unless @silent
90
88
  begin
91
89
  Timeout::timeout(timeout) do
92
- service_ports.each do |port, protocol|
93
- wait_for_port(port, protocol)
94
- end
90
+ all_services.each {|service| service.block_until_running}
95
91
  puts "Cluster launched." unless @silent
96
92
  end
97
93
  rescue Timeout::Error
@@ -101,35 +97,8 @@ class NsqCluster
101
97
 
102
98
 
103
99
  private
104
- def service_ports
105
- ports = {}
106
- ports[nsqadmin.http_port] = :http if nsqadmin
107
- nsqlookupd.each do |n|
108
- ports[n.tcp_port] = :tcp
109
- ports[n.http_port] = :http
110
- end
111
- nsqd.each do |n|
112
- ports[n.tcp_port] = :tcp
113
- ports[n.http_port] = :http
114
- end
115
- ports
116
- end
117
-
118
-
119
- def wait_for_port(port, protocol)
120
- port_open = false
121
- until port_open do
122
- begin
123
- sock = TCPSocket.new('127.0.0.1', port)
124
- port_open = true
125
- puts "#{protocol.to_s.upcase} port #{port} open." unless @silent
126
- if protocol == :tcp
127
- puts "You may safely ignore: 'ERROR: failed to read protocol version - EOF'" unless @silent
128
- end
129
- sock.close
130
- rescue Errno::ECONNREFUSED
131
- end
132
- sleep PORTSCAN_INTERVAL if !port_open
133
- end
100
+ def all_services
101
+ # nsqadmin responds to /ping as well, even though it is not documented.
102
+ (@nsqlookupd + @nsqd + [@nsqadmin]).compact
134
103
  end
135
104
  end
@@ -1,4 +1,5 @@
1
1
  class ProcessWrapper
2
+ HTTPCHECK_INTERVAL = 0.01
2
3
 
3
4
 
4
5
  def initialize(opts = {})
@@ -48,5 +49,29 @@ class ProcessWrapper
48
49
  end
49
50
  end
50
51
 
51
- end
52
52
 
53
+ def block_until_running
54
+ if respond_to?(:http_port) && respond_to?(:host)
55
+ wait_for_http_port(http_port, host)
56
+ end
57
+ end
58
+
59
+
60
+ private
61
+ def wait_for_http_port(port, host)
62
+ port_open = false
63
+ until port_open do
64
+ begin
65
+ response = Net::HTTP.get_response(URI("http://#{host}:#{port}/ping"))
66
+ if response.is_a?(Net::HTTPSuccess)
67
+ port_open = true
68
+ puts "HTTP port #{port} responded to /ping." unless @silent
69
+ else
70
+ sleep HTTPCHECK_INTERVAL
71
+ end
72
+ rescue Errno::ECONNREFUSED
73
+ sleep HTTPCHECK_INTERVAL
74
+ end
75
+ end
76
+ end
77
+ end
metadata CHANGED
@@ -1,23 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nsq-cluster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wistia
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-17 00:00:00.000000000 Z
11
+ date: 2014-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: nsq-cluster
14
+ name: fakeweb
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
- type: :runtime
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: shoulda
28
+ name: jeweler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,49 +39,35 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rdoc
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '3.12'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '3.12'
55
- - !ruby/object:Gem::Dependency
56
- name: bundler
42
+ name: rspec
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - "~>"
45
+ - - ">="
60
46
  - !ruby/object:Gem::Version
61
- version: '1.0'
47
+ version: '0'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - "~>"
52
+ - - ">="
67
53
  - !ruby/object:Gem::Version
68
- version: '1.0'
54
+ version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
- name: jeweler
56
+ name: rspec-rainbow
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - "~>"
59
+ - - ">="
74
60
  - !ruby/object:Gem::Version
75
- version: 2.0.1
61
+ version: '0'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - "~>"
66
+ - - ">="
81
67
  - !ruby/object:Gem::Version
82
- version: 2.0.1
68
+ version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
- name: simplecov
70
+ name: rspec-legacy_formatters
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - ">="