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
|
@@ -21,9 +21,9 @@ module Baykit
|
|
|
21
21
|
end
|
|
22
22
|
def depart
|
|
23
23
|
if @for_read
|
|
24
|
-
@rudder_state.multiplexer.do_next_read(@rudder_state)
|
|
24
|
+
@rudder_state.multiplexer.do_next_read(@rudder_state.rudder)
|
|
25
25
|
else
|
|
26
|
-
@rudder_state.multiplexer.do_next_write(@rudder_state)
|
|
26
|
+
@rudder_state.multiplexer.do_next_write(@rudder_state.rudder)
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
@@ -40,6 +40,7 @@ module Baykit
|
|
|
40
40
|
include Baykit::BayServer::Rudders
|
|
41
41
|
include Baykit::BayServer::Util
|
|
42
42
|
include Baykit::BayServer::Taxi
|
|
43
|
+
include Baykit::BayServer::Common
|
|
43
44
|
|
|
44
45
|
def initialize(agt)
|
|
45
46
|
super
|
|
@@ -87,7 +88,7 @@ module Baykit
|
|
|
87
88
|
st = get_rudder_state(rd)
|
|
88
89
|
BayLog.debug("%s reqWrite st=%s", @agent, st)
|
|
89
90
|
|
|
90
|
-
if st == nil
|
|
91
|
+
if st == nil
|
|
91
92
|
BayLog.warn("%s Channel is closed: %s", @agent, rd)
|
|
92
93
|
lis.call
|
|
93
94
|
return
|
|
@@ -114,10 +115,10 @@ module Baykit
|
|
|
114
115
|
end
|
|
115
116
|
|
|
116
117
|
def req_close(rd)
|
|
118
|
+
BayLog.debug("%s reqClose rd=%s", @agent, rd);
|
|
119
|
+
close_rudder(rd)
|
|
117
120
|
st = get_rudder_state(rd)
|
|
118
|
-
|
|
119
|
-
close_rudder(st)
|
|
120
|
-
@agent.send_closed_letter(st, false)
|
|
121
|
+
@agent.send_closed_letter(st.id, rd, self, true)
|
|
121
122
|
st.access
|
|
122
123
|
end
|
|
123
124
|
|
|
@@ -155,22 +156,25 @@ module Baykit
|
|
|
155
156
|
TaxiRunner.post(@agent.agent_id, TaxiForMpx.new(st, for_read))
|
|
156
157
|
end
|
|
157
158
|
|
|
158
|
-
def do_next_read(
|
|
159
|
-
st
|
|
159
|
+
def do_next_read(rd)
|
|
160
|
+
st = get_rudder_state(rd)
|
|
161
|
+
|
|
160
162
|
begin
|
|
161
163
|
len = st.rudder.read(st.read_buf, st.buf_size)
|
|
162
164
|
if len <= 0
|
|
163
165
|
len = 0
|
|
164
166
|
end
|
|
165
|
-
@agent.send_read_letter(st, len, nil, true)
|
|
167
|
+
@agent.send_read_letter(st.id, rd, self, len, nil, true)
|
|
166
168
|
|
|
167
169
|
rescue Exception => e
|
|
168
|
-
@agent.send_error_letter(st, e, true)
|
|
170
|
+
@agent.send_error_letter(st.id, rd, self, e, true)
|
|
169
171
|
end
|
|
170
172
|
end
|
|
171
173
|
|
|
172
|
-
def do_next_write(
|
|
174
|
+
def do_next_write(rd)
|
|
175
|
+
st = get_rudder_state(rd)
|
|
173
176
|
st.access
|
|
177
|
+
|
|
174
178
|
begin
|
|
175
179
|
if st.write_queue.empty?
|
|
176
180
|
raise Sink("%s write queue is empty", self)
|
|
@@ -183,10 +187,10 @@ module Baykit
|
|
|
183
187
|
len = st.rudder.write(u.buf)
|
|
184
188
|
u.buf.slice!(0, len)
|
|
185
189
|
end
|
|
186
|
-
@agent.send_wrote_letter(st, len, true)
|
|
190
|
+
@agent.send_wrote_letter(st.id, rd, self, len, true)
|
|
187
191
|
|
|
188
192
|
rescue Exception => e
|
|
189
|
-
@agent.send_error_letter(st, e, true)
|
|
193
|
+
@agent.send_error_letter(st.id, rd, self, e, true)
|
|
190
194
|
end
|
|
191
195
|
end
|
|
192
196
|
end
|
|
@@ -81,6 +81,10 @@ module Baykit
|
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
def self.log(lvl, stack_idx, err, fmt, args)
|
|
84
|
+
if lvl < @log_level
|
|
85
|
+
return
|
|
86
|
+
end
|
|
87
|
+
|
|
84
88
|
#pos = caller[1].split("/")[-1]
|
|
85
89
|
apos = parse_caller(caller[1])
|
|
86
90
|
if(!@full_path)
|
|
@@ -90,22 +94,20 @@ module Baykit
|
|
|
90
94
|
#pos = caller[1]
|
|
91
95
|
|
|
92
96
|
if fmt != nil
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
msg = sprintf(fmt, *args)
|
|
99
|
-
end
|
|
100
|
-
rescue => e
|
|
101
|
-
puts(e.class)
|
|
102
|
-
puts(e.message + " " + pos)
|
|
103
|
-
print_exception(e)
|
|
104
|
-
msg = fmt
|
|
97
|
+
begin
|
|
98
|
+
if args == nil || args.length == 0
|
|
99
|
+
msg = sprintf("%s", fmt)
|
|
100
|
+
else
|
|
101
|
+
msg = sprintf(fmt, *args)
|
|
105
102
|
end
|
|
106
|
-
|
|
107
|
-
|
|
103
|
+
rescue => e
|
|
104
|
+
puts(e.class)
|
|
105
|
+
puts(e.message + " " + pos)
|
|
106
|
+
print_exception(e)
|
|
107
|
+
msg = fmt
|
|
108
108
|
end
|
|
109
|
+
|
|
110
|
+
print("[#{Time.now}] #{LOG_LEVEL_NAME[lvl]}. #{msg} (at #{pos})\n")
|
|
109
111
|
end
|
|
110
112
|
|
|
111
113
|
if err != nil
|
|
@@ -129,8 +131,10 @@ module Baykit
|
|
|
129
131
|
end
|
|
130
132
|
|
|
131
133
|
def self.print_exception err
|
|
132
|
-
|
|
133
|
-
|
|
134
|
+
if err.backtrace != nil
|
|
135
|
+
for s in err.backtrace
|
|
136
|
+
puts "\t" + s
|
|
137
|
+
end
|
|
134
138
|
end
|
|
135
139
|
if err.cause
|
|
136
140
|
puts "Caused by:"
|
|
@@ -28,6 +28,7 @@ require 'baykit/bayserver/protocol/protocol_handler_store'
|
|
|
28
28
|
|
|
29
29
|
require 'baykit/bayserver/docker/package'
|
|
30
30
|
require 'baykit/bayserver/common/inbound_ship_store'
|
|
31
|
+
require 'baykit/bayserver/common/rudder_state_store'
|
|
31
32
|
require 'baykit/bayserver/common/warp_ship_store'
|
|
32
33
|
|
|
33
34
|
require 'baykit/bayserver/util/locale'
|
|
@@ -52,7 +53,6 @@ module Baykit
|
|
|
52
53
|
include Baykit::BayServer::Agent::Signal
|
|
53
54
|
include Baykit::BayServer::Agent::Monitor
|
|
54
55
|
include Baykit::BayServer::Protocol
|
|
55
|
-
include Baykit::BayServer::WaterCraft
|
|
56
56
|
include Baykit::BayServer::Tours
|
|
57
57
|
include Baykit::BayServer::Docker
|
|
58
58
|
include Baykit::BayServer::Docker::Base
|
|
@@ -249,6 +249,7 @@ module Baykit
|
|
|
249
249
|
|
|
250
250
|
# Init stores, memory usage managers
|
|
251
251
|
PacketStore.init()
|
|
252
|
+
RudderStateStore.init()
|
|
252
253
|
InboundShipStore.init()
|
|
253
254
|
ProtocolHandlerStore.init()
|
|
254
255
|
TourStore.init(TourStore::MAX_TOURS)
|
|
@@ -281,7 +282,7 @@ module Baykit
|
|
|
281
282
|
end
|
|
282
283
|
end
|
|
283
284
|
|
|
284
|
-
def self.open_ports(
|
|
285
|
+
def self.open_ports()
|
|
285
286
|
@ports.each do |dkr|
|
|
286
287
|
# open port
|
|
287
288
|
adr = dkr.address()
|
|
@@ -312,8 +313,6 @@ module Baykit
|
|
|
312
313
|
|
|
313
314
|
skt.listen(0)
|
|
314
315
|
|
|
315
|
-
#skt = port_dkr.new_server_socket skt
|
|
316
|
-
anchored_port_map[skt] = dkr
|
|
317
316
|
else
|
|
318
317
|
# Open UDP port
|
|
319
318
|
BayLog.info(BayMessage.get(:MSG_OPENING_UDP_PORT, dkr.host, dkr.port, dkr.protocol()))
|
|
@@ -328,23 +327,20 @@ module Baykit
|
|
|
328
327
|
BayLog.error_e(e, BayMessage.get(:INT_CANNOT_OPEN_PORT, dkr.host, dkr.port, e))
|
|
329
328
|
raise e
|
|
330
329
|
end
|
|
331
|
-
|
|
330
|
+
@unanchorable_port_map[IORudder.new(skt)] = dkr
|
|
332
331
|
|
|
333
332
|
end
|
|
334
333
|
end
|
|
335
334
|
end
|
|
336
335
|
|
|
337
336
|
def self.parent_start()
|
|
338
|
-
anchored_port_map = {}
|
|
339
|
-
unanchored_port_map = {}
|
|
340
|
-
|
|
341
337
|
|
|
342
338
|
if @harbor.multi_core
|
|
343
339
|
if !SysUtil.run_on_windows()
|
|
344
|
-
open_ports(
|
|
340
|
+
open_ports()
|
|
345
341
|
end
|
|
346
342
|
else
|
|
347
|
-
open_ports(
|
|
343
|
+
open_ports()
|
|
348
344
|
|
|
349
345
|
# Thread mode
|
|
350
346
|
GrandAgent.init(
|
|
@@ -355,7 +351,7 @@ module Baykit
|
|
|
355
351
|
end
|
|
356
352
|
|
|
357
353
|
SignalAgent.init(@harbor.control_port)
|
|
358
|
-
GrandAgentMonitor.init(@harbor.grand_agents
|
|
354
|
+
GrandAgentMonitor.init(@harbor.grand_agents)
|
|
359
355
|
create_pid_file(Process.pid)
|
|
360
356
|
GrandAgentMonitor.join
|
|
361
357
|
end
|
|
@@ -364,11 +360,8 @@ module Baykit
|
|
|
364
360
|
|
|
365
361
|
invoke_runners()
|
|
366
362
|
|
|
367
|
-
@anchorable_port_map = {}
|
|
368
|
-
unanchored_port_map = {}
|
|
369
|
-
|
|
370
363
|
if(SysUtil.run_on_windows())
|
|
371
|
-
open_ports(
|
|
364
|
+
open_ports()
|
|
372
365
|
else
|
|
373
366
|
@derived_port_nos.each do |no|
|
|
374
367
|
# Rebuild server socket
|
|
@@ -214,7 +214,7 @@ module Baykit
|
|
|
214
214
|
if keep_alive
|
|
215
215
|
res_conn = tur.res.headers.get_connection()
|
|
216
216
|
keep_alive = (res_conn == Headers::CONNECTION_KEEP_ALIVE) ||
|
|
217
|
-
(res_conn == Headers::
|
|
217
|
+
(res_conn == Headers::CONNECTION_UNKNOWN)
|
|
218
218
|
end
|
|
219
219
|
if keep_alive
|
|
220
220
|
if tur.res.headers.content_length() < 0
|
|
@@ -1,15 +1,26 @@
|
|
|
1
|
+
require 'baykit/bayserver/util/reusable'
|
|
2
|
+
require 'baykit/bayserver/util/counter'
|
|
1
3
|
|
|
2
4
|
module Baykit
|
|
3
5
|
module BayServer
|
|
4
|
-
module
|
|
5
|
-
module Multiplexer
|
|
6
|
+
module Common
|
|
6
7
|
class RudderState
|
|
8
|
+
include Baykit::BayServer::Util::Reusable # implements
|
|
9
|
+
|
|
10
|
+
include Baykit::BayServer::Util
|
|
11
|
+
class << self
|
|
12
|
+
attr :id_counter
|
|
13
|
+
end
|
|
14
|
+
@id_counter = Counter.new
|
|
15
|
+
|
|
16
|
+
attr :id
|
|
17
|
+
|
|
7
18
|
attr :rudder
|
|
8
19
|
attr :transporter
|
|
9
20
|
attr_accessor :multiplexer
|
|
10
21
|
|
|
11
22
|
attr :last_access_time
|
|
12
|
-
|
|
23
|
+
attr_accessor :closing
|
|
13
24
|
attr :read_buf
|
|
14
25
|
attr :buf_size
|
|
15
26
|
attr :write_queue
|
|
@@ -21,17 +32,19 @@ module Baykit
|
|
|
21
32
|
attr :write_queue_lock
|
|
22
33
|
attr :reading_lock
|
|
23
34
|
attr :writing_lock
|
|
24
|
-
attr_accessor :closed
|
|
25
35
|
attr_accessor :finale
|
|
26
36
|
|
|
27
37
|
attr_accessor :accepting
|
|
28
38
|
attr_accessor :connecting
|
|
29
39
|
|
|
40
|
+
def initialize
|
|
41
|
+
|
|
42
|
+
end
|
|
30
43
|
|
|
31
|
-
def
|
|
44
|
+
def init(rd, tp = nil, timeout_sec = 0)
|
|
45
|
+
@id = RudderState.id_counter.next
|
|
32
46
|
@rudder = rd
|
|
33
47
|
@transporter = tp
|
|
34
|
-
@closed = false
|
|
35
48
|
@timeout_sec = timeout_sec
|
|
36
49
|
|
|
37
50
|
if tp != nil
|
|
@@ -60,6 +73,30 @@ module Baykit
|
|
|
60
73
|
return str
|
|
61
74
|
end
|
|
62
75
|
|
|
76
|
+
#########################################
|
|
77
|
+
# Implements Reusable
|
|
78
|
+
#########################################
|
|
79
|
+
def reset()
|
|
80
|
+
@id = 0
|
|
81
|
+
@rudder = nil
|
|
82
|
+
@transporter = nil
|
|
83
|
+
@multiplexer = nil
|
|
84
|
+
|
|
85
|
+
@last_access_time = 0
|
|
86
|
+
@closing = false
|
|
87
|
+
@read_buf.clear
|
|
88
|
+
@write_queue = []
|
|
89
|
+
@bytes_read = 0
|
|
90
|
+
@bytes_wrote = 0
|
|
91
|
+
@finale = false
|
|
92
|
+
@reading = false
|
|
93
|
+
@writing = false
|
|
94
|
+
@timeout_sec = 0
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
#########################################
|
|
98
|
+
# Custom methods
|
|
99
|
+
#########################################
|
|
63
100
|
|
|
64
101
|
def access
|
|
65
102
|
@last_access_time = Time.now.tv_sec
|
|
@@ -69,7 +106,6 @@ module Baykit
|
|
|
69
106
|
@finale = true
|
|
70
107
|
end
|
|
71
108
|
|
|
72
|
-
end
|
|
73
109
|
end
|
|
74
110
|
end
|
|
75
111
|
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require 'baykit/bayserver/agent/grand_agent'
|
|
2
|
+
require 'baykit/bayserver/agent/lifecycle_listener'
|
|
3
|
+
|
|
4
|
+
require 'baykit/bayserver/common/rudder_state'
|
|
5
|
+
|
|
6
|
+
require 'baykit/bayserver/util/object_store'
|
|
7
|
+
require 'baykit/bayserver/util/string_util'
|
|
8
|
+
|
|
9
|
+
module Baykit
|
|
10
|
+
module BayServer
|
|
11
|
+
module Common
|
|
12
|
+
class RudderStateStore < Baykit::BayServer::Util::ObjectStore
|
|
13
|
+
include Baykit::BayServer::Util
|
|
14
|
+
include Baykit::BayServer::Agent
|
|
15
|
+
class AgentListener
|
|
16
|
+
include Baykit::BayServer::Agent::LifecycleListener # implements
|
|
17
|
+
|
|
18
|
+
def add(agt_id)
|
|
19
|
+
RudderStateStore.stores[agt_id] = RudderStateStore.new();
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def remove(agt_id)
|
|
23
|
+
RudderStateStore.stores.delete(agt_id);
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class << self
|
|
28
|
+
# Agent id => InboundShipStore
|
|
29
|
+
attr :stores
|
|
30
|
+
end
|
|
31
|
+
@stores = {}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def initialize
|
|
35
|
+
super
|
|
36
|
+
@factory = -> { RudderState.new() }
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
#
|
|
40
|
+
# print memory usage
|
|
41
|
+
#
|
|
42
|
+
def print_usage(indent)
|
|
43
|
+
BayLog.info("%sRudderStateStore Usage:", StringUtil.indent(indent))
|
|
44
|
+
super(indent+1)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
######################################################
|
|
49
|
+
# class methods
|
|
50
|
+
######################################################
|
|
51
|
+
def self.init()
|
|
52
|
+
GrandAgent.add_lifecycle_listener(AgentListener.new())
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def self.get_store(agent_id)
|
|
56
|
+
return @stores[agent_id]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
@@ -2,8 +2,7 @@ require 'baykit/bayserver/util/reusable'
|
|
|
2
2
|
|
|
3
3
|
module Baykit
|
|
4
4
|
module BayServer
|
|
5
|
-
module
|
|
6
|
-
module Multiplexer
|
|
5
|
+
module Common
|
|
7
6
|
module Transporter # interface
|
|
8
7
|
include Baykit::BayServer::Util::Reusable # implements
|
|
9
8
|
|
|
@@ -55,7 +54,6 @@ module Baykit
|
|
|
55
54
|
raise NotImplementedError.new
|
|
56
55
|
end
|
|
57
56
|
end
|
|
58
|
-
end
|
|
59
57
|
end
|
|
60
58
|
end
|
|
61
59
|
end
|
|
@@ -172,10 +172,10 @@ module Baykit
|
|
|
172
172
|
|
|
173
173
|
def end_warp_tour(tur, keep)
|
|
174
174
|
wdat = WarpData.get(tur)
|
|
175
|
-
BayLog.debug("%s end warp tour: started=%s ended=%s", tur, wdat.started, wdat.ended)
|
|
175
|
+
BayLog.debug("%s end warp tour: wtur#%d started=%s ended=%s", tur, wdat.warp_id, wdat.started, wdat.ended)
|
|
176
176
|
|
|
177
177
|
if(!@tour_map.include?(wdat.warp_id))
|
|
178
|
-
raise Sink.new("%s WarpId not in tourMap:
|
|
178
|
+
raise Sink.new("%s WarpId not in tourMap: wture#%d", tur, wdat.warp_id);
|
|
179
179
|
else
|
|
180
180
|
@tour_map.delete wdat.warp_id
|
|
181
181
|
end
|
|
@@ -214,8 +214,9 @@ module Baykit
|
|
|
214
214
|
def notify_error_to_owner_tour(status, msg)
|
|
215
215
|
@lock.synchronize do
|
|
216
216
|
@tour_map.keys.each do |warp_id|
|
|
217
|
+
BayLog.debug("%s wtur#%d notify error to owner", self, warp_id)
|
|
217
218
|
tur = get_tour(warp_id)
|
|
218
|
-
BayLog.debug("%s send error to owner: %s running=%s", self, tur, tur.running?)
|
|
219
|
+
BayLog.debug("%s wtur#%d send error to owner: %s running=%s", self, warp_id, tur, tur.running?)
|
|
219
220
|
if tur.running? || tur.reading?
|
|
220
221
|
begin
|
|
221
222
|
tur.res.send_error(Tour::TOUR_ID_NOCHECK, status, msg)
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
require 'baykit/bayserver/protocol/protocol_handler_store'
|
|
2
2
|
require 'baykit/bayserver/bcf/package'
|
|
3
|
-
require 'baykit/bayserver/agent/multiplexer/plain_transporter'
|
|
4
3
|
require 'baykit/bayserver/rudders/io_rudder'
|
|
5
4
|
require 'baykit/bayserver/util/object_store'
|
|
6
5
|
require 'baykit/bayserver/util/object_factory'
|
|
@@ -8,6 +7,7 @@ require 'baykit/bayserver/util/object_factory'
|
|
|
8
7
|
require 'baykit/bayserver/docker/port'
|
|
9
8
|
require 'baykit/bayserver/docker/base/docker_base'
|
|
10
9
|
require 'baykit/bayserver/common/inbound_ship_store'
|
|
10
|
+
require 'baykit/bayserver/agent/multiplexer/plain_transporter'
|
|
11
11
|
|
|
12
12
|
module Baykit
|
|
13
13
|
module BayServer
|
|
@@ -21,7 +21,6 @@ module Baykit
|
|
|
21
21
|
include Baykit::BayServer::Agent::Multiplexer
|
|
22
22
|
include Baykit::BayServer::Docker
|
|
23
23
|
include Baykit::BayServer::Docker::Base
|
|
24
|
-
include Baykit::BayServer::WaterCraft
|
|
25
24
|
include Baykit::BayServer::Protocol
|
|
26
25
|
include Baykit::BayServer::Rudders
|
|
27
26
|
include Baykit::BayServer::Util
|
|
@@ -152,8 +151,8 @@ module Baykit
|
|
|
152
151
|
raise ConfigException.new(kv.file_name, kv.line_no, BayMessage.get(:CFG_INVALID_PARAMETER_VALUE, kv.value))
|
|
153
152
|
end
|
|
154
153
|
|
|
155
|
-
name
|
|
156
|
-
value = kv.value[idx+1
|
|
154
|
+
name = kv.value[0, idx].strip
|
|
155
|
+
value = kv.value[idx+1, kv.value.length].strip
|
|
157
156
|
@additional_headers << [name, value]
|
|
158
157
|
|
|
159
158
|
else
|
|
@@ -218,7 +217,8 @@ module Baykit
|
|
|
218
217
|
proto_hnd = PortBase.get_protocol_handler_store(protocol(), agt_id).rent()
|
|
219
218
|
sip.init_inbound(rd, agt_id, tp, self, proto_hnd)
|
|
220
219
|
|
|
221
|
-
st =
|
|
220
|
+
st = RudderStateStore.get_store(agt_id).rent()
|
|
221
|
+
st.init(rd, tp)
|
|
222
222
|
agt.net_multiplexer.add_rudder_state(rd, st)
|
|
223
223
|
agt.net_multiplexer.req_read(rd)
|
|
224
224
|
end
|
|
@@ -2,11 +2,11 @@ require 'uri'
|
|
|
2
2
|
|
|
3
3
|
require 'baykit/bayserver/agent/grand_agent'
|
|
4
4
|
require 'baykit/bayserver/agent/lifecycle_listener'
|
|
5
|
-
require 'baykit/bayserver/agent/multiplexer/rudder_state'
|
|
6
5
|
require 'baykit/bayserver/docker/warp'
|
|
7
6
|
require 'baykit/bayserver/docker/base/club_base'
|
|
8
7
|
require 'baykit/bayserver/common/warp_data'
|
|
9
8
|
require 'baykit/bayserver/common/warp_ship_store'
|
|
9
|
+
require 'baykit/bayserver/common/rudder_state'
|
|
10
10
|
|
|
11
11
|
module Baykit
|
|
12
12
|
module BayServer
|
|
@@ -20,6 +20,7 @@ module Baykit
|
|
|
20
20
|
include Baykit::BayServer::Protocol
|
|
21
21
|
include Baykit::BayServer::Util
|
|
22
22
|
include Baykit::BayServer::Rudders
|
|
23
|
+
include Baykit::BayServer::Common
|
|
23
24
|
|
|
24
25
|
class AgentListener
|
|
25
26
|
include Baykit::BayServer::Agent::LifecycleListener # implements
|
|
@@ -214,13 +215,15 @@ module Baykit
|
|
|
214
215
|
wsip.start_warp_tour(tur)
|
|
215
216
|
|
|
216
217
|
if need_connect
|
|
217
|
-
|
|
218
|
+
st = RudderStateStore.get_store(agt.agent_id).rent()
|
|
219
|
+
st.init(wsip.rudder, tp)
|
|
220
|
+
agt.net_multiplexer.add_rudder_state(wsip.rudder, st)
|
|
218
221
|
agt.net_multiplexer.get_transporter(wsip.rudder).req_connect(wsip.rudder, @host_addr[1])
|
|
219
222
|
end
|
|
220
223
|
|
|
221
224
|
rescue SystemCallError => e
|
|
222
|
-
|
|
223
|
-
raise e
|
|
225
|
+
BayLog.error_e(e, "%s Error on starting warp tour", wsip)
|
|
226
|
+
raise HttpException.new(HttpStatus::INTERNAL_SERVER_ERROR, "%s", e)
|
|
224
227
|
rescue HttpException => e
|
|
225
228
|
raise e
|
|
226
229
|
end
|
|
@@ -40,6 +40,9 @@ module Baykit
|
|
|
40
40
|
DEFAULT_CGI_MULTIPLEXER = MULTIPLEXER_TYPE_SPIDER
|
|
41
41
|
DEFAULT_RECIPIENT = RECIPIENT_TYPE_SPIDER
|
|
42
42
|
DEFAULT_PID_FILE = "bayserver.pid"
|
|
43
|
+
DEFAULT_ENABLE_CACHE = false
|
|
44
|
+
DEFAULT_CACHE_LIFESPAN_SEC = 60
|
|
45
|
+
DEFAULT_CACHE_SIZE_MB = 32
|
|
43
46
|
|
|
44
47
|
# Default charset
|
|
45
48
|
attr :charset
|
|
@@ -107,6 +110,14 @@ module Baykit
|
|
|
107
110
|
# PID file name
|
|
108
111
|
attr :pid_file
|
|
109
112
|
|
|
113
|
+
# True if cache is enabled
|
|
114
|
+
attr :enable_cache
|
|
115
|
+
|
|
116
|
+
# Lifespan seconds of cache
|
|
117
|
+
attr :cache_lifespan_sec
|
|
118
|
+
|
|
119
|
+
# Cache size
|
|
120
|
+
attr :cache_size_mb
|
|
110
121
|
|
|
111
122
|
def initialize
|
|
112
123
|
@grand_agents = DEFAULT_SHIP_AGENTS
|
|
@@ -128,6 +139,8 @@ module Baykit
|
|
|
128
139
|
@cgi_multiplexer = DEFAULT_CGI_MULTIPLEXER
|
|
129
140
|
@recipient = DEFAULT_RECIPIENT
|
|
130
141
|
@pid_file = DEFAULT_PID_FILE
|
|
142
|
+
@cache_lifespan_sec = DEFAULT_CACHE_LIFESPAN_SEC
|
|
143
|
+
@cache_size_mb = DEFAULT_CACHE_SIZE_MB
|
|
131
144
|
end
|
|
132
145
|
|
|
133
146
|
######################
|
|
@@ -182,8 +195,8 @@ module Baykit
|
|
|
182
195
|
@log_multiplexer = DEFAULT_LOG_MULTIPLEXER
|
|
183
196
|
end
|
|
184
197
|
|
|
185
|
-
if @
|
|
186
|
-
@
|
|
198
|
+
if @cgi_multiplexer == MULTIPLEXER_TYPE_SPIN ||
|
|
199
|
+
@cgi_multiplexer == MULTIPLEXER_TYPE_PIGEON
|
|
187
200
|
BayLog.warn(
|
|
188
201
|
BayMessage.get(
|
|
189
202
|
:CFG_CGI_MULTIPLEXER_NOT_SUPPORTED,
|
|
@@ -296,6 +309,16 @@ module Baykit
|
|
|
296
309
|
|
|
297
310
|
when "pidfile"
|
|
298
311
|
@pid_file = kv.value
|
|
312
|
+
|
|
313
|
+
when "enablecache"
|
|
314
|
+
@enable_cache = StringUtil.parse_bool(kv.value)
|
|
315
|
+
|
|
316
|
+
when "cachelifespan"
|
|
317
|
+
@cache_lifespan_sec = kv.value.to_i
|
|
318
|
+
|
|
319
|
+
when "cachesize"
|
|
320
|
+
@cache_size_mb = kv.value.to_i
|
|
321
|
+
|
|
299
322
|
else
|
|
300
323
|
return false
|
|
301
324
|
end
|