cocaine-framework 0.12.0.pre.rc11 → 0.12.0.pre.rc12

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: 9efb1a21fdd5a1b003173de5adac49c03ec69ae0
4
- data.tar.gz: 7db1ed29a8d0b549f311eb863ec124ac20b013f5
3
+ metadata.gz: 61ff9e8e94378b608589075a7eb84926d4e45b0d
4
+ data.tar.gz: 7c362ec4035cc9c4d86bb03b7e33ea427526b0ee
5
5
  SHA512:
6
- metadata.gz: e6b3ceb12864fea3a933cbe7bb4aebff63e7a28fcd9f1a7b90778a2e402b2746e57a80385484fc7aad54d66e9db87f1c885082cfe449f2cd10161588db54d6f3
7
- data.tar.gz: 1b62eb843a0e0802de7937e68a30201400fbc6ef0c3b325f216df0437d7e84e4a70b2296529c4e48a27c9f5b651d2fa6a3ddccc080805e6d7152ff5dad771454
6
+ metadata.gz: b125012fe2b5cfc6764f2dc8b0295ad7635ab4b5af3e870ab3758caed08d134952f6ac1e2d2bba3dbc2ffd8116c1212a09dd639792677205045d96fb57e888e6
7
+ data.tar.gz: a05ec46783f26b660ff4773a79d03f77e36fa6b6415c416a9a6bb27779456ebc799a650fbb84cf4fdade56e7a2042830d65a4dcc777d109b0d2d663010cf5d27
@@ -75,7 +75,9 @@ module Cocaine
75
75
  end
76
76
 
77
77
  # [API]
78
- # Read-only part for shared reader state.
78
+ # Read-only part for reader shared state.
79
+ # Allows to receive unpacked objects from the channel.
80
+ # Returns tuple with message id and payload.
79
81
  class RxMailbox < Mailbox
80
82
  def recv(timeout=30.0)
81
83
  @queue.receive timeout
@@ -83,7 +85,7 @@ module Cocaine
83
85
  end
84
86
 
85
87
  # [Detail]
86
- # Write-only part for shared reader state.
88
+ # Write-only part for reader shared state.
87
89
  class TxMailbox < Mailbox
88
90
  def initialize(queue, tree, session, &block)
89
91
  super queue
@@ -106,10 +108,17 @@ module Cocaine
106
108
 
107
109
  @queue << [method, payload]
108
110
  end
111
+
112
+ def error(errno, reason)
113
+ @queue << [:error, [errno, reason]]
114
+
115
+ LOG.debug "Closing RX channel #{self} due to error: [#{errno}] #{reason}"
116
+ @close.call @session
117
+ end
109
118
  end
110
119
 
111
120
  # [Detail]
112
- # Shared reader state, that acts like channel. Need for channel splitting between the library and a user.
121
+ # Reader shared state, that acts like channel. Need for channel splitting between the library and a user.
113
122
  class RxChannel
114
123
  attr_reader :tx, :rx
115
124
 
@@ -166,7 +175,7 @@ module Cocaine
166
175
  class ServiceError < IOError
167
176
  end
168
177
 
169
- # [Detail]
178
+ # [API]
170
179
  # Service actor, which can define itself via its dispatch tree.
171
180
  class DefinedService < Meta
172
181
  include Celluloid::IO
@@ -202,6 +211,9 @@ module Cocaine
202
211
  async.run
203
212
  end
204
213
 
214
+ protected
215
+ def reinitialize; end
216
+
205
217
  private
206
218
  def run
207
219
  LOG.debug "Service '#{@name}' is running"
@@ -212,6 +224,12 @@ module Cocaine
212
224
  async.received *decoded
213
225
  end
214
226
  end
227
+ rescue EOFError => err
228
+ LOG.warn "Service '#{@name}' has lost connection with the Cloud"
229
+ @socket = nil
230
+ @sessions.each do |session, (tx, rx)|
231
+ rx.error 1, err.message
232
+ end
215
233
  end
216
234
 
217
235
  def received(session, id, payload)
@@ -225,6 +243,8 @@ module Cocaine
225
243
  end
226
244
 
227
245
  def invoke(id, *args)
246
+ reinitialize if @socket.nil?
247
+
228
248
  method, txtree, rxtree = @dispatch[id]
229
249
  LOG.debug "Invoking #{@name}[#{id}=#{method}] with #{args}"
230
250
 
@@ -233,13 +253,11 @@ module Cocaine
233
253
  @sessions.delete session
234
254
  end
235
255
 
236
- @sessions[@counter] = [txchan, rxchan.tx]
237
-
238
256
  LOG.debug "<- [#{@counter}, #{id}, #{args}]"
239
257
  message = MessagePack.pack([@counter, id, args])
240
- @counter += 1
241
-
242
258
  @socket.write message
259
+ @sessions[@counter] = [txchan, rxchan.tx]
260
+ @counter += 1
243
261
  return txchan, rxchan.rx
244
262
  end
245
263
  end
@@ -255,16 +273,24 @@ module Cocaine
255
273
  # Service class. All you need is name and (optionally) locator endpoint.
256
274
  class Service < DefinedService
257
275
  def initialize(name, host=nil, port=nil)
276
+ @options = { host: host, port: port }
277
+
258
278
  locator = Locator.new host, port
259
279
  tx, rx = locator.resolve name
260
280
  id, payload = rx.recv
261
281
  if id == :error
262
282
  raise ServiceError.new payload
263
283
  end
284
+ locator.terminate
264
285
 
265
286
  endpoints, version, dispatch = payload
266
287
  super name, endpoints, dispatch
267
288
  end
289
+
290
+ protected
291
+ def reinitialize
292
+ initialize @name, @options[:host], @options[:port]
293
+ end
268
294
  end
269
295
 
270
296
  # [Detail]
@@ -1,3 +1,3 @@
1
1
  module Cocaine
2
- VERSION = '0.12.0-rc11'
2
+ VERSION = '0.12.0-rc12'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocaine-framework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0.pre.rc11
4
+ version: 0.12.0.pre.rc12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evgeny Safronov