celluloid-io 0.16.0 → 0.16.1

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: 06e019423155a4f894648df359c6d544cf68e6e0
4
- data.tar.gz: a44dd7a23826a73dcbe7a6fa04c7fad10a104126
3
+ metadata.gz: 2a14112c061df1e593c0c40f73f6bbafbb937419
4
+ data.tar.gz: 2fc0714e1b2064a425105db7779ce83bbdb85508
5
5
  SHA512:
6
- metadata.gz: c2b6218e998263dc990af5195682cc1aebc930a31e9413f214b9e4afca30ec6a532532b6d70966408dbb5fb260c5b6a6f8d9a3190141d06d73af292c8715cef0
7
- data.tar.gz: 937e511d635e0d426791c5ba214e77319be2223bf058e2ac76e0fd8ab81e8d8c46504b42ac7594bfa52123b5ab13d55b4e4ab8ee603e9c9deca7a8a1a2b0b5e9
6
+ metadata.gz: 0853eb2f8d75efb7287a95ae81d74a2c619d7a7f79cce162110faafda75f4e41049bbf1134615b6abba5c14361a3e9dff69847ae199a9fa3f1898cd024033661
7
+ data.tar.gz: a195890888ace5714d9781c4683a6b23c4a6f3208cedaf9619c92520cf34a0ef1ee57c9bd2457a36d018ae3f433c83b23e69e5105579208570906d9167edf081
data/CHANGES.md CHANGED
@@ -1,3 +1,7 @@
1
+ 0.16.1 (2014-10-08)
2
+ -------------------
3
+ * Revert read/write interest patch as it caused file descriptor leaks
4
+
1
5
  0.16.0 (2014-09-04)
2
6
  -------------------
3
7
  * Fix bug handling simultaneous read/write interests
@@ -20,7 +20,7 @@ Gem::Specification.new do |gem|
20
20
  gem.add_dependency 'nio4r', '>= 1.0.0'
21
21
 
22
22
  gem.add_development_dependency 'rake'
23
- gem.add_development_dependency 'rspec'
23
+ gem.add_development_dependency 'rspec', '~> 2.14.0'
24
24
  gem.add_development_dependency 'benchmark_suite'
25
25
  gem.add_development_dependency 'guard-rspec'
26
26
  gem.add_development_dependency 'rb-fsevent', '~> 0.9.1' if RUBY_PLATFORM =~ /darwin/
@@ -21,7 +21,9 @@ module Celluloid
21
21
  end
22
22
 
23
23
  def initialize
24
- @nameservers = self.class.nameservers
24
+ # early return for edge case when there are no nameservers configured
25
+ # but we still want to be able to static lookups using #resolve_hostname
26
+ @nameservers = self.class.nameservers or return
25
27
 
26
28
  @server = IPAddr.new(@nameservers.sample)
27
29
 
@@ -14,25 +14,20 @@ module Celluloid
14
14
 
15
15
  def initialize
16
16
  @selector = NIO::Selector.new
17
- @monitors = {}
18
17
  end
19
18
 
20
19
  # Wait for the given IO object to become readable
21
20
  def wait_readable(io)
22
- wait io do |monitor|
23
- monitor.wait_readable
24
- end
21
+ wait io, :r
25
22
  end
26
23
 
27
24
  # Wait for the given IO object to become writable
28
25
  def wait_writable(io)
29
- wait io do |monitor|
30
- monitor.wait_writable
31
- end
26
+ wait io, :w
32
27
  end
33
28
 
34
29
  # Wait for the given IO operation to complete
35
- def wait(io)
30
+ def wait(io, set)
36
31
  # zomg ugly type conversion :(
37
32
  unless io.is_a?(::IO) or io.is_a?(OpenSSL::SSL::SSLSocket)
38
33
  if io.respond_to? :to_io
@@ -44,89 +39,21 @@ module Celluloid
44
39
  raise TypeError, "can't convert #{io.class} into IO" unless io.is_a?(::IO)
45
40
  end
46
41
 
47
- unless monitor = @monitors[io]
48
- monitor = Monitor.new(@selector, io)
49
- @monitors[io] = monitor
50
- end
51
-
52
- yield monitor
42
+ monitor = @selector.register(io, set)
43
+ monitor.value = Task.current
44
+ Task.suspend :iowait
53
45
  end
54
46
 
55
47
  # Run the reactor, waiting for events or wakeup signal
56
48
  def run_once(timeout = nil)
57
49
  @selector.select(timeout) do |monitor|
58
- monitor.value.resume
59
- end
60
- end
61
-
62
- class Monitor
63
- def initialize(selector, io)
64
- @selector = selector
65
- @io = io
66
- @interests = {}
67
- end
68
-
69
- def wait_readable
70
- wait :r
71
- end
72
-
73
- def wait_writable
74
- wait :w
75
- end
76
-
77
- def wait(interest)
78
- raise "Already waiting for #{interest.inspect}" if @interests.include?(interest)
79
- @interests[interest] = Task.current
80
- reregister
81
- Task.suspend :iowait
82
- end
83
-
84
- def reregister
85
- if @monitor
86
- @monitor.close
87
- @monitor = nil
88
- end
89
-
90
- if interests_symbol
91
- @monitor = @selector.register(@io, interests_symbol)
92
- @monitor.value = self
93
- end
94
- end
95
-
96
- def interests_symbol
97
- case @interests.keys
98
- when [:r]
99
- :r
100
- when [:w]
101
- :w
102
- when [:r, :w]
103
- :rw
104
- end
105
- end
106
-
107
- def resume
108
- raise "No monitor" unless @monitor
109
-
110
- if @monitor.readable?
111
- resume_for :r
112
- end
113
-
114
- if @monitor.writable?
115
- resume_for :w
116
- end
117
-
118
- reregister
119
- end
120
-
121
- def resume_for(interest)
122
- task = @interests.delete(interest)
50
+ task = monitor.value
51
+ monitor.close
123
52
 
124
- if task
125
- if task.running?
126
- task.resume
127
- else
128
- raise "reactor attempted to resume a dead task"
129
- end
53
+ if task.running?
54
+ task.resume
55
+ else
56
+ Logger.warn("reactor attempted to resume a dead task")
130
57
  end
131
58
  end
132
59
  end
@@ -17,6 +17,7 @@ module Celluloid
17
17
 
18
18
  def connect
19
19
  @socket.connect_nonblock
20
+ self
20
21
  rescue ::IO::WaitReadable
21
22
  wait_readable
22
23
  retry
@@ -8,7 +8,11 @@ module Celluloid
8
8
  def_delegators :@server, :listen, :sysaccept, :close, :closed?, :addr, :setsockopt
9
9
 
10
10
  def initialize(hostname_or_port, port = nil)
11
- @server = ::TCPServer.new(hostname_or_port, port)
11
+ if port.nil?
12
+ @server = ::TCPServer.new(hostname_or_port)
13
+ else
14
+ @server = ::TCPServer.new(hostname_or_port, port)
15
+ end
12
16
  end
13
17
 
14
18
  def accept
@@ -3,7 +3,7 @@ module Celluloid
3
3
  # UDPSockets with combined blocking and evented support
4
4
  class UDPSocket
5
5
  extend Forwardable
6
- def_delegators :@socket, :bind, :connect, :send, :recvfrom_nonblock, :close, :closed?
6
+ def_delegators :@socket, :addr, :bind, :connect, :send, :recvfrom_nonblock, :close, :closed?
7
7
 
8
8
  def initialize(address_family = ::Socket::AF_INET)
9
9
  @socket = ::UDPSocket.new(address_family)
@@ -1,5 +1,5 @@
1
1
  module Celluloid
2
2
  module IO
3
- VERSION = "0.16.0"
3
+ VERSION = "0.16.1"
4
4
  end
5
5
  end
@@ -2,14 +2,24 @@ require 'spec_helper'
2
2
 
3
3
  describe Celluloid::IO::DNSResolver do
4
4
  describe '#resolve' do
5
+ it 'resolves hostnames statically from hosts file without nameservers' do
6
+ # /etc/resolv.conf doesn't exist on Mac OSX when no networking is
7
+ # disabled, thus .nameservers would return nil
8
+ Celluloid::IO::DNSResolver.should_receive(:nameservers).at_most(:once) { nil }
9
+ resolver = Celluloid::IO::DNSResolver.new
10
+ resolver.resolve('localhost').should eq Resolv::IPv4.create("127.0.0.1")
11
+ end
12
+
5
13
  it 'resolves hostnames' do
6
14
  resolver = Celluloid::IO::DNSResolver.new
7
15
  resolver.resolve('localhost').should eq Resolv::IPv4.create("127.0.0.1")
8
16
  end
9
17
 
10
18
  it "resolves domain names" do
11
- resolver = Celluloid::IO::DNSResolver.new
12
- resolver.resolve("celluloid.io").should == Resolv::IPv4.create("207.97.227.245")
19
+ resolver = Celluloid::IO::DNSResolver.new
20
+ nameservers = resolver.resolve("celluloid.io")
21
+ expect(nameservers).to include Resolv::IPv4.create("104.28.21.100")
22
+ expect(nameservers).to include Resolv::IPv4.create("104.28.20.100")
13
23
  end
14
24
 
15
25
  it "resolves CNAME responses" do
@@ -5,7 +5,7 @@ describe Celluloid::IO::TCPServer do
5
5
  let(:payload) { 'ohai' }
6
6
 
7
7
  it "can be initialized without a host" do
8
- expect{ server = Celluloid::IO::TCPServer.new(2000); server.close }.to_not raise_error
8
+ expect { Celluloid::IO::TCPServer.new(2000).close }.to_not raise_error
9
9
  end
10
10
 
11
11
  context "inside Celluloid::IO" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: celluloid-io
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 0.16.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Arcieri
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-05 00:00:00.000000000 Z
11
+ date: 2014-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: celluloid
@@ -56,16 +56,16 @@ dependencies:
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 2.14.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 2.14.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: benchmark_suite
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -146,6 +146,7 @@ files:
146
146
  - lib/celluloid/io/version.rb
147
147
  - log/.gitignore
148
148
  - logo.png
149
+ - spec/celluloid/io/.dns_resolver_spec.rb.swp
149
150
  - spec/celluloid/io/actor_spec.rb
150
151
  - spec/celluloid/io/dns_resolver_spec.rb
151
152
  - spec/celluloid/io/mailbox_spec.rb
@@ -190,6 +191,7 @@ specification_version: 4
190
191
  summary: Celluloid::IO allows you to monitor multiple IO objects within a Celluloid
191
192
  actor
192
193
  test_files:
194
+ - spec/celluloid/io/.dns_resolver_spec.rb.swp
193
195
  - spec/celluloid/io/actor_spec.rb
194
196
  - spec/celluloid/io/dns_resolver_spec.rb
195
197
  - spec/celluloid/io/mailbox_spec.rb
@@ -206,4 +208,3 @@ test_files:
206
208
  - spec/fixtures/server.crt
207
209
  - spec/fixtures/server.key
208
210
  - spec/spec_helper.rb
209
- has_rdoc: