asir 1.1.0 → 1.1.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.
data/ChangeLog CHANGED
@@ -1,3 +1,9 @@
1
+ 2012-12-04 Kurt A. Stephens <ks.github@kurtstephens.com>
2
+
3
+ * v1.1.1: New version.
4
+ * Beanstalk: Moved beanstalkd support to gem asir_beanstalk.
5
+ * Buffer: Buffer needs Delegation.
6
+
1
7
  2012-12-03 Kurt A. Stephens <ks.github@kurtstephens.com>
2
8
 
3
9
  * v1.1.0: New version.
@@ -1,4 +1,5 @@
1
1
  require 'asir/transport'
2
+ require 'asir/transport/delegation'
2
3
  require 'thread'
3
4
 
4
5
  module ASIR
@@ -1,3 +1,3 @@
1
1
  module ASIR
2
- VERSION = "1.1.0"
2
+ VERSION = "1.1.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asir
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -225,12 +225,9 @@ files:
225
225
  - example/ex09.rb
226
226
  - example/ex10.rb
227
227
  - example/ex11.rb
228
- - example/ex12.rb
229
228
  - example/ex13.rb
230
229
  - example/ex14.rb
231
230
  - example/ex15.rb
232
- - example/ex16.rb
233
- - example/ex17.rb
234
231
  - example/ex18.rb
235
232
  - example/ex19.rb
236
233
  - example/ex22.rb
@@ -297,7 +294,6 @@ files:
297
294
  - lib/asir/thread_pool.rb
298
295
  - lib/asir/thread_variable.rb
299
296
  - lib/asir/transport.rb
300
- - lib/asir/transport/beanstalk.rb
301
297
  - lib/asir/transport/broadcast.rb
302
298
  - lib/asir/transport/buffer.rb
303
299
  - lib/asir/transport/composite.rb
@@ -353,7 +349,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
353
349
  version: '0'
354
350
  segments:
355
351
  - 0
356
- hash: 2626327431831346289
352
+ hash: 4360037996371201597
357
353
  required_rubygems_version: !ruby/object:Gem::Requirement
358
354
  none: false
359
355
  requirements:
@@ -362,7 +358,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
362
358
  version: '0'
363
359
  segments:
364
360
  - 0
365
- hash: 2626327431831346289
361
+ hash: 4360037996371201597
366
362
  requirements: []
367
363
  rubyforge_project:
368
364
  rubygems_version: 1.8.24
@@ -1,34 +0,0 @@
1
- # !SLIDE :capture_code_output true
2
- # Asynchronous beanstalkd service
3
-
4
- require 'example_helper'
5
- require 'asir/transport/beanstalk'
6
- require 'asir/coder/zlib'
7
- begin
8
- Email.asir.transport = t =
9
- ASIR::Transport::Beanstalk.new(:address => '127.0.0.1', :port => 30904)
10
- t.encoder =
11
- ASIR::Coder::Chain.new(:encoders =>
12
- [ ASIR::Coder::Marshal.new,
13
- ASIR::Coder::Zlib.new, ])
14
- t.start_conduit!; sleep 1
15
- pr Email.asir.send_email(:pdf_invoice,
16
- :to => "user@email.com", :customer => @customer)
17
- sleep 2
18
- server_process do
19
- t.prepare_server!
20
- t.run_server!
21
- end
22
- rescue Object => err
23
- $stderr.puts "#{err.inspect}\n#{err.backtrace * "\n"}"
24
- ensure
25
- t.close; sleep 3; server_kill; sleep 2
26
- t.stop_conduit!
27
- end
28
-
29
- # !SLIDE END
30
- # EXPECT: : client process
31
- # EXPECT: : server process
32
- # EXPECT: : Email.send_mail :pdf_invoice
33
- # EXPECT: : pr: nil
34
-
@@ -1,33 +0,0 @@
1
- # !SLIDE :capture_code_output true
2
- # Asynchronous beanstalkd service with delay option
3
-
4
- require 'example_helper'
5
- require 'asir/transport/beanstalk'
6
- begin
7
- DelayedService.asir.transport = t =
8
- ASIR::Transport::Beanstalk.new(:address => '127.0.0.1', :port => 30916)
9
- t.encoder =
10
- ASIR::Coder::Marshal.new
11
- t.start_conduit!; sleep 1
12
- server_process do
13
- t.prepare_server!
14
- t.run_server!
15
- end
16
- pr DelayedService.asir.
17
- _configure{|req, p| req.delay = 5}.
18
- do_it(Time.now)
19
- sleep 10
20
- rescue Object => err
21
- $stderr.puts "#{err.inspect}\n#{err.backtrace * "\n"}"
22
- ensure
23
- t.close; sleep 1
24
- server_kill; sleep 1
25
- t.stop_conduit!
26
- end
27
-
28
- # !SLIDE END
29
- # EXPECT: : client process
30
- # EXPECT: : server process
31
- # EXPECT: DelayedService.do_it => :ok
32
- # EXPECT: : pr: nil
33
-
@@ -1,42 +0,0 @@
1
- # !SLIDE :capture_code_output true
2
- # Buffered asynchronous beanstalkd service with delay option
3
-
4
- require 'example_helper'
5
- require 'asir/transport/beanstalk'
6
- require 'asir/transport/buffer'
7
- begin
8
- t =
9
- ASIR::Transport::Beanstalk.new(:address => '127.0.0.1', :port => 30917)
10
- t.encoder =
11
- ASIR::Coder::Marshal.new
12
- t.start_conduit!; sleep 1
13
- DelayedService.asir.transport =
14
- t0 = ASIR::Transport::Buffer.new(:transport => t)
15
- t0.pause!
16
- server_process do
17
- t.prepare_server!
18
- t.run_server!
19
- end
20
- pr [ :paused?, t0.paused?, :at, Time.now.iso8601(2) ]
21
- pr DelayedService.asir.
22
- _configure{|req, p| req.delay = 5}.
23
- do_it(Time.now)
24
- sleep 2
25
- pr [ :resuming, :size, t0.size, :at, Time.now.iso8601(2) ]
26
- t0.resume!
27
- pr [ :paused?, t0.paused?, :size, t0.size, :at, Time.now.iso8601(2) ]
28
- pr [ :resumed, :size, t0.size, :at, Time.now.iso8601(2) ]
29
- sleep 7
30
- rescue Object => err
31
- $stderr.puts "#{err.inspect}\n#{err.backtrace * "\n"}"
32
- ensure
33
- t.close; sleep 1; server_kill; sleep 1
34
- t.stop_conduit!
35
- end
36
-
37
- # !SLIDE END
38
- # EXPECT: : client process
39
- # EXPECT: : server process
40
- # EXPECT: DelayedService.do_it => :ok
41
- # EXPECT: : pr: nil
42
-
@@ -1,184 +0,0 @@
1
- require 'asir/transport/tcp_socket'
2
-
3
- module ASIR
4
- class Transport
5
- # !SLIDE
6
- # Beanstalk Transport
7
- class Beanstalk < TcpSocket
8
- LINE_TERMINATOR = "\r\n".freeze
9
-
10
- attr_accessor :tube, :priority, :delay, :ttr
11
-
12
- def initialize *args
13
- @port ||= 11300
14
- @tube ||= 'asir'
15
- @priority ||= 0
16
- @delay ||= 0
17
- @ttr ||= 600
18
- super
19
- end
20
-
21
- # !SLIDE
22
- # Sends the encoded Message payload String.
23
- def _send_message message, message_payload
24
- stream.with_stream! do | s |
25
- begin
26
- match =
27
- _beanstalk(s,
28
- "put #{message[:beanstalk_priority] || @priority} #{message[:beanstalk_delay] || @delay} #{message[:beanstalk_ttr] || @ttr} #{message_payload.size}\r\n",
29
- /\AINSERTED (\d+)\r\n\Z/,
30
- message_payload)
31
- job_id = message[:beanstalk_job_id] = match[1].to_i
32
- _log { "beanstalk_job_id = #{job_id.inspect}" } if @verbose >= 2
33
- rescue ::Exception => exc
34
- message[:beanstalk_error] = exc
35
- close
36
- raise exc
37
- end
38
- end
39
- end
40
-
41
- RESERVE = "reserve\r\n".freeze
42
-
43
- # !SLIDE
44
- # Receives the encoded Message payload String.
45
- def _receive_message channel, additional_data
46
- channel.with_stream! do | stream |
47
- begin
48
- match =
49
- _beanstalk(stream,
50
- RESERVE,
51
- /\ARESERVED (\d+) (\d+)\r\n\Z/)
52
- additional_data[:beanstalk_job_id] = match[1].to_i
53
- additional_data[:beanstalk_message_size] =
54
- size = match[2].to_i
55
- message_payload = stream.read(size)
56
- _read_line_and_expect! stream, /\A\r\n\Z/
57
- # Pass the original stream used to #_send_result below.
58
- [ message_payload, stream ]
59
- rescue ::Exception => exc
60
- _log { [ :_receive_message, :exception, exc ] }
61
- additional_data[:beanstalk_error] = exc
62
- channel.close
63
- raise exc
64
- end
65
- end
66
- end
67
-
68
- # !SLIDE
69
- # Sends the encoded Result payload String.
70
- def _send_result message, result, result_payload, channel, stream
71
- #
72
- # There is a possibility here the following could happen:
73
- #
74
- # _receive_message
75
- # channel == #<Channel:1>
76
- # channel.stream == #<TCPSocket:1234>
77
- # end
78
- # ...
79
- # ERROR OCCURES:
80
- # channel.stream.close
81
- # channel.stream = nil
82
- # ...
83
- # _send_result
84
- # channel == #<Channel:1>
85
- # channel.stream == #<TCPSocket:5678> # NEW CONNECTION
86
- # stream.write "delete #{job_id}"
87
- # ...
88
- #
89
- # Therefore: _receiver_message passes the original message stream to us.
90
- # We insure that the same stream is still the active one and use it.
91
- channel.with_stream! do | maybe_other_stream |
92
- _log [ :_send_result, "stream lost" ] if maybe_other_stream != stream
93
- job_id = message[:beanstalk_job_id] or raise "no beanstalk_job_id"
94
- _beanstalk(stream,
95
- "delete #{job_id}\r\n",
96
- /\ADELETED\r\n\Z/)
97
- end
98
- end
99
-
100
- # !SLIDE
101
- # Receives the encoded Result payload String.
102
- def _receive_result message, opaque_result
103
- nil
104
- end
105
-
106
- # !SLIDE
107
- # Sets beanstalk_delay if message.delay was specified.
108
- def relative_message_delay! message, now = nil
109
- if delay = super
110
- message[:beanstalk_delay] = delay.to_i
111
- end
112
- delay
113
- end
114
-
115
- # !SLIDE
116
- # Beanstalk protocol support
117
-
118
- # Send "something ...\r\n".
119
- # Expect /\ASOMETHING (\d+)...\r\n".
120
- def _beanstalk stream, message, expect, payload = nil
121
- _log { [ :_beanstalk, :message, message ] } if @verbose >= 3
122
- stream.write message
123
- if payload
124
- stream.write payload
125
- stream.write LINE_TERMINATOR
126
- end
127
- stream.flush
128
- if match = _read_line_and_expect!(stream, expect)
129
- _log { [ :_beanstalk, :result, match[0] ] } if @verbose >= 3
130
- end
131
- match
132
- end
133
-
134
- def _after_connect! stream
135
- if @tube
136
- _beanstalk(stream,
137
- "use #{@tube}\r\n",
138
- /\AUSING #{@tube}\r\n\Z/)
139
- end
140
- end
141
-
142
- # !SLIDE
143
- # Beanstalk Server
144
- def _server!
145
- _log { "_server! #{uri}" } if @verbose >= 1
146
- @server = connect!(:try_max => nil,
147
- :try_sleep => 1,
148
- :try_sleep_increment => 0.1,
149
- :try_sleep_max => 10) do | stream |
150
- if @tube
151
- _beanstalk(stream,
152
- "watch #{@tube}\r\n",
153
- /\AWATCHING (\d+)\r\n\Z/)
154
- end
155
- end
156
- self
157
- end
158
-
159
- def _server_accept_connection! server
160
- prepare_server! unless @server
161
- [ @server, @server ]
162
- end
163
-
164
- def _server_close_connection! in_stream, out_stream
165
- # NOTHING
166
- end
167
-
168
- def stream_eof? stream
169
- # Note: stream.eof? on a beanstalkd connection,
170
- # will cause blocking read *forever* because
171
- # beanstalk connections are long lived.
172
- false
173
- end
174
-
175
- def _start_conduit!
176
- addr = address ? "-l #{address} " : ""
177
- cmd = "beanstalkd #{addr}-p #{port}"
178
- exec(cmd)
179
- end
180
- end
181
- # !SLIDE END
182
- end # class
183
- end # module
184
-