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
|
@@ -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
|
|
@@ -166,51 +166,11 @@ module Baykit
|
|
|
166
166
|
def send_headers(check_id, tur)
|
|
167
167
|
check_ship_id(check_id)
|
|
168
168
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
BayLog.debug("%s zombie tur", tur)
|
|
172
|
-
return
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
handled = false
|
|
176
|
-
if !tur.error_handling && tur.res.headers.status >= 400
|
|
177
|
-
trouble = BayServer.harbor.trouble
|
|
178
|
-
if trouble != nil
|
|
179
|
-
cmd = trouble.find(tur.res.headers.status)
|
|
180
|
-
if cmd != nil
|
|
181
|
-
err_tour = get_error_tour
|
|
182
|
-
err_tour.req.uri = cmd.target
|
|
183
|
-
tur.req.headers.copy_to(err_tour.req.headers)
|
|
184
|
-
tur.res.headers.copy_to(err_tour.res.headers)
|
|
185
|
-
err_tour.req.remote_port = tur.req.remote_port
|
|
186
|
-
err_tour.req.remote_address = tur.req.remote_address
|
|
187
|
-
err_tour.req.server_address = tur.req.server_address
|
|
188
|
-
err_tour.req.server_port = tur.req.server_port
|
|
189
|
-
err_tour.req.server_name = tur.req.server_name
|
|
190
|
-
err_tour.res.header_sent = tur.res.header_sent
|
|
191
|
-
tur.change_state(Tour::TOUR_ID_NOCHECK, Tour::TourState::ZOMBIE)
|
|
192
|
-
case cmd.method
|
|
193
|
-
when :GUIDE
|
|
194
|
-
err_tour.go
|
|
195
|
-
when :TEXT
|
|
196
|
-
@protocol_handler.send_headers(err_tour)
|
|
197
|
-
data = cmd.target
|
|
198
|
-
err_tour.res.send_content(Tour::TOUR_ID_NOCHECK, data, 0, data.length)
|
|
199
|
-
err_tour.end_content(Tour::TOUR_ID_NOCHECK)
|
|
200
|
-
when :REROUTE
|
|
201
|
-
err_tour.res.send_http_exception(Tour::TOUR_ID_NOCHECK, HttpException.moved_temp(cmd.target))
|
|
202
|
-
end
|
|
203
|
-
handled = true
|
|
204
|
-
end
|
|
205
|
-
end
|
|
206
|
-
end
|
|
207
|
-
if !handled
|
|
208
|
-
@port_docker.additional_headers.each do |nv|
|
|
209
|
-
tur.res.headers.add(nv[0], nv[1])
|
|
210
|
-
end
|
|
211
|
-
BayLog.debug("%s send_res_headers", tur)
|
|
212
|
-
tour_handler.send_res_headers(tur)
|
|
169
|
+
@port_docker.additional_headers.each do |nv|
|
|
170
|
+
tur.res.headers.add(nv[0], nv[1])
|
|
213
171
|
end
|
|
172
|
+
BayLog.debug("%s send_res_headers", tur)
|
|
173
|
+
tour_handler.send_res_headers(tur)
|
|
214
174
|
end
|
|
215
175
|
|
|
216
176
|
def send_redirect(check_id, tur, status, location)
|
|
@@ -254,7 +214,7 @@ module Baykit
|
|
|
254
214
|
if keep_alive
|
|
255
215
|
res_conn = tur.res.headers.get_connection()
|
|
256
216
|
keep_alive = (res_conn == Headers::CONNECTION_KEEP_ALIVE) ||
|
|
257
|
-
(res_conn == Headers::
|
|
217
|
+
(res_conn == Headers::CONNECTION_UNKNOWN)
|
|
258
218
|
end
|
|
259
219
|
if keep_alive
|
|
260
220
|
if tur.res.headers.content_length() < 0
|
|
@@ -9,6 +9,10 @@ module Baykit
|
|
|
9
9
|
raise NotImplementedError.new
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
+
def remove_rudder_state(rd)
|
|
13
|
+
raise NotImplementedError.new
|
|
14
|
+
end
|
|
15
|
+
|
|
12
16
|
def get_rudder_state(rd)
|
|
13
17
|
raise NotImplementedError.new
|
|
14
18
|
end
|
|
@@ -29,7 +33,7 @@ module Baykit
|
|
|
29
33
|
raise NotImplementedError.new
|
|
30
34
|
end
|
|
31
35
|
|
|
32
|
-
def req_write(rd, buf, adr, tag, lis)
|
|
36
|
+
def req_write(rd, buf, adr, tag, &lis)
|
|
33
37
|
raise NotImplementedError.new
|
|
34
38
|
end
|
|
35
39
|
|
|
@@ -1,16 +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
|
-
|
|
14
24
|
attr :read_buf
|
|
15
25
|
attr :buf_size
|
|
16
26
|
attr :write_queue
|
|
@@ -22,17 +32,19 @@ module Baykit
|
|
|
22
32
|
attr :write_queue_lock
|
|
23
33
|
attr :reading_lock
|
|
24
34
|
attr :writing_lock
|
|
25
|
-
attr_accessor :closed
|
|
26
35
|
attr_accessor :finale
|
|
27
36
|
|
|
28
37
|
attr_accessor :accepting
|
|
29
38
|
attr_accessor :connecting
|
|
30
39
|
|
|
40
|
+
def initialize
|
|
31
41
|
|
|
32
|
-
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def init(rd, tp = nil, timeout_sec = 0)
|
|
45
|
+
@id = RudderState.id_counter.next
|
|
33
46
|
@rudder = rd
|
|
34
47
|
@transporter = tp
|
|
35
|
-
@closed = false
|
|
36
48
|
@timeout_sec = timeout_sec
|
|
37
49
|
|
|
38
50
|
if tp != nil
|
|
@@ -46,7 +58,6 @@ module Baykit
|
|
|
46
58
|
|
|
47
59
|
@accepting = false
|
|
48
60
|
@connecting = false
|
|
49
|
-
@closing = false
|
|
50
61
|
@write_queue = []
|
|
51
62
|
@write_queue_lock = Mutex::new
|
|
52
63
|
@reading_lock = Mutex::new
|
|
@@ -59,12 +70,33 @@ module Baykit
|
|
|
59
70
|
|
|
60
71
|
def to_s
|
|
61
72
|
str = "st(rd=#{@rudder} mpx=#{@multiplexer} tp=#{@transporter})"
|
|
62
|
-
if @closing
|
|
63
|
-
str += " closing";
|
|
64
|
-
end
|
|
65
73
|
return str
|
|
66
74
|
end
|
|
67
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
|
+
#########################################
|
|
68
100
|
|
|
69
101
|
def access
|
|
70
102
|
@last_access_time = Time.now.tv_sec
|
|
@@ -74,7 +106,6 @@ module Baykit
|
|
|
74
106
|
@finale = true
|
|
75
107
|
end
|
|
76
108
|
|
|
77
|
-
end
|
|
78
109
|
end
|
|
79
110
|
end
|
|
80
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
|
|
|
@@ -11,7 +10,7 @@ module Baykit
|
|
|
11
10
|
raise NotImplementedError.new
|
|
12
11
|
end
|
|
13
12
|
|
|
14
|
-
def
|
|
13
|
+
def on_connected(rd)
|
|
15
14
|
raise NotImplementedError.new
|
|
16
15
|
end
|
|
17
16
|
|
|
@@ -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
|
|
@@ -170,16 +170,20 @@ module Baykit
|
|
|
170
170
|
end
|
|
171
171
|
end
|
|
172
172
|
|
|
173
|
-
def end_warp_tour(tur)
|
|
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
|
|
182
|
-
|
|
182
|
+
|
|
183
|
+
if keep
|
|
184
|
+
BayLog.debug("%s keep warp ship", self)
|
|
185
|
+
@docker.keep(self)
|
|
186
|
+
end
|
|
183
187
|
end
|
|
184
188
|
|
|
185
189
|
def notify_service_unavailable(msg)
|
|
@@ -197,7 +201,7 @@ module Baykit
|
|
|
197
201
|
end
|
|
198
202
|
|
|
199
203
|
if must
|
|
200
|
-
raise Sink.new("%s warp
|
|
204
|
+
raise Sink.new("%s warp tour not found: id=%d", self, warp_id)
|
|
201
205
|
else
|
|
202
206
|
nil
|
|
203
207
|
end
|
|
@@ -210,9 +214,10 @@ module Baykit
|
|
|
210
214
|
def notify_error_to_owner_tour(status, msg)
|
|
211
215
|
@lock.synchronize do
|
|
212
216
|
@tour_map.keys.each do |warp_id|
|
|
217
|
+
BayLog.debug("%s wtur#%d notify error to owner", self, warp_id)
|
|
213
218
|
tur = get_tour(warp_id)
|
|
214
|
-
BayLog.debug("%s send error to owner: %s running=%s", self, tur, tur.running?)
|
|
215
|
-
if tur.running?
|
|
219
|
+
BayLog.debug("%s wtur#%d send error to owner: %s running=%s", self, warp_id, tur, tur.running?)
|
|
220
|
+
if tur.running? || tur.reading?
|
|
216
221
|
begin
|
|
217
222
|
tur.res.send_error(Tour::TOUR_ID_NOCHECK, status, msg)
|
|
218
223
|
rescue Exception => e
|
|
@@ -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
|
class WriteUnit
|
|
8
7
|
|
|
9
8
|
attr :buf
|
|
@@ -11,7 +10,7 @@ module Baykit
|
|
|
11
10
|
attr :tag
|
|
12
11
|
attr :listener
|
|
13
12
|
|
|
14
|
-
def initialize(buf, adr, tag, lis)
|
|
13
|
+
def initialize(buf, adr, tag, &lis)
|
|
15
14
|
@buf = buf
|
|
16
15
|
@adr = adr
|
|
17
16
|
@tag = tag
|
|
@@ -24,7 +23,6 @@ module Baykit
|
|
|
24
23
|
end
|
|
25
24
|
end
|
|
26
25
|
end
|
|
27
|
-
end
|
|
28
26
|
end
|
|
29
27
|
end
|
|
30
28
|
end
|
|
@@ -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
|