bayserver-core 3.0.2 → 3.3.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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/lib/baykit/bayserver/agent/command_receiver.rb +2 -0
  3. data/lib/baykit/bayserver/agent/grand_agent.rb +145 -133
  4. data/lib/baykit/bayserver/agent/letters/accepted_letter.rb +17 -0
  5. data/lib/baykit/bayserver/agent/letters/closed_letter.rb +14 -0
  6. data/lib/baykit/bayserver/agent/letters/connected_letter.rb +14 -0
  7. data/lib/baykit/bayserver/agent/letters/error_letter.rb +16 -0
  8. data/lib/baykit/bayserver/agent/letters/letter.rb +19 -0
  9. data/lib/baykit/bayserver/agent/letters/package.rb +9 -0
  10. data/lib/baykit/bayserver/agent/letters/read_letter.rb +20 -0
  11. data/lib/baykit/bayserver/agent/letters/wrote_letter.rb +17 -0
  12. data/lib/baykit/bayserver/agent/monitor/grand_agent_monitor.rb +49 -49
  13. data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer.rb +47 -32
  14. data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer_base.rb +5 -0
  15. data/lib/baykit/bayserver/agent/multiplexer/multiplexer_base.rb +12 -28
  16. data/lib/baykit/bayserver/agent/multiplexer/plain_transporter.rb +20 -5
  17. data/lib/baykit/bayserver/agent/multiplexer/spider_multiplexer.rb +125 -87
  18. data/lib/baykit/bayserver/agent/multiplexer/spin_multiplexer.rb +24 -19
  19. data/lib/baykit/bayserver/agent/multiplexer/taxi_multiplexer.rb +21 -15
  20. data/lib/baykit/bayserver/bay_log.rb +20 -16
  21. data/lib/baykit/bayserver/bayserver.rb +8 -15
  22. data/lib/baykit/bayserver/common/cities.rb +1 -1
  23. data/lib/baykit/bayserver/common/inbound_ship.rb +5 -45
  24. data/lib/baykit/bayserver/common/inbound_ship_store.rb +0 -1
  25. data/lib/baykit/bayserver/common/multiplexer.rb +5 -1
  26. data/lib/baykit/bayserver/{agent/multiplexer → common}/rudder_state.rb +42 -11
  27. data/lib/baykit/bayserver/common/rudder_state_store.rb +63 -0
  28. data/lib/baykit/bayserver/{agent/multiplexer → common}/transporter.rb +2 -4
  29. data/lib/baykit/bayserver/common/warp_ship.rb +12 -7
  30. data/lib/baykit/bayserver/{agent/multiplexer → common}/write_unit.rb +2 -4
  31. data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +0 -1
  32. data/lib/baykit/bayserver/docker/base/port_base.rb +5 -5
  33. data/lib/baykit/bayserver/docker/base/warp_base.rb +7 -4
  34. data/lib/baykit/bayserver/docker/built_in/built_in_city_docker.rb +1 -1
  35. data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +25 -2
  36. data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +43 -35
  37. data/lib/baykit/bayserver/docker/harbor.rb +14 -0
  38. data/lib/baykit/bayserver/docker/send_file/file_content.rb +66 -0
  39. data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +113 -29
  40. data/lib/baykit/bayserver/docker/send_file/file_store.rb +117 -0
  41. data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +13 -5
  42. data/lib/baykit/bayserver/docker/send_file/send_file_ship.rb +11 -2
  43. data/lib/baykit/bayserver/docker/send_file/wait_file_ship.rb +92 -0
  44. data/lib/baykit/bayserver/mem_usage.rb +2 -0
  45. data/lib/baykit/bayserver/protocol/packet.rb +2 -1
  46. data/lib/baykit/bayserver/protocol/packet_part_accessor.rb +5 -5
  47. data/lib/baykit/bayserver/protocol/protocol_exception.rb +7 -1
  48. data/lib/baykit/bayserver/rudders/io_rudder.rb +2 -2
  49. data/lib/baykit/bayserver/rudders/rudder.rb +4 -0
  50. data/lib/baykit/bayserver/rudders/rudder_base.rb +21 -0
  51. data/lib/baykit/bayserver/tours/req_content_handler.rb +13 -13
  52. data/lib/baykit/bayserver/tours/tour.rb +18 -13
  53. data/lib/baykit/bayserver/tours/tour_req.rb +13 -15
  54. data/lib/baykit/bayserver/tours/tour_res.rb +42 -19
  55. data/lib/baykit/bayserver/util/cgi_util.rb +7 -2
  56. data/lib/baykit/bayserver/util/headers.rb +2 -2
  57. data/lib/baykit/bayserver/util/http_status.rb +7 -0
  58. data/lib/baykit/bayserver/util/http_util.rb +16 -0
  59. data/lib/baykit/bayserver/util/nio_selector.rb +103 -0
  60. data/lib/baykit/bayserver/util/rb_selector.rb +55 -0
  61. data/lib/baykit/bayserver/util/selector.rb +43 -80
  62. data/lib/baykit/bayserver/util/simple_buffer.rb +1 -1
  63. data/lib/baykit/bayserver/version.rb +1 -1
  64. metadata +24 -21
  65. data/lib/baykit/bayserver/agent/accept_handler.rb +0 -71
  66. data/lib/baykit/bayserver/agent/channel_listener.rb +0 -35
  67. data/lib/baykit/bayserver/agent/letter.rb +0 -30
  68. data/lib/baykit/bayserver/agent/transporter/data_listener.rb +0 -38
  69. data/lib/baykit/bayserver/agent/transporter/package.rb +0 -0
  70. data/lib/baykit/bayserver/agent/transporter/spin_read_transporter.rb +0 -111
  71. data/lib/baykit/bayserver/agent/transporter/spin_write_transporter.rb +0 -125
  72. data/lib/baykit/bayserver/agent/transporter/transporter.rb +0 -332
  73. data/lib/baykit/bayserver/docker/built_in/log_boat.rb +0 -71
  74. data/lib/baykit/bayserver/tours/send_file_yacht.rb +0 -97
  75. data/lib/baykit/bayserver/watercraft/boat.rb +0 -43
  76. data/lib/baykit/bayserver/watercraft/yacht.rb +0 -42
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f16ef089e90f79b3ab9ff9e3ad60146b5fc25cc1aa569981ffc2f23738e75ed4
4
- data.tar.gz: 8de08a5578314ed72c24b5580da7f9b819d1a42b218db39785490725646f00c8
3
+ metadata.gz: 4df3cb76d96f99278b232a1deab31c4da2888d16748bb6a9aa3a7812163fa4fa
4
+ data.tar.gz: 53ad43da3c1929e288d2dfb22b5d96a92db55b0e513ad4d9c33a739327a8b9ab
5
5
  SHA512:
6
- metadata.gz: 88238e6b083141720fd92f5816e7a66c49b39d93a656514ca81c2edfbfa312efb9daf6f34f0390ce2c035138d998e3eb56223170b47b180bc676337fb4236812
7
- data.tar.gz: 137cbe39e65d8d3144e17767f49d136764a19ca9b299a8b55817daad5a1650bacc042f2561e92f21e7411706eaf0afda6e752abfb6d68223c3d2e6126c20276b
6
+ metadata.gz: c0005c9f1ae41149009d37a7c18fc795e0957a437b40d9f80efa13cd4504317ef3e34524f47d79eb91b2a23fc23575af2e337dbe5f6c110fd3bfc30895fc57e3
7
+ data.tar.gz: 13a49be5a1cbde27fd6986b6e05af2937cc3ee5bb8961d33d7246850596a52422d738a09bdb7adff6c07f68e923157e6058e2c5e0c95714db50dfa2c00a5b840
@@ -14,9 +14,11 @@ module Baykit
14
14
  include Baykit::BayServer::Agent::Monitor
15
15
  include Baykit::BayServer::Util
16
16
 
17
+ attr :closed
17
18
 
18
19
  def init(agt_id, rd, tp)
19
20
  super
21
+ @closed = false
20
22
  end
21
23
 
22
24
  def to_s()
@@ -3,15 +3,15 @@ require 'objspace'
3
3
 
4
4
  require 'baykit/bayserver/sink'
5
5
  require 'baykit/bayserver/agent/command_receiver'
6
- require 'baykit/bayserver/agent/letter'
6
+ require 'baykit/bayserver/agent/letters/package'
7
7
  require 'baykit/bayserver/agent/multiplexer/spider_multiplexer'
8
8
  require 'baykit/bayserver/agent/multiplexer/spin_multiplexer'
9
9
  require 'baykit/bayserver/agent/multiplexer/job_multiplexer'
10
10
  require 'baykit/bayserver/agent/multiplexer/taxi_multiplexer'
11
- require 'baykit/bayserver/agent/multiplexer/rudder_state'
12
11
  require 'baykit/bayserver/agent/monitor/grand_agent_monitor'
13
12
  require 'baykit/bayserver/agent/signal/signal_agent'
14
13
 
14
+ require 'baykit/bayserver/common/rudder_state'
15
15
  require 'baykit/bayserver/docker/harbor'
16
16
 
17
17
  require 'baykit/bayserver/train/train_runner'
@@ -28,9 +28,11 @@ module Baykit
28
28
  include Baykit::BayServer::Train
29
29
  include Baykit::BayServer::Taxi
30
30
  include Baykit::BayServer::Agent::Signal
31
+ include Baykit::BayServer::Agent::Letters
31
32
  include Baykit::BayServer::Agent::Multiplexer
32
33
  include Baykit::BayServer::Docker
33
34
  include Baykit::BayServer::Util
35
+ include Baykit::BayServer::Common
34
36
 
35
37
  SELECT_TIMEOUT_SEC = 10
36
38
 
@@ -53,9 +55,7 @@ module Baykit
53
55
  attr :taxi_multiplexer
54
56
  attr :recipient
55
57
 
56
- attr :send_wakeup_pipe
57
58
  attr :max_inbound_ships
58
- attr :unanchorable_transporters
59
59
  attr :aborted
60
60
  attr :command_receiver
61
61
  attr :timer_handlers
@@ -147,7 +147,6 @@ module Baykit
147
147
  BayLog.info(BayMessage.get(:MSG_RUNNING_GRAND_AGENT, self))
148
148
 
149
149
  if @net_multiplexer.is_non_blocking
150
- BayLog.info("rec=%s", @command_receiver)
151
150
  @command_receiver.rudder.set_non_blocking
152
151
  end
153
152
 
@@ -159,7 +158,9 @@ module Baykit
159
158
  if @net_multiplexer.is_non_blocking
160
159
  rd.set_non_blocking
161
160
  end
162
- @net_multiplexer.add_rudder_state(rd, RudderState.new(rd))
161
+ st = RudderStateStore.get_store(@agent_id).rent
162
+ st.init(rd)
163
+ @net_multiplexer.add_rudder_state(rd, st)
163
164
  end
164
165
  end
165
166
 
@@ -177,20 +178,11 @@ module Baykit
177
178
  end
178
179
  =end
179
180
 
180
- busy = true
181
+
182
+ @net_multiplexer.on_free
181
183
  begin
182
184
  while true
183
185
 
184
- test_busy = @net_multiplexer.is_busy
185
- if test_busy != busy
186
- busy = test_busy
187
- if busy
188
- @net_multiplexer.on_busy
189
- else
190
- @net_multiplexer.on_free
191
- end
192
- end
193
-
194
186
  if not @spin_multiplexer.is_empty
195
187
  # If "SpinHandler" is running, the select function does not block.
196
188
  received = @recipient.receive(false)
@@ -201,7 +193,7 @@ module Baykit
201
193
 
202
194
  if @aborted
203
195
  BayLog.info("%s aborted by another thread", self)
204
- break;
196
+ break
205
197
  end
206
198
 
207
199
  if @spin_multiplexer.is_empty && @letter_queue.empty?
@@ -218,23 +210,31 @@ module Baykit
218
210
  let = @letter_queue.shift
219
211
  end
220
212
 
221
- case let.type
222
- when Letter::ACCEPTED
223
- on_accept(let)
224
- when Letter::CONNECTED
225
- on_connect(let)
226
- when Letter::READ
227
- on_read(let)
228
- when Letter::WROTE
229
- on_wrote(let)
230
- when Letter::CLOSEREQ
231
- on_close_req(let)
213
+ st = let.multiplexer.get_rudder_state(let.rudder)
214
+ if st == nil
215
+ BayLog.debug("%s rudder is already returned: %s", self, let.rudder)
216
+ next
217
+ end
218
+
219
+ case let
220
+ when AcceptedLetter
221
+ on_accepted(let, st)
222
+ when ConnectedLetter
223
+ on_connected(let, st)
224
+ when ReadLetter
225
+ on_read(let, st)
226
+ when WroteLetter
227
+ on_wrote(let, st)
228
+ when ClosedLetter
229
+ on_closed(let, st)
230
+ when ErrorLetter
231
+ on_error(let, st)
232
232
  end
233
233
  end
234
234
  end # while
235
235
 
236
236
  rescue Exception => e
237
- BayLog.fatal_e(e)
237
+ BayLog.fatal_e(e, "Uncaught Error: %s", e)
238
238
  ensure
239
239
  BayLog.info("%s end", self)
240
240
  shutdown
@@ -283,27 +283,51 @@ module Baykit
283
283
  @command_receiver = CommandReceiver.new()
284
284
  com_transporter = PlainTransporter.new(@net_multiplexer, @command_receiver, true, 8, false)
285
285
  @command_receiver.init(@agent_id, rd, com_transporter)
286
- @net_multiplexer.add_rudder_state(@command_receiver.rudder, RudderState.new(@command_receiver.rudder, com_transporter))
287
- BayLog.info("ComRec=%s", @command_receiver)
286
+
287
+ st = RudderStateStore.get_store(@agent_id).rent
288
+ st.init(@command_receiver.rudder, com_transporter)
289
+ @net_multiplexer.add_rudder_state(@command_receiver.rudder, st)
288
290
  end
289
291
 
290
- def send_accepted_letter(st, client_rd, e, wakeup)
291
- send_letter(Letter.new(Letter::ACCEPTED, st, client_rd, -1, nil, e), wakeup)
292
+ def send_accepted_letter(state_id, rd, mpx, client_rd, wakeup)
293
+ if rd == nil
294
+ raise ArgumentError.new
295
+ end
296
+ send_letter(AcceptedLetter.new(state_id, rd, mpx, client_rd), wakeup)
292
297
  end
293
298
 
294
- def send_connected_letter(st, e, wakeup)
295
- send_letter(Letter.new(Letter::CONNECTED, st, nil, -1, nil, e), wakeup)
299
+ def send_connected_letter(state_id, rd, mpx, wakeup)
300
+ if rd == nil
301
+ raise ArgumentError.new
302
+ end
303
+ send_letter(ConnectedLetter.new(state_id, rd, mpx), wakeup)
296
304
  end
297
- def send_read_letter(st, n, adr, e, wakeup)
298
- send_letter(Letter.new(Letter::READ, st, nil, n, adr, e), wakeup)
305
+ def send_read_letter(state_id, rd, mpx, n, adr, wakeup)
306
+ if rd == nil
307
+ raise ArgumentError.new
308
+ end
309
+ send_letter(ReadLetter.new(state_id, rd, mpx, n, adr), wakeup)
299
310
  end
300
311
 
301
- def send_wrote_letter(st, n, e, wakeup)
302
- send_letter(Letter.new(Letter::WROTE, st, nil, n, nil, e), wakeup)
312
+ def send_wrote_letter(state_id, rd, mpx, n, wakeup)
313
+ if rd == nil
314
+ raise ArgumentError.new
315
+ end
316
+ send_letter(WroteLetter.new(state_id, rd, mpx, n), wakeup)
303
317
  end
304
318
 
305
- def send_close_req_letter(st, wakeup)
306
- send_letter(Letter.new(Letter::CLOSEREQ, st, nil, -1, nil, nil), wakeup)
319
+ def send_closed_letter(state_id, rd, mpx, wakeup)
320
+ if rd == nil
321
+ raise ArgumentError.new
322
+ end
323
+ send_letter(ClosedLetter.new(state_id, rd, mpx), wakeup)
324
+ end
325
+
326
+ def send_error_letter(state_id, rd, mpx, err, wakeup)
327
+ if rd == nil
328
+ raise ArgumentError.new
329
+ end
330
+ send_letter(ErrorLetter.new(state_id, rd, mpx, err), wakeup)
307
331
  end
308
332
 
309
333
  def shutdown
@@ -335,7 +359,7 @@ module Baykit
335
359
 
336
360
 
337
361
  def reload_cert
338
- GrandAgent.anchorable_port_map.values().each do |port|
362
+ BayServer.anchorable_port_map.values().each do |port|
339
363
  if port.secure()
340
364
  begin
341
365
  port.secure_docker.reload_cert()
@@ -352,10 +376,6 @@ module Baykit
352
376
  end
353
377
  end
354
378
 
355
- def count_postpone
356
- return @postpone_queue.length
357
- end
358
-
359
379
  def req_catch_up
360
380
  BayLog.debug("%s Req catchUp", self)
361
381
  if count_postpone > 0
@@ -403,42 +423,29 @@ module Baykit
403
423
  end
404
424
  end
405
425
 
406
- def on_accept(let)
426
+ def on_accepted(let, st)
407
427
  begin
408
- if let.err != nil
409
- raise let.err
410
- end
411
-
412
- p = BayServer::anchorable_port_map[let.state.rudder]
428
+ p = BayServer::anchorable_port_map[st.rudder]
413
429
  p.on_connected(@agent_id, let.client_rudder)
414
- rescue IOError => e
415
- BayLog.error_e(e)
416
- next_action(let.state, NextSocketAction::CLOSE, false)
417
430
  rescue HttpException => e
418
- BayLog.error_e(e)
419
- let.client_rudder.close
431
+ st.transporter.on_error(st.rudder, e)
432
+ next_action(st, NextSocketAction::CLOSE, false)
420
433
  end
421
434
 
422
- if !@net_multiplexer.is_busy
423
- let.state.multiplexer.next_accept(let.state)
435
+ if @net_multiplexer.is_busy
436
+ BayLog.warn("%s net multiplexer is busy: %s", self, @net_multiplexer)
437
+ @net_multiplexer.on_busy
438
+ @busy = true
439
+ else
440
+ st.multiplexer.next_accept(st)
424
441
  end
425
442
  end
426
443
 
427
- def on_connect(let)
428
- st = let.state
429
- if st.closed
430
- BayLog.debug("%s Rudder is already closed: rd=%s", self, st.rudder);
431
- return;
432
- end
433
-
444
+ def on_connected(let, st)
434
445
  BayLog.debug("%s connected rd=%s", self, st.rudder)
435
446
  next_act = nil
436
447
  begin
437
- if let.err != nil
438
- raise let.err
439
- end
440
-
441
- next_act = st.transporter.on_connect(st.rudder)
448
+ next_act = st.transporter.on_connected(st.rudder)
442
449
  BayLog.debug("%s nextAct=%s", self, next_act)
443
450
  rescue IOError => e
444
451
  st.transporter.on_error(st.rudder, e)
@@ -453,19 +460,8 @@ module Baykit
453
460
  next_action(st, next_act, false)
454
461
  end
455
462
 
456
- def on_read(let)
457
- st = let.state
458
- if st.closed
459
- BayLog.debug("%s Rudder is already closed: rd=%s", self, st.rudder)
460
- return
461
- end
462
-
463
+ def on_read(let, st)
463
464
  begin
464
- if let.err != nil
465
- BayLog.debug("%s error on OS read %s", self, let.err)
466
- raise let.err
467
- end
468
-
469
465
  BayLog.debug("%s read %d bytes (rd=%s)", self, let.n_bytes, st.rudder)
470
466
  st.bytes_read += let.n_bytes
471
467
 
@@ -476,7 +472,7 @@ module Baykit
476
472
  next_act = st.transporter.on_read(st.rudder, st.read_buf, let.address)
477
473
  end
478
474
 
479
- rescue => e
475
+ rescue IOError => e
480
476
  st.transporter.on_error(st.rudder, e)
481
477
  next_act = NextSocketAction::CLOSE
482
478
  end
@@ -484,71 +480,84 @@ module Baykit
484
480
  next_action(st, next_act, true)
485
481
  end
486
482
 
487
- def on_wrote(let)
488
- st = let.state
489
- if st.closed
490
- BayLog.debug("%s Rudder is already closed: rd=%s", self, st.rudder)
491
- return
492
- end
493
-
494
- begin
495
- if let.err != nil
496
- BayLog.debug("%s error on OS write %s", self, let.err)
497
- raise let.err
498
- end
499
-
500
- BayLog.debug("%s wrote %d bytes rd=%s qlen=%d", self, let.n_bytes, st.rudder, st.write_queue.length)
501
- st.bytes_wrote += let.n_bytes
502
-
503
- if st.write_queue.empty?
504
- raise Sink("%s Write queue is empty: rd=%s", self, st.rudder)
505
- end
483
+ def on_wrote(let, st)
484
+ BayLog.debug("%s wrote %d bytes rd=%s qlen=%d", self, let.n_bytes, st.rudder, st.write_queue.length)
485
+ st.bytes_wrote += let.n_bytes
506
486
 
507
- unit = st.write_queue[0]
508
- if unit.buf.length > 0
509
- BayLog.debug("Could not write enough data buf_len=%d", unit.buf.length)
510
- else
511
- st.multiplexer.consume_oldest_unit(st)
512
- end
487
+ if st.write_queue.empty?
488
+ raise Sink("%s Write queue is empty: rd=%s", self, st.rudder)
489
+ end
513
490
 
491
+ write_more = false
492
+ unit = st.write_queue[0]
493
+ if unit.buf.length > 0
494
+ BayLog.debug("Could not write enough data buf_len=%d", unit.buf.length)
514
495
  write_more = true
496
+ else
497
+ # Removes write unit from writeQueue
498
+ st.multiplexer.consume_oldest_unit(st)
515
499
 
516
500
  st.writing_lock.synchronize do
517
501
  if st.write_queue.empty?
518
502
  write_more = false
519
503
  st.writing = false
504
+ else
505
+ write_more = true
520
506
  end
521
507
  end
508
+ end
522
509
 
523
- if write_more
524
- st.multiplexer.next_write(st)
510
+ if write_more
511
+ st.multiplexer.next_write(st)
512
+ else
513
+ if st.finale
514
+ # close
515
+ BayLog.debug("%s finale return Close", self)
516
+ next_action(st, NextSocketAction::CLOSE, false)
525
517
  else
526
- if st.finale
527
- # close
528
- BayLog.debug("%s finale return Close", self)
529
- next_action(st, NextSocketAction::CLOSE, false)
530
- else
531
- # Write off
532
- st.multiplexer.cancel_write(st)
533
- end
518
+ # Write off
519
+ st.multiplexer.cancel_write(st)
534
520
  end
535
- rescue SystemCallError, IOError => e
536
- BayLog.debug("%s IO error on wrote", self)
537
- st.transporter.on_error(st.rudder, e)
538
- next_action(st, NextSocketAction::CLOSE, false)
539
521
  end
540
522
  end
541
523
 
542
- def on_close_req(let)
543
- st = let.state
544
- BayLog.debug("%s reqClose rd=%s", self, st.rudder)
545
- if st.closed
546
- BayLog.debug("%s Rudder is already closed: rd=%s", self, st.rudder)
547
- return
524
+ def on_closed(let, st)
525
+ st.multiplexer.remove_rudder_state(st.rudder)
526
+
527
+ while st.multiplexer.consume_oldest_unit(st) do
528
+
548
529
  end
549
530
 
550
- st.multiplexer.close_rudder(st)
551
- st.access
531
+ if st.transporter != nil
532
+ st.transporter.on_closed(st.rudder)
533
+ end
534
+
535
+ RudderStateStore.get_store(@agent_id).Return(st)
536
+
537
+ if @busy && !@net_multiplexer.is_busy
538
+ BayLog.warn("%s net multiplexer is free: %s", self, @net_multiplexer)
539
+ @net_multiplexer.on_free
540
+ @busy = false
541
+ end
542
+ end
543
+
544
+ def on_error(let, st)
545
+
546
+ if let.err.is_a?(SystemCallError) ||
547
+ let.err.is_a?(IOError) ||
548
+ let.err.is_a?(OpenSSL::SSL::SSLError) ||
549
+ let.err.is_a?(HttpException)
550
+
551
+ if st.transporter != nil
552
+ st.transporter.on_error(st.rudder, let.err)
553
+ else
554
+ BayLog.error_e(let.err, "%s onError error=%s", self, let.err);
555
+ end
556
+ next_action(st, NextSocketAction::CLOSE, false)
557
+ else
558
+ BayLog.fatal_e(let.e, "Cannot handle error")
559
+ raise let.e
560
+ end
552
561
  end
553
562
 
554
563
  def next_action(st, act, reading)
@@ -573,7 +582,7 @@ module Baykit
573
582
  if reading
574
583
  cancel = true
575
584
  end
576
- st.multiplexer.close_rudder(st)
585
+ st.multiplexer.req_close(st.rudder)
577
586
 
578
587
  when NextSocketAction::SUSPEND
579
588
  if reading
@@ -596,6 +605,9 @@ module Baykit
596
605
  st.access
597
606
  end
598
607
 
608
+ def count_postpone
609
+ return @postpone_queue.length
610
+ end
599
611
 
600
612
  ######################################################
601
613
  # class methods
@@ -0,0 +1,17 @@
1
+ module Baykit
2
+ module BayServer
3
+ module Agent
4
+ module Letters
5
+ class AcceptedLetter < Letter
6
+ attr :client_rudder
7
+
8
+ def initialize(state_id, rd, mpx, client_rd)
9
+ super(state_id, rd, mpx)
10
+ @client_rudder = client_rd
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,14 @@
1
+ module Baykit
2
+ module BayServer
3
+ module Agent
4
+ module Letters
5
+ class ClosedLetter < Letter
6
+ def initialize(state_id, rd, mpx)
7
+ super state_id, rd, mpx
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,14 @@
1
+ module Baykit
2
+ module BayServer
3
+ module Agent
4
+ module Letters
5
+ class ConnectedLetter < Letter
6
+ def initialize(state_id, rd, mpx)
7
+ super state_id, rd, mpx
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,16 @@
1
+ module Baykit
2
+ module BayServer
3
+ module Agent
4
+ module Letters
5
+ class ErrorLetter < Letter
6
+ attr :err
7
+ def initialize(state_id, rd, mpx, err)
8
+ super state_id, rd, mpx
9
+ @err = err
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
@@ -0,0 +1,19 @@
1
+ module Baykit
2
+ module BayServer
3
+ module Agent
4
+ module Letters
5
+ class Letter
6
+ attr :state_id
7
+ attr :rudder
8
+ attr :multiplexer
9
+ def initialize(state_id, rd, mpx)
10
+ @state_id = state_id
11
+ @rudder = rd
12
+ @multiplexer = mpx
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+
@@ -0,0 +1,9 @@
1
+ require 'baykit/bayserver/agent/letters/letter'
2
+ require 'baykit/bayserver/agent/letters/accepted_letter'
3
+ require 'baykit/bayserver/agent/letters/closed_letter'
4
+ require 'baykit/bayserver/agent/letters/connected_letter'
5
+ require 'baykit/bayserver/agent/letters/error_letter'
6
+ require 'baykit/bayserver/agent/letters/read_letter'
7
+ require 'baykit/bayserver/agent/letters/wrote_letter'
8
+
9
+
@@ -0,0 +1,20 @@
1
+ module Baykit
2
+ module BayServer
3
+ module Agent
4
+ module Letters
5
+ class ReadLetter < Letter
6
+
7
+ attr :n_bytes
8
+ attr :address
9
+
10
+ def initialize(state_id, rd, mpx, n, adr = "")
11
+ super state_id, rd, mpx
12
+ @n_bytes = n
13
+ @address = adr
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+
@@ -0,0 +1,17 @@
1
+ module Baykit
2
+ module BayServer
3
+ module Agent
4
+ module Letters
5
+ class WroteLetter < Letter
6
+ attr :n_bytes
7
+
8
+ def initialize(state_id, rd, mpx, n)
9
+ super state_id, rd, mpx
10
+ @n_bytes = n
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+