bayserver-core 3.0.3 → 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 (72) 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 +101 -93
  4. data/lib/baykit/bayserver/agent/letters/accepted_letter.rb +2 -2
  5. data/lib/baykit/bayserver/agent/letters/closed_letter.rb +2 -2
  6. data/lib/baykit/bayserver/agent/letters/connected_letter.rb +2 -2
  7. data/lib/baykit/bayserver/agent/letters/error_letter.rb +2 -2
  8. data/lib/baykit/bayserver/agent/letters/letter.rb +7 -3
  9. data/lib/baykit/bayserver/agent/letters/read_letter.rb +2 -2
  10. data/lib/baykit/bayserver/agent/letters/wrote_letter.rb +2 -2
  11. data/lib/baykit/bayserver/agent/monitor/grand_agent_monitor.rb +20 -22
  12. data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer.rb +44 -31
  13. data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer_base.rb +5 -0
  14. data/lib/baykit/bayserver/agent/multiplexer/multiplexer_base.rb +4 -4
  15. data/lib/baykit/bayserver/agent/multiplexer/plain_transporter.rb +2 -3
  16. data/lib/baykit/bayserver/agent/multiplexer/spider_multiplexer.rb +113 -59
  17. data/lib/baykit/bayserver/agent/multiplexer/spin_multiplexer.rb +22 -17
  18. data/lib/baykit/bayserver/agent/multiplexer/taxi_multiplexer.rb +17 -13
  19. data/lib/baykit/bayserver/bay_log.rb +20 -16
  20. data/lib/baykit/bayserver/bayserver.rb +8 -15
  21. data/lib/baykit/bayserver/common/cities.rb +1 -1
  22. data/lib/baykit/bayserver/common/inbound_ship.rb +1 -1
  23. data/lib/baykit/bayserver/common/inbound_ship_store.rb +0 -1
  24. data/lib/baykit/bayserver/{agent/multiplexer → common}/rudder_state.rb +43 -7
  25. data/lib/baykit/bayserver/common/rudder_state_store.rb +63 -0
  26. data/lib/baykit/bayserver/{agent/multiplexer → common}/transporter.rb +1 -3
  27. data/lib/baykit/bayserver/common/warp_ship.rb +4 -3
  28. data/lib/baykit/bayserver/{agent/multiplexer → common}/write_unit.rb +1 -3
  29. data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +0 -1
  30. data/lib/baykit/bayserver/docker/base/port_base.rb +5 -5
  31. data/lib/baykit/bayserver/docker/base/warp_base.rb +7 -4
  32. data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +25 -2
  33. data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +42 -26
  34. data/lib/baykit/bayserver/docker/harbor.rb +14 -0
  35. data/lib/baykit/bayserver/docker/send_file/file_content.rb +66 -0
  36. data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +113 -29
  37. data/lib/baykit/bayserver/docker/send_file/file_store.rb +117 -0
  38. data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +13 -5
  39. data/lib/baykit/bayserver/docker/send_file/send_file_ship.rb +11 -2
  40. data/lib/baykit/bayserver/docker/send_file/wait_file_ship.rb +92 -0
  41. data/lib/baykit/bayserver/mem_usage.rb +2 -0
  42. data/lib/baykit/bayserver/protocol/packet.rb +2 -1
  43. data/lib/baykit/bayserver/protocol/packet_part_accessor.rb +5 -5
  44. data/lib/baykit/bayserver/protocol/protocol_exception.rb +7 -1
  45. data/lib/baykit/bayserver/rudders/io_rudder.rb +2 -2
  46. data/lib/baykit/bayserver/rudders/rudder.rb +4 -0
  47. data/lib/baykit/bayserver/rudders/rudder_base.rb +21 -0
  48. data/lib/baykit/bayserver/tours/req_content_handler.rb +13 -13
  49. data/lib/baykit/bayserver/tours/tour.rb +1 -6
  50. data/lib/baykit/bayserver/tours/tour_req.rb +4 -8
  51. data/lib/baykit/bayserver/tours/tour_res.rb +1 -8
  52. data/lib/baykit/bayserver/util/cgi_util.rb +7 -2
  53. data/lib/baykit/bayserver/util/headers.rb +2 -2
  54. data/lib/baykit/bayserver/util/http_status.rb +7 -0
  55. data/lib/baykit/bayserver/util/http_util.rb +16 -0
  56. data/lib/baykit/bayserver/util/nio_selector.rb +103 -0
  57. data/lib/baykit/bayserver/util/rb_selector.rb +55 -0
  58. data/lib/baykit/bayserver/util/selector.rb +43 -80
  59. data/lib/baykit/bayserver/util/simple_buffer.rb +1 -1
  60. data/lib/baykit/bayserver/version.rb +1 -1
  61. metadata +16 -20
  62. data/lib/baykit/bayserver/agent/accept_handler.rb +0 -71
  63. data/lib/baykit/bayserver/agent/channel_listener.rb +0 -35
  64. data/lib/baykit/bayserver/agent/transporter/data_listener.rb +0 -38
  65. data/lib/baykit/bayserver/agent/transporter/package.rb +0 -0
  66. data/lib/baykit/bayserver/agent/transporter/spin_read_transporter.rb +0 -111
  67. data/lib/baykit/bayserver/agent/transporter/spin_write_transporter.rb +0 -125
  68. data/lib/baykit/bayserver/agent/transporter/transporter.rb +0 -332
  69. data/lib/baykit/bayserver/docker/built_in/log_boat.rb +0 -71
  70. data/lib/baykit/bayserver/tours/send_file_yacht.rb +0 -97
  71. data/lib/baykit/bayserver/watercraft/boat.rb +0 -43
  72. data/lib/baykit/bayserver/watercraft/yacht.rb +0 -42
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d9348bdf1dfc44575c6c32641abe4b528e2db7071fd9b7a55755506b0f378aff
4
- data.tar.gz: d3270dd6bece78416305353131145facf4ae7d8be1aedbb6693449fe4e1447c4
3
+ metadata.gz: 4df3cb76d96f99278b232a1deab31c4da2888d16748bb6a9aa3a7812163fa4fa
4
+ data.tar.gz: 53ad43da3c1929e288d2dfb22b5d96a92db55b0e513ad4d9c33a739327a8b9ab
5
5
  SHA512:
6
- metadata.gz: f3e15075fac52deabffc014ab83697557c77f77e50a09309c93fd6dfa3b0589efddc145f3c5099679812f27cf19e60b5d4366b4a8aae27d35a1725058d4ca9c6
7
- data.tar.gz: 23210e3f3afc97b4c15080ffe7fd2a52e0d8b51724ffe723d4e4c40f4a10715cc77ca3feba8e4f394de5cbf68ccf321e0ef714d14dc872d0c87ab12b863562c7
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()
@@ -8,10 +8,10 @@ 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'
@@ -32,6 +32,7 @@ module Baykit
32
32
  include Baykit::BayServer::Agent::Multiplexer
33
33
  include Baykit::BayServer::Docker
34
34
  include Baykit::BayServer::Util
35
+ include Baykit::BayServer::Common
35
36
 
36
37
  SELECT_TIMEOUT_SEC = 10
37
38
 
@@ -54,9 +55,7 @@ module Baykit
54
55
  attr :taxi_multiplexer
55
56
  attr :recipient
56
57
 
57
- attr :send_wakeup_pipe
58
58
  attr :max_inbound_ships
59
- attr :unanchorable_transporters
60
59
  attr :aborted
61
60
  attr :command_receiver
62
61
  attr :timer_handlers
@@ -148,7 +147,6 @@ module Baykit
148
147
  BayLog.info(BayMessage.get(:MSG_RUNNING_GRAND_AGENT, self))
149
148
 
150
149
  if @net_multiplexer.is_non_blocking
151
- BayLog.info("rec=%s", @command_receiver)
152
150
  @command_receiver.rudder.set_non_blocking
153
151
  end
154
152
 
@@ -160,7 +158,9 @@ module Baykit
160
158
  if @net_multiplexer.is_non_blocking
161
159
  rd.set_non_blocking
162
160
  end
163
- @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)
164
164
  end
165
165
  end
166
166
 
@@ -178,20 +178,11 @@ module Baykit
178
178
  end
179
179
  =end
180
180
 
181
- busy = true
181
+
182
+ @net_multiplexer.on_free
182
183
  begin
183
184
  while true
184
185
 
185
- test_busy = @net_multiplexer.is_busy
186
- if test_busy != busy
187
- busy = test_busy
188
- if busy
189
- @net_multiplexer.on_busy
190
- else
191
- @net_multiplexer.on_free
192
- end
193
- end
194
-
195
186
  if not @spin_multiplexer.is_empty
196
187
  # If "SpinHandler" is running, the select function does not block.
197
188
  received = @recipient.receive(false)
@@ -202,7 +193,7 @@ module Baykit
202
193
 
203
194
  if @aborted
204
195
  BayLog.info("%s aborted by another thread", self)
205
- break;
196
+ break
206
197
  end
207
198
 
208
199
  if @spin_multiplexer.is_empty && @letter_queue.empty?
@@ -219,19 +210,25 @@ module Baykit
219
210
  let = @letter_queue.shift
220
211
  end
221
212
 
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
+
222
219
  case let
223
220
  when AcceptedLetter
224
- on_accepted(let)
221
+ on_accepted(let, st)
225
222
  when ConnectedLetter
226
- on_connected(let)
223
+ on_connected(let, st)
227
224
  when ReadLetter
228
- on_read(let)
225
+ on_read(let, st)
229
226
  when WroteLetter
230
- on_wrote(let)
227
+ on_wrote(let, st)
231
228
  when ClosedLetter
232
- on_closed(let)
229
+ on_closed(let, st)
233
230
  when ErrorLetter
234
- on_error(let)
231
+ on_error(let, st)
235
232
  end
236
233
  end
237
234
  end # while
@@ -286,31 +283,51 @@ module Baykit
286
283
  @command_receiver = CommandReceiver.new()
287
284
  com_transporter = PlainTransporter.new(@net_multiplexer, @command_receiver, true, 8, false)
288
285
  @command_receiver.init(@agent_id, rd, com_transporter)
289
- @net_multiplexer.add_rudder_state(@command_receiver.rudder, RudderState.new(@command_receiver.rudder, com_transporter))
290
- 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)
291
290
  end
292
291
 
293
- def send_accepted_letter(st, client_rd, wakeup)
294
- send_letter(AcceptedLetter.new(st, client_rd), 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)
295
297
  end
296
298
 
297
- def send_connected_letter(st, wakeup)
298
- send_letter(ConnectedLetter.new(st), 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)
299
304
  end
300
- def send_read_letter(st, n, adr, wakeup)
301
- send_letter(ReadLetter.new(st, n, adr), 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)
302
310
  end
303
311
 
304
- def send_wrote_letter(st, n, wakeup)
305
- send_letter(WroteLetter.new(st, n), 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)
306
317
  end
307
318
 
308
- def send_closed_letter(st, wakeup)
309
- send_letter(ClosedLetter.new(st), 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)
310
324
  end
311
325
 
312
- def send_error_letter(st, err, wakeup)
313
- send_letter(ErrorLetter.new(st, err), wakeup)
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)
314
331
  end
315
332
 
316
333
  def shutdown
@@ -342,7 +359,7 @@ module Baykit
342
359
 
343
360
 
344
361
  def reload_cert
345
- GrandAgent.anchorable_port_map.values().each do |port|
362
+ BayServer.anchorable_port_map.values().each do |port|
346
363
  if port.secure()
347
364
  begin
348
365
  port.secure_docker.reload_cert()
@@ -359,10 +376,6 @@ module Baykit
359
376
  end
360
377
  end
361
378
 
362
- def count_postpone
363
- return @postpone_queue.length
364
- end
365
-
366
379
  def req_catch_up
367
380
  BayLog.debug("%s Req catchUp", self)
368
381
  if count_postpone > 0
@@ -410,8 +423,7 @@ module Baykit
410
423
  end
411
424
  end
412
425
 
413
- def on_accepted(let)
414
- st = let.state
426
+ def on_accepted(let, st)
415
427
  begin
416
428
  p = BayServer::anchorable_port_map[st.rudder]
417
429
  p.on_connected(@agent_id, let.client_rudder)
@@ -420,18 +432,16 @@ module Baykit
420
432
  next_action(st, NextSocketAction::CLOSE, false)
421
433
  end
422
434
 
423
- if !@net_multiplexer.is_busy
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
424
440
  st.multiplexer.next_accept(st)
425
441
  end
426
442
  end
427
443
 
428
- def on_connected(let)
429
- st = let.state
430
- if st.closed
431
- BayLog.debug("%s Rudder is already closed: rd=%s", self, st.rudder);
432
- return;
433
- end
434
-
444
+ def on_connected(let, st)
435
445
  BayLog.debug("%s connected rd=%s", self, st.rudder)
436
446
  next_act = nil
437
447
  begin
@@ -450,14 +460,7 @@ module Baykit
450
460
  next_action(st, next_act, false)
451
461
  end
452
462
 
453
- def on_read(let)
454
- st = let.state
455
- if st.closed
456
- BayLog.debug("
457
- %s Rudder is already closed: rd=%s", self, st.rudder)
458
- return
459
- end
460
-
463
+ def on_read(let, st)
461
464
  begin
462
465
  BayLog.debug("%s read %d bytes (rd=%s)", self, let.n_bytes, st.rudder)
463
466
  st.bytes_read += let.n_bytes
@@ -477,13 +480,7 @@ module Baykit
477
480
  next_action(st, next_act, true)
478
481
  end
479
482
 
480
- def on_wrote(let)
481
- st = let.state
482
- if st.closed
483
- BayLog.debug("%s Rudder is already closed: rd=%s", self, st.rudder)
484
- return
485
- end
486
-
483
+ def on_wrote(let, st)
487
484
  BayLog.debug("%s wrote %d bytes rd=%s qlen=%d", self, let.n_bytes, st.rudder, st.write_queue.length)
488
485
  st.bytes_wrote += let.n_bytes
489
486
 
@@ -491,19 +488,22 @@ module Baykit
491
488
  raise Sink("%s Write queue is empty: rd=%s", self, st.rudder)
492
489
  end
493
490
 
491
+ write_more = false
494
492
  unit = st.write_queue[0]
495
493
  if unit.buf.length > 0
496
494
  BayLog.debug("Could not write enough data buf_len=%d", unit.buf.length)
495
+ write_more = true
497
496
  else
497
+ # Removes write unit from writeQueue
498
498
  st.multiplexer.consume_oldest_unit(st)
499
- end
500
-
501
- write_more = true
502
499
 
503
- st.writing_lock.synchronize do
504
- if st.write_queue.empty?
505
- write_more = false
506
- st.writing = false
500
+ st.writing_lock.synchronize do
501
+ if st.write_queue.empty?
502
+ write_more = false
503
+ st.writing = false
504
+ else
505
+ write_more = true
506
+ end
507
507
  end
508
508
  end
509
509
 
@@ -521,14 +521,7 @@ module Baykit
521
521
  end
522
522
  end
523
523
 
524
- def on_closed(let)
525
- st = let.state
526
- BayLog.debug("%s on closed rd=%s", self, st.rudder)
527
- if st.closed
528
- BayLog.debug("%s Rudder is already closed: rd=%s", self, st.rudder)
529
- return
530
- end
531
-
524
+ def on_closed(let, st)
532
525
  st.multiplexer.remove_rudder_state(st.rudder)
533
526
 
534
527
  while st.multiplexer.consume_oldest_unit(st) do
@@ -539,19 +532,31 @@ module Baykit
539
532
  st.transporter.on_closed(st.rudder)
540
533
  end
541
534
 
542
- st.closed = true
543
- st.access
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
544
542
  end
545
543
 
546
- def on_error(let)
547
- begin
548
- raise let.err
549
- rescue SystemCallError, IOError, OpenSSL::SSL::SSLError, HttpException => e
550
- BayLog.error_e(e)
551
- next_action(let.state, NextSocketAction::CLOSE, false)
552
- rescue => e
553
- BayLog.fatal_e(e, "Cannot handle error")
554
- raise e
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
555
560
  end
556
561
  end
557
562
 
@@ -600,6 +605,9 @@ module Baykit
600
605
  st.access
601
606
  end
602
607
 
608
+ def count_postpone
609
+ return @postpone_queue.length
610
+ end
603
611
 
604
612
  ######################################################
605
613
  # class methods
@@ -5,8 +5,8 @@ module Baykit
5
5
  class AcceptedLetter < Letter
6
6
  attr :client_rudder
7
7
 
8
- def initialize(st, client_rd)
9
- super(st)
8
+ def initialize(state_id, rd, mpx, client_rd)
9
+ super(state_id, rd, mpx)
10
10
  @client_rudder = client_rd
11
11
  end
12
12
  end
@@ -3,8 +3,8 @@ module Baykit
3
3
  module Agent
4
4
  module Letters
5
5
  class ClosedLetter < Letter
6
- def initialize(st)
7
- super st
6
+ def initialize(state_id, rd, mpx)
7
+ super state_id, rd, mpx
8
8
  end
9
9
  end
10
10
  end
@@ -3,8 +3,8 @@ module Baykit
3
3
  module Agent
4
4
  module Letters
5
5
  class ConnectedLetter < Letter
6
- def initialize(st)
7
- super st
6
+ def initialize(state_id, rd, mpx)
7
+ super state_id, rd, mpx
8
8
  end
9
9
  end
10
10
  end
@@ -4,8 +4,8 @@ module Baykit
4
4
  module Letters
5
5
  class ErrorLetter < Letter
6
6
  attr :err
7
- def initialize(st, err)
8
- super st
7
+ def initialize(state_id, rd, mpx, err)
8
+ super state_id, rd, mpx
9
9
  @err = err
10
10
  end
11
11
  end
@@ -3,9 +3,13 @@ module Baykit
3
3
  module Agent
4
4
  module Letters
5
5
  class Letter
6
- attr :state
7
- def initialize(st)
8
- @state = st
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
9
13
  end
10
14
  end
11
15
  end
@@ -7,8 +7,8 @@ module Baykit
7
7
  attr :n_bytes
8
8
  attr :address
9
9
 
10
- def initialize(st, n, adr = "")
11
- super st
10
+ def initialize(state_id, rd, mpx, n, adr = "")
11
+ super state_id, rd, mpx
12
12
  @n_bytes = n
13
13
  @address = adr
14
14
  end
@@ -5,8 +5,8 @@ module Baykit
5
5
  class WroteLetter < Letter
6
6
  attr :n_bytes
7
7
 
8
- def initialize(st, n)
9
- super st
8
+ def initialize(state_id, rd, mpx, n)
9
+ super state_id, rd, mpx
10
10
  @n_bytes = n
11
11
  end
12
12
  end
@@ -14,14 +14,12 @@ module Baykit
14
14
  class << self
15
15
  attr :num_agents
16
16
  attr :cur_id
17
- attr :anchored_port_map
18
17
  attr :monitors
19
18
  attr :finale
20
19
  end
21
20
 
22
21
  @num_agents = 0
23
22
  @cur_id = 0
24
- @anchored_port_map = []
25
23
  @monitors = {}
26
24
  @finale = false
27
25
 
@@ -75,19 +73,6 @@ module Baykit
75
73
  GrandAgentMonitor.agent_aborted @agent_id, @child_pid, @anchorable
76
74
  end
77
75
 
78
- def on_readable()
79
- begin
80
- res = IOUtil.read_int32(@communication_channel)
81
- if res == nil || res == GrandAgent::CMD_CLOSE
82
- close()
83
- else
84
- BayLog.debug("%s read OK: %d", self, res)
85
- end
86
- rescue IO::WaitReadable
87
- #BayLog.debug("%s no data", self)
88
- end
89
- end
90
-
91
76
  def shutdown()
92
77
  BayLog.debug("%s send shutdown command", self)
93
78
  send(GrandAgent::CMD_SHUTDOWN)
@@ -136,9 +121,8 @@ module Baykit
136
121
  # Class methods
137
122
  ########################################
138
123
 
139
- def self.init(num_agents, anchored_port_map)
124
+ def self.init(num_agents)
140
125
  @num_agents = num_agents
141
- @anchored_port_map = anchored_port_map
142
126
  @num_agents.times do
143
127
  add(true)
144
128
  end
@@ -160,12 +144,12 @@ module Baykit
160
144
  ports = ""
161
145
 
162
146
  no_close_io = {} # Port list not to close on spawned
163
- @anchored_port_map.each_key do |ch|
164
- no_close_io[ch] = ch
147
+ BayServer.anchorable_port_map.each_key do |rd|
148
+ no_close_io[rd.key()] = rd.key()
165
149
  if ports != ""
166
150
  ports +=","
167
151
  end
168
- ports += ch.fileno.to_s
152
+ ports += rd.key().fileno.to_s
169
153
  end
170
154
  new_argv << "-ports=" + ports
171
155
 
@@ -245,9 +229,23 @@ module Baykit
245
229
 
246
230
  def self.join
247
231
  while !@monitors.empty?
232
+ err = nil
248
233
  @monitors.values.each do |mon|
249
- mon.child_thread.join
250
- sleep 5
234
+ begin
235
+ mon.child_thread.join
236
+ sleep 5
237
+ rescue Interrupt => e
238
+ err = e
239
+ BayLog.error("%s Interrupted! Kill child: %d", mon, mon.child_pid)
240
+ begin
241
+ Process.kill("INT", mon.child_pid)
242
+ rescue SystemCallError => e
243
+ BayLog.error("%s Failed to kill child: %s", mon, e)
244
+ end
245
+ end
246
+ end
247
+ if err
248
+ raise err
251
249
  end
252
250
  end
253
251
  end