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.
- checksums.yaml +4 -4
- data/lib/baykit/bayserver/agent/command_receiver.rb +2 -0
- data/lib/baykit/bayserver/agent/grand_agent.rb +145 -133
- data/lib/baykit/bayserver/agent/letters/accepted_letter.rb +17 -0
- data/lib/baykit/bayserver/agent/letters/closed_letter.rb +14 -0
- data/lib/baykit/bayserver/agent/letters/connected_letter.rb +14 -0
- data/lib/baykit/bayserver/agent/letters/error_letter.rb +16 -0
- data/lib/baykit/bayserver/agent/letters/letter.rb +19 -0
- data/lib/baykit/bayserver/agent/letters/package.rb +9 -0
- data/lib/baykit/bayserver/agent/letters/read_letter.rb +20 -0
- data/lib/baykit/bayserver/agent/letters/wrote_letter.rb +17 -0
- data/lib/baykit/bayserver/agent/monitor/grand_agent_monitor.rb +49 -49
- data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer.rb +47 -32
- data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer_base.rb +5 -0
- data/lib/baykit/bayserver/agent/multiplexer/multiplexer_base.rb +12 -28
- data/lib/baykit/bayserver/agent/multiplexer/plain_transporter.rb +20 -5
- data/lib/baykit/bayserver/agent/multiplexer/spider_multiplexer.rb +125 -87
- data/lib/baykit/bayserver/agent/multiplexer/spin_multiplexer.rb +24 -19
- data/lib/baykit/bayserver/agent/multiplexer/taxi_multiplexer.rb +21 -15
- 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 +5 -45
- data/lib/baykit/bayserver/common/inbound_ship_store.rb +0 -1
- data/lib/baykit/bayserver/common/multiplexer.rb +5 -1
- data/lib/baykit/bayserver/{agent/multiplexer → common}/rudder_state.rb +42 -11
- data/lib/baykit/bayserver/common/rudder_state_store.rb +63 -0
- data/lib/baykit/bayserver/{agent/multiplexer → common}/transporter.rb +2 -4
- data/lib/baykit/bayserver/common/warp_ship.rb +12 -7
- data/lib/baykit/bayserver/{agent/multiplexer → common}/write_unit.rb +2 -4
- 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_city_docker.rb +1 -1
- 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 +43 -35
- 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 +18 -13
- data/lib/baykit/bayserver/tours/tour_req.rb +13 -15
- data/lib/baykit/bayserver/tours/tour_res.rb +42 -19
- 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 +24 -21
- 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/letter.rb +0 -30
- 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
|
|
@@ -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/
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
when
|
|
229
|
-
|
|
230
|
-
when
|
|
231
|
-
|
|
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
|
-
|
|
287
|
-
|
|
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(
|
|
291
|
-
|
|
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(
|
|
295
|
-
|
|
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(
|
|
298
|
-
|
|
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(
|
|
302
|
-
|
|
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
|
|
306
|
-
|
|
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
|
-
|
|
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
|
|
426
|
+
def on_accepted(let, st)
|
|
407
427
|
begin
|
|
408
|
-
|
|
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
|
-
|
|
419
|
-
|
|
431
|
+
st.transporter.on_error(st.rudder, e)
|
|
432
|
+
next_action(st, NextSocketAction::CLOSE, false)
|
|
420
433
|
end
|
|
421
434
|
|
|
422
|
-
if
|
|
423
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
489
|
-
|
|
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
|
-
|
|
508
|
-
|
|
509
|
-
|
|
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
|
-
|
|
524
|
-
|
|
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
|
-
|
|
527
|
-
|
|
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
|
|
543
|
-
st
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
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.
|
|
551
|
-
|
|
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.
|
|
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,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
|
+
|