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.
- checksums.yaml +4 -4
- data/lib/baykit/bayserver/agent/command_receiver.rb +2 -0
- data/lib/baykit/bayserver/agent/grand_agent.rb +101 -93
- data/lib/baykit/bayserver/agent/letters/accepted_letter.rb +2 -2
- data/lib/baykit/bayserver/agent/letters/closed_letter.rb +2 -2
- data/lib/baykit/bayserver/agent/letters/connected_letter.rb +2 -2
- data/lib/baykit/bayserver/agent/letters/error_letter.rb +2 -2
- data/lib/baykit/bayserver/agent/letters/letter.rb +7 -3
- data/lib/baykit/bayserver/agent/letters/read_letter.rb +2 -2
- data/lib/baykit/bayserver/agent/letters/wrote_letter.rb +2 -2
- data/lib/baykit/bayserver/agent/monitor/grand_agent_monitor.rb +20 -22
- data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer.rb +44 -31
- data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer_base.rb +5 -0
- data/lib/baykit/bayserver/agent/multiplexer/multiplexer_base.rb +4 -4
- data/lib/baykit/bayserver/agent/multiplexer/plain_transporter.rb +2 -3
- data/lib/baykit/bayserver/agent/multiplexer/spider_multiplexer.rb +113 -59
- data/lib/baykit/bayserver/agent/multiplexer/spin_multiplexer.rb +22 -17
- data/lib/baykit/bayserver/agent/multiplexer/taxi_multiplexer.rb +17 -13
- data/lib/baykit/bayserver/bay_log.rb +20 -16
- data/lib/baykit/bayserver/bayserver.rb +8 -15
- data/lib/baykit/bayserver/common/cities.rb +1 -1
- data/lib/baykit/bayserver/common/inbound_ship.rb +1 -1
- data/lib/baykit/bayserver/common/inbound_ship_store.rb +0 -1
- data/lib/baykit/bayserver/{agent/multiplexer → common}/rudder_state.rb +43 -7
- data/lib/baykit/bayserver/common/rudder_state_store.rb +63 -0
- data/lib/baykit/bayserver/{agent/multiplexer → common}/transporter.rb +1 -3
- data/lib/baykit/bayserver/common/warp_ship.rb +4 -3
- data/lib/baykit/bayserver/{agent/multiplexer → common}/write_unit.rb +1 -3
- data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +0 -1
- data/lib/baykit/bayserver/docker/base/port_base.rb +5 -5
- data/lib/baykit/bayserver/docker/base/warp_base.rb +7 -4
- data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +25 -2
- data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +42 -26
- data/lib/baykit/bayserver/docker/harbor.rb +14 -0
- data/lib/baykit/bayserver/docker/send_file/file_content.rb +66 -0
- data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +113 -29
- data/lib/baykit/bayserver/docker/send_file/file_store.rb +117 -0
- data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +13 -5
- data/lib/baykit/bayserver/docker/send_file/send_file_ship.rb +11 -2
- data/lib/baykit/bayserver/docker/send_file/wait_file_ship.rb +92 -0
- data/lib/baykit/bayserver/mem_usage.rb +2 -0
- data/lib/baykit/bayserver/protocol/packet.rb +2 -1
- data/lib/baykit/bayserver/protocol/packet_part_accessor.rb +5 -5
- data/lib/baykit/bayserver/protocol/protocol_exception.rb +7 -1
- data/lib/baykit/bayserver/rudders/io_rudder.rb +2 -2
- data/lib/baykit/bayserver/rudders/rudder.rb +4 -0
- data/lib/baykit/bayserver/rudders/rudder_base.rb +21 -0
- data/lib/baykit/bayserver/tours/req_content_handler.rb +13 -13
- data/lib/baykit/bayserver/tours/tour.rb +1 -6
- data/lib/baykit/bayserver/tours/tour_req.rb +4 -8
- data/lib/baykit/bayserver/tours/tour_res.rb +1 -8
- data/lib/baykit/bayserver/util/cgi_util.rb +7 -2
- data/lib/baykit/bayserver/util/headers.rb +2 -2
- data/lib/baykit/bayserver/util/http_status.rb +7 -0
- data/lib/baykit/bayserver/util/http_util.rb +16 -0
- data/lib/baykit/bayserver/util/nio_selector.rb +103 -0
- data/lib/baykit/bayserver/util/rb_selector.rb +55 -0
- data/lib/baykit/bayserver/util/selector.rb +43 -80
- data/lib/baykit/bayserver/util/simple_buffer.rb +1 -1
- data/lib/baykit/bayserver/version.rb +1 -1
- metadata +16 -20
- data/lib/baykit/bayserver/agent/accept_handler.rb +0 -71
- data/lib/baykit/bayserver/agent/channel_listener.rb +0 -35
- data/lib/baykit/bayserver/agent/transporter/data_listener.rb +0 -38
- data/lib/baykit/bayserver/agent/transporter/package.rb +0 -0
- data/lib/baykit/bayserver/agent/transporter/spin_read_transporter.rb +0 -111
- data/lib/baykit/bayserver/agent/transporter/spin_write_transporter.rb +0 -125
- data/lib/baykit/bayserver/agent/transporter/transporter.rb +0 -332
- data/lib/baykit/bayserver/docker/built_in/log_boat.rb +0 -71
- data/lib/baykit/bayserver/tours/send_file_yacht.rb +0 -97
- data/lib/baykit/bayserver/watercraft/boat.rb +0 -43
- data/lib/baykit/bayserver/watercraft/yacht.rb +0 -42
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4df3cb76d96f99278b232a1deab31c4da2888d16748bb6a9aa3a7812163fa4fa
|
|
4
|
+
data.tar.gz: 53ad43da3c1929e288d2dfb22b5d96a92db55b0e513ad4d9c33a739327a8b9ab
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c0005c9f1ae41149009d37a7c18fc795e0957a437b40d9f80efa13cd4504317ef3e34524f47d79eb91b2a23fc23575af2e337dbe5f6c110fd3bfc30895fc57e3
|
|
7
|
+
data.tar.gz: 13a49be5a1cbde27fd6986b6e05af2937cc3ee5bb8961d33d7246850596a52422d738a09bdb7adff6c07f68e923157e6058e2c5e0c95714db50dfa2c00a5b840
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
290
|
-
|
|
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(
|
|
294
|
-
|
|
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(
|
|
298
|
-
|
|
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(
|
|
301
|
-
|
|
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(
|
|
305
|
-
|
|
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(
|
|
309
|
-
|
|
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(
|
|
313
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
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
|
|
543
|
-
|
|
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
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
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
|
|
@@ -3,9 +3,13 @@ module Baykit
|
|
|
3
3
|
module Agent
|
|
4
4
|
module Letters
|
|
5
5
|
class Letter
|
|
6
|
-
attr :
|
|
7
|
-
|
|
8
|
-
|
|
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
|
|
@@ -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
|
|
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
|
-
|
|
164
|
-
no_close_io[
|
|
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 +=
|
|
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
|
-
|
|
250
|
-
|
|
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
|