nsq-cluster 0.2.1 → 0.2.2

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: 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
  - - ">="