bayserver-core 2.3.2 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/baykit/bayserver/agent/accept_handler.rb +0 -26
- data/lib/baykit/bayserver/agent/channel_listener.rb +6 -6
- data/lib/baykit/bayserver/agent/command_receiver.rb +97 -38
- data/lib/baykit/bayserver/agent/grand_agent.rb +444 -134
- data/lib/baykit/bayserver/agent/letter.rb +30 -0
- data/lib/baykit/bayserver/agent/lifecycle_listener.rb +9 -7
- data/lib/baykit/bayserver/agent/monitor/grand_agent_monitor.rb +298 -0
- data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer.rb +257 -0
- data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer_base.rb +52 -0
- data/lib/baykit/bayserver/agent/multiplexer/multiplexer_base.rb +150 -0
- data/lib/baykit/bayserver/agent/multiplexer/plain_transporter.rb +129 -0
- data/lib/baykit/bayserver/agent/multiplexer/rudder_state.rb +81 -0
- data/lib/baykit/bayserver/agent/multiplexer/secure_transporter.rb +50 -0
- data/lib/baykit/bayserver/agent/multiplexer/spider_multiplexer.rb +561 -0
- data/lib/baykit/bayserver/agent/multiplexer/spin_multiplexer.rb +311 -0
- data/lib/baykit/bayserver/agent/multiplexer/taxi_multiplexer.rb +194 -0
- data/lib/baykit/bayserver/agent/multiplexer/transporter.rb +61 -0
- data/lib/baykit/bayserver/agent/multiplexer/write_unit.rb +30 -0
- data/lib/baykit/bayserver/agent/non_blocking_handler.rb +0 -319
- data/lib/baykit/bayserver/agent/signal/signal_agent.rb +2 -1
- data/lib/baykit/bayserver/agent/timer_handler.rb +1 -1
- data/lib/baykit/bayserver/agent/transporter/data_listener.rb +7 -7
- data/lib/baykit/bayserver/agent/transporter/package.rb +0 -3
- data/lib/baykit/bayserver/agent/transporter/transporter.rb +5 -139
- data/lib/baykit/bayserver/bay_log.rb +1 -0
- data/lib/baykit/bayserver/bayserver.rb +32 -28
- data/lib/baykit/bayserver/{util → common}/groups.rb +1 -1
- data/lib/baykit/bayserver/common/inbound_handler.rb +12 -0
- data/lib/baykit/bayserver/{docker/base → common}/inbound_ship.rb +94 -19
- data/lib/baykit/bayserver/{docker/base → common}/inbound_ship_store.rb +7 -9
- data/lib/baykit/bayserver/common/multiplexer.rb +98 -0
- data/lib/baykit/bayserver/common/postpone.rb +15 -0
- data/lib/baykit/bayserver/common/read_only_ship.rb +42 -0
- data/lib/baykit/bayserver/common/recipient.rb +24 -0
- data/lib/baykit/bayserver/common/vehicle.rb +24 -0
- data/lib/baykit/bayserver/common/vehicle_runner.rb +127 -0
- data/lib/baykit/bayserver/{docker/warp → common}/warp_data.rb +18 -10
- data/lib/baykit/bayserver/common/warp_handler.rb +27 -0
- data/lib/baykit/bayserver/{docker/warp → common}/warp_ship.rb +107 -27
- data/lib/baykit/bayserver/{docker/warp → common}/warp_ship_store.rb +3 -8
- data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +2 -2
- data/lib/baykit/bayserver/docker/base/port_base.rb +59 -27
- data/lib/baykit/bayserver/docker/{warp/warp_docker.rb → base/warp_base.rb} +43 -50
- data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +118 -31
- data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +60 -63
- data/lib/baykit/bayserver/docker/built_in/built_in_permission_docker.rb +11 -10
- data/lib/baykit/bayserver/docker/built_in/built_in_secure_docker.rb +13 -4
- data/lib/baykit/bayserver/docker/city.rb +27 -13
- data/lib/baykit/bayserver/docker/club.rb +8 -8
- data/lib/baykit/bayserver/docker/docker.rb +9 -1
- data/lib/baykit/bayserver/docker/harbor.rb +184 -22
- data/lib/baykit/bayserver/docker/permission.rb +7 -6
- data/lib/baykit/bayserver/docker/port.rb +39 -11
- data/lib/baykit/bayserver/docker/secure.rb +11 -9
- data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +99 -4
- data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +6 -2
- data/lib/baykit/bayserver/docker/send_file/send_file_ship.rb +92 -0
- data/lib/baykit/bayserver/docker/town.rb +31 -15
- data/lib/baykit/bayserver/docker/trouble.rb +17 -5
- data/lib/baykit/bayserver/docker/warp.rb +34 -0
- data/lib/baykit/bayserver/mem_usage.rb +9 -9
- data/lib/baykit/bayserver/protocol/command_packer.rb +1 -8
- data/lib/baykit/bayserver/protocol/packet_packer.rb +7 -11
- data/lib/baykit/bayserver/protocol/packet_store.rb +4 -4
- data/lib/baykit/bayserver/protocol/protocol_handler.rb +26 -8
- data/lib/baykit/bayserver/protocol/protocol_handler_store.rb +5 -5
- data/lib/baykit/bayserver/rudders/io_rudder.rb +62 -0
- data/lib/baykit/bayserver/rudders/rudder.rb +29 -0
- data/lib/baykit/bayserver/{watercraft → ships}/ship.rb +65 -41
- data/lib/baykit/bayserver/taxi/taxi.rb +15 -10
- data/lib/baykit/bayserver/taxi/taxi_runner.rb +9 -94
- data/lib/baykit/bayserver/tours/read_file_taxi.rb +2 -2
- data/lib/baykit/bayserver/tours/req_content_handler.rb +16 -13
- data/lib/baykit/bayserver/tours/tour.rb +2 -2
- data/lib/baykit/bayserver/tours/tour_handler.rb +36 -0
- data/lib/baykit/bayserver/tours/tour_req.rb +14 -24
- data/lib/baykit/bayserver/tours/tour_res.rb +5 -89
- data/lib/baykit/bayserver/tours/tour_store.rb +5 -5
- data/lib/baykit/bayserver/train/train_runner.rb +17 -13
- data/lib/baykit/bayserver/util/data_consume_listener.rb +1 -1
- data/lib/baykit/bayserver/util/executor_service.rb +11 -7
- data/lib/baykit/bayserver/util/ip_matcher.rb +9 -39
- data/lib/baykit/bayserver/util/locale.rb +1 -1
- data/lib/baykit/bayserver/util/selector.rb +24 -5
- data/lib/baykit/bayserver/util/sys_util.rb +6 -6
- data/lib/baykit/bayserver/version.rb +1 -1
- metadata +37 -18
- data/lib/baykit/bayserver/agent/grand_agent_monitor.rb +0 -231
- data/lib/baykit/bayserver/agent/transporter/plain_transporter.rb +0 -55
- data/lib/baykit/bayserver/agent/transporter/secure_transporter.rb +0 -81
- data/lib/baykit/bayserver/docker/base/inbound_handler.rb +0 -42
- data/lib/baykit/bayserver/docker/warp/package.rb +0 -4
- data/lib/baykit/bayserver/docker/warp/warp_data_listener.rb +0 -112
- data/lib/baykit/bayserver/docker/warp/warp_handler.rb +0 -38
- /data/lib/baykit/bayserver/{util → common}/cities.rb +0 -0
@@ -1,15 +1,11 @@
|
|
1
|
+
require 'baykit/bayserver/common/vehicle'
|
1
2
|
require 'baykit/bayserver/util/counter'
|
3
|
+
|
2
4
|
module Baykit
|
3
5
|
module BayServer
|
4
6
|
module Taxi
|
5
|
-
class Taxi
|
7
|
+
class Taxi < Baykit::BayServer::Common::Vehicle
|
6
8
|
include Baykit::BayServer::Util
|
7
|
-
#
|
8
|
-
# abstract method
|
9
|
-
#
|
10
|
-
# depart()
|
11
|
-
# on_timer()
|
12
|
-
#
|
13
9
|
|
14
10
|
class << self
|
15
11
|
attr :taxi_id_counter
|
@@ -27,11 +23,20 @@ module Baykit
|
|
27
23
|
end
|
28
24
|
|
29
25
|
def run()
|
30
|
-
BayLog.trace("%s Start taxi on: %s", self, Thread.current.name)
|
31
|
-
|
32
|
-
|
26
|
+
BayLog.trace("%s Start taxi on: %s", self, Thread.current.name)
|
27
|
+
begin
|
28
|
+
self.depart
|
29
|
+
rescue => e
|
30
|
+
BayLog.error_e(e)
|
31
|
+
ensure
|
32
|
+
BayLog.trace("%s End taxi on: %s", self, Thread.current.name)
|
33
|
+
end
|
34
|
+
|
33
35
|
end
|
34
36
|
|
37
|
+
def depart
|
38
|
+
NotImplementedError.new
|
39
|
+
end
|
35
40
|
end
|
36
41
|
end
|
37
42
|
end
|
@@ -1,119 +1,34 @@
|
|
1
1
|
require 'baykit/bayserver/bayserver'
|
2
|
-
require 'baykit/bayserver/
|
3
|
-
require 'baykit/bayserver/agent/lifecycle_listener'
|
4
|
-
require 'baykit/bayserver/util/executor_service'
|
5
|
-
require 'baykit/bayserver/sink'
|
2
|
+
require 'baykit/bayserver/common/vehicle_runner'
|
6
3
|
|
7
4
|
module Baykit
|
8
5
|
module BayServer
|
9
6
|
module Taxi
|
10
7
|
class TaxiRunner
|
11
8
|
include Baykit::BayServer
|
12
|
-
include Baykit::BayServer::
|
13
|
-
include Baykit::BayServer::Util
|
9
|
+
include Baykit::BayServer::Common
|
14
10
|
|
15
|
-
class AgentListener
|
16
|
-
include Baykit::BayServer::Agent::LifecycleListener # implements
|
17
11
|
|
18
|
-
def add(agt)
|
19
|
-
TaxiRunner.runners[agt.agent_id - 1] = TaxiRunner.new(agt)
|
20
|
-
end
|
21
|
-
|
22
|
-
def remove(agt)
|
23
|
-
BayLog.debug("%s Remove tax runner", agt)
|
24
|
-
TaxiRunner.runners[agt.agent_id - 1].terminate()
|
25
|
-
TaxiRunner.runners[agt.agent_id - 1] = nil
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
|
30
|
-
# define class instance accessor
|
31
12
|
class << self
|
32
|
-
attr :
|
33
|
-
attr :runners
|
34
|
-
end
|
35
|
-
|
36
|
-
attr :agent
|
37
|
-
attr :exe
|
38
|
-
attr :running_taxis
|
39
|
-
attr :lock
|
40
|
-
|
41
|
-
def initialize(agt)
|
42
|
-
@agent = agt
|
43
|
-
@exe = ExecutorService.new("TaxiRunner", TaxiRunner.max_taxis)
|
44
|
-
@agent.add_timer_handler(self)
|
45
|
-
@running_taxis = []
|
46
|
-
@lock = Monitor.new()
|
47
|
-
end
|
48
|
-
|
49
|
-
######################################################
|
50
|
-
# Implements TimerHandler
|
51
|
-
######################################################
|
52
|
-
|
53
|
-
def on_timer()
|
54
|
-
@lock.synchronize do
|
55
|
-
@running_taxis.each do |txi|
|
56
|
-
txi.on_timer()
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
######################################################
|
62
|
-
# Custom methods
|
63
|
-
######################################################
|
64
|
-
|
65
|
-
def terminate()
|
66
|
-
@agent.remove_timer_handler(self)
|
67
|
-
@exe.shutdown
|
13
|
+
attr :runner
|
68
14
|
end
|
69
15
|
|
70
|
-
|
71
|
-
@exe.submit() do
|
72
|
-
if @agent.aborted
|
73
|
-
BayLog.error("Agent is aborted")
|
74
|
-
return
|
75
|
-
end
|
16
|
+
@runner = VehicleRunner.new
|
76
17
|
|
77
|
-
@lock.synchronize do
|
78
|
-
@running_taxis << txi
|
79
|
-
end
|
80
|
-
|
81
|
-
begin
|
82
|
-
txi.run()
|
83
|
-
rescue => e
|
84
|
-
BayLog.fatal_e(e)
|
85
|
-
@agent.req_shutdown
|
86
|
-
ensure
|
87
|
-
@lock.synchronize do
|
88
|
-
@running_taxis.delete(txi)
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
18
|
|
94
19
|
######################################################
|
95
20
|
# Class methods
|
96
21
|
######################################################
|
97
22
|
|
98
|
-
def
|
99
|
-
|
100
|
-
raise Sink.new()
|
101
|
-
end
|
102
|
-
@max_taxis = max_taxis
|
103
|
-
@runners = []
|
104
|
-
GrandAgent.add_lifecycle_listener(AgentListener.new())
|
23
|
+
def self.init(max_taxis)
|
24
|
+
@runner.init(max_taxis)
|
105
25
|
end
|
106
26
|
|
107
|
-
def
|
27
|
+
def self.post(agt_id, txi)
|
108
28
|
BayLog.debug("agt#%d post taxi: thread=%s taxi=%s", agt_id, Thread.current.name, txi);
|
109
|
-
|
110
|
-
@runners[agt_id - 1].submit(txi)
|
111
|
-
return true
|
112
|
-
rescue => e
|
113
|
-
BayLog.error_e(e)
|
114
|
-
return false
|
115
|
-
end
|
29
|
+
@runner.post(agt_id, txi)
|
116
30
|
end
|
31
|
+
|
117
32
|
end
|
118
33
|
end
|
119
34
|
end
|
@@ -59,7 +59,7 @@ module Baykit
|
|
59
59
|
######################################################
|
60
60
|
|
61
61
|
def depart()
|
62
|
-
@start_time = Time.now.
|
62
|
+
@start_time = Time.now.tv_sec
|
63
63
|
begin
|
64
64
|
@buf.clear()
|
65
65
|
@infile.read(@buf_size, @buf)
|
@@ -86,7 +86,7 @@ module Baykit
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def on_timer()
|
89
|
-
duration_sec = Time.now.
|
89
|
+
duration_sec = Time.now.tv_sec - @start_time
|
90
90
|
if (@data_listener.check_timeout(duration_sec))
|
91
91
|
close()
|
92
92
|
end
|
@@ -2,27 +2,30 @@ module Baykit
|
|
2
2
|
module BayServer
|
3
3
|
module Tours
|
4
4
|
|
5
|
-
module ReqContentHandler
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
5
|
+
module ReqContentHandler # interface
|
6
|
+
def on_read_req_content(tur, buf, start, len)
|
7
|
+
raise NotImplementedError.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def on_end_req_content(tur)
|
11
|
+
raise NotImplementedError.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def on_abort_req(tur)
|
15
|
+
raise NotImplementedError.new
|
16
|
+
end
|
17
|
+
|
15
18
|
end
|
16
19
|
|
17
20
|
class DevNullReqContentHandler
|
18
21
|
include ReqContentHandler # implements
|
19
|
-
def
|
22
|
+
def on_read_req_content(tur, buf, start, len)
|
20
23
|
end
|
21
24
|
|
22
|
-
def
|
25
|
+
def on_end_req_content(tur)
|
23
26
|
end
|
24
27
|
|
25
|
-
def
|
28
|
+
def on_abort_req(tur)
|
26
29
|
return false
|
27
30
|
end
|
28
31
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'baykit/bayserver/bay_log'
|
2
2
|
require 'baykit/bayserver/http_exception'
|
3
3
|
|
4
|
-
require 'baykit/bayserver/
|
4
|
+
require 'baykit/bayserver/ships/ship'
|
5
5
|
require 'baykit/bayserver/util/counter'
|
6
6
|
|
7
7
|
|
@@ -10,7 +10,7 @@ module Baykit
|
|
10
10
|
module Tours
|
11
11
|
class Tour
|
12
12
|
include Baykit::BayServer
|
13
|
-
include Baykit::BayServer::
|
13
|
+
include Baykit::BayServer::Ships
|
14
14
|
include Baykit::BayServer::Util
|
15
15
|
include Baykit::BayServer::Util::Reusable # implements
|
16
16
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'baykit/bayserver/bay_log'
|
2
|
+
require 'baykit/bayserver/http_exception'
|
3
|
+
|
4
|
+
require 'baykit/bayserver/ships/ship'
|
5
|
+
require 'baykit/bayserver/util/counter'
|
6
|
+
|
7
|
+
|
8
|
+
module Baykit
|
9
|
+
module BayServer
|
10
|
+
module Tours
|
11
|
+
module TourHandler
|
12
|
+
|
13
|
+
# Send HTTP headers to client
|
14
|
+
def send_res_headers(tur)
|
15
|
+
raise NotImplementedError.new
|
16
|
+
end
|
17
|
+
|
18
|
+
# Send Contents to client
|
19
|
+
def send_res_content(tur, bytes, ofs, len, &lis)
|
20
|
+
raise NotImplementedError.new
|
21
|
+
end
|
22
|
+
|
23
|
+
# Send end of contents to client.
|
24
|
+
def send_end_tour(tur, keep_alive, &lis)
|
25
|
+
raise NotImplementedError.new
|
26
|
+
end
|
27
|
+
|
28
|
+
# Send protocol error to client
|
29
|
+
def on_protocol_error(e)
|
30
|
+
raise NotImplementedError.new
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -51,7 +51,6 @@ module Baykit
|
|
51
51
|
attr :bytes_consumed
|
52
52
|
attr :bytes_limit
|
53
53
|
|
54
|
-
attr :consume_listener
|
55
54
|
attr :available
|
56
55
|
attr :ended
|
57
56
|
|
@@ -98,7 +97,6 @@ module Baykit
|
|
98
97
|
@charset = nil
|
99
98
|
@available = false
|
100
99
|
@content_handler = nil
|
101
|
-
@consume_listener = nil
|
102
100
|
@ended = false
|
103
101
|
|
104
102
|
end
|
@@ -107,22 +105,21 @@ module Baykit
|
|
107
105
|
# other methods
|
108
106
|
######################################################
|
109
107
|
|
110
|
-
def remote_host
|
108
|
+
def remote_host
|
111
109
|
return @remote_host_func.call()
|
112
110
|
end
|
113
111
|
|
114
|
-
def
|
112
|
+
def set_limit(limit)
|
115
113
|
if limit < 0
|
116
114
|
raise Sink.new("invalid limit")
|
117
115
|
end
|
118
116
|
@bytes_limit = limit
|
119
|
-
@consume_listener = listener
|
120
117
|
@bytes_posted = 0
|
121
118
|
@bytes_consumed = 0
|
122
119
|
@available = true
|
123
120
|
end
|
124
121
|
|
125
|
-
def
|
122
|
+
def post_req_content(check_id, data, start, len, &callback)
|
126
123
|
@tour.check_tour_id(check_id)
|
127
124
|
|
128
125
|
data_passed = false
|
@@ -132,9 +129,6 @@ module Baykit
|
|
132
129
|
elsif @content_handler == nil
|
133
130
|
BayLog.warn("%s content read, but no content handler", tour)
|
134
131
|
|
135
|
-
elsif @consume_listener == nil
|
136
|
-
raise Sink.new("Request consume listener is null")
|
137
|
-
|
138
132
|
elsif @bytes_posted + len > @bytes_limit
|
139
133
|
raise ProtocolException.new("Read data exceed content-length: %d/%d", @bytes_posted + len, @bytes_limit)
|
140
134
|
|
@@ -143,7 +137,7 @@ module Baykit
|
|
143
137
|
BayLog.debug("%s tour has error.", @tour)
|
144
138
|
|
145
139
|
else
|
146
|
-
@content_handler.
|
140
|
+
@content_handler.on_read_req_content(@tour, data, start, len, &callback)
|
147
141
|
data_passed = true
|
148
142
|
end
|
149
143
|
|
@@ -167,7 +161,7 @@ module Baykit
|
|
167
161
|
return @available
|
168
162
|
end
|
169
163
|
|
170
|
-
def
|
164
|
+
def end_req_content(check_id)
|
171
165
|
@tour.check_tour_id(check_id)
|
172
166
|
if @ended
|
173
167
|
raise Sink.new("#{@tour} Request content is already ended")
|
@@ -178,17 +172,13 @@ module Baykit
|
|
178
172
|
end
|
179
173
|
|
180
174
|
if @content_handler != nil
|
181
|
-
@content_handler.
|
175
|
+
@content_handler.on_end_req_content(@tour)
|
182
176
|
end
|
183
177
|
@ended = true
|
184
178
|
end
|
185
179
|
|
186
|
-
def consumed(chk_id, length)
|
180
|
+
def consumed(chk_id, length, &callback)
|
187
181
|
@tour.check_tour_id(chk_id)
|
188
|
-
BayLog.debug("%s content_consumed: len=%d posted=%d", @tour, length, @bytes_posted)
|
189
|
-
if @consume_listener == nil
|
190
|
-
raise Sink.new("Request consume listener is null")
|
191
|
-
end
|
192
182
|
|
193
183
|
@bytes_consumed += length
|
194
184
|
BayLog.debug("%s reqConsumed: len=%d posted=%d limit=%d consumed=%d",
|
@@ -204,24 +194,24 @@ module Baykit
|
|
204
194
|
BayLog.debug("%s request available (^o^): posted=%d consumed=%d", self, @bytes_posted, @bytes_consumed);
|
205
195
|
resume = true
|
206
196
|
end
|
207
|
-
|
197
|
+
callback.call(length, resume)
|
208
198
|
end
|
209
199
|
|
210
|
-
def abort
|
200
|
+
def abort
|
211
201
|
BayLog.debug("%s abort", @tour)
|
212
202
|
if @tour.preparing?
|
213
|
-
|
203
|
+
#@tour.change_state(Tour::TOUR_ID_NOCHECK, Tour::TourState::ABORTED)
|
214
204
|
return true
|
215
205
|
|
216
206
|
elsif @tour.running?
|
217
207
|
aborted = true
|
218
208
|
if @content_handler != nil
|
219
|
-
aborted = @content_handler.
|
209
|
+
aborted = @content_handler.on_abort_req(@tour)
|
220
210
|
end
|
221
211
|
|
222
|
-
if aborted
|
223
|
-
|
224
|
-
end
|
212
|
+
#if aborted
|
213
|
+
# @tour.change_state(Tour::TOUR_ID_NOCHECK, Tour::TourState::ABORTED)
|
214
|
+
#end
|
225
215
|
|
226
216
|
return aborted
|
227
217
|
else
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'baykit/bayserver/http_exception'
|
2
2
|
require 'baykit/bayserver/protocol/protocol_exception'
|
3
|
-
require 'baykit/bayserver/agent/
|
3
|
+
require 'baykit/bayserver/agent/multiplexer/plain_transporter'
|
4
4
|
require 'baykit/bayserver/taxi/taxi_runner'
|
5
5
|
require 'baykit/bayserver/docker/harbor'
|
6
6
|
require 'baykit/bayserver/tours/send_file_yacht'
|
@@ -101,6 +101,7 @@ module Baykit
|
|
101
101
|
end
|
102
102
|
|
103
103
|
@bytes_limit = @headers.content_length()
|
104
|
+
BayLog.debug("%s send_headers content length: %s", self, @bytes_limit)
|
104
105
|
|
105
106
|
# Compress check
|
106
107
|
if BayServer.harbor.gzip_comp &&
|
@@ -161,7 +162,7 @@ module Baykit
|
|
161
162
|
@available = true
|
162
163
|
end
|
163
164
|
|
164
|
-
def
|
165
|
+
def send_res_content(chk_tour_id, buf, ofs, len)
|
165
166
|
@tour.check_tour_id(chk_tour_id)
|
166
167
|
BayLog.debug("%s sendContent len=%d", @tour, len)
|
167
168
|
|
@@ -223,7 +224,7 @@ module Baykit
|
|
223
224
|
return @available
|
224
225
|
end
|
225
226
|
|
226
|
-
def
|
227
|
+
def end_res_content(chk_tour_id)
|
227
228
|
@tour.check_tour_id(chk_tour_id)
|
228
229
|
|
229
230
|
BayLog.debug("%s end ResContent", self)
|
@@ -345,92 +346,7 @@ module Baykit
|
|
345
346
|
end
|
346
347
|
end
|
347
348
|
|
348
|
-
|
349
|
-
end
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
def send_file(chk_tour_id, file, charset, async)
|
354
|
-
@tour.check_tour_id(chk_tour_id)
|
355
|
-
|
356
|
-
if @tour.zombie?
|
357
|
-
return
|
358
|
-
end
|
359
|
-
|
360
|
-
if File.directory?(file)
|
361
|
-
raise HttpException.new HttpStatus::FORBIDDEN, file
|
362
|
-
elsif !File.exist?(file)
|
363
|
-
raise HttpException.new HttpStatus::NOT_FOUND, file
|
364
|
-
end
|
365
|
-
|
366
|
-
mime_type = nil
|
367
|
-
|
368
|
-
rname = File.basename(file)
|
369
|
-
pos = rname.rindex('.')
|
370
|
-
if pos
|
371
|
-
ext = rname[pos + 1 .. -1].downcase
|
372
|
-
mime_type = Mimes.type(ext)
|
373
|
-
end
|
374
|
-
|
375
|
-
if !mime_type
|
376
|
-
mime_type = "application/octet-stream"
|
377
|
-
end
|
378
|
-
|
379
|
-
if mime_type.start_with?("text/") && charset != nil
|
380
|
-
mime_type = mime_type + "; charset=" + charset
|
381
|
-
end
|
382
|
-
|
383
|
-
file_len = ::File.size(file)
|
384
|
-
BayLog.debug("%s send_file %s async=%s len=%d", @tour, file, async, file_len)
|
385
|
-
|
386
|
-
@headers.set_content_type(mime_type)
|
387
|
-
@headers.set_content_length(file_len)
|
388
|
-
|
389
|
-
begin
|
390
|
-
send_headers(Tour::TOUR_ID_NOCHECK)
|
391
|
-
|
392
|
-
if async
|
393
|
-
bufsize = @tour.ship.protocol_handler.max_res_packet_data_size()
|
394
|
-
|
395
|
-
case(BayServer.harbor.file_send_method())
|
396
|
-
|
397
|
-
when Harbor::FILE_SEND_METHOD_SELECT
|
398
|
-
tp = PlainTransporter.new(false, bufsize)
|
399
|
-
@yacht.init(@tour, file, tp)
|
400
|
-
tp.init(@tour.ship.agent.non_blocking_handler, File.open(file, "rb"), @yacht)
|
401
|
-
@tour.ship.resume(@tour.ship_id)
|
402
|
-
tp.open_valve()
|
403
|
-
|
404
|
-
when Harbor::FILE_SEND_METHOD_SPIN
|
405
|
-
timeout = 10
|
406
|
-
tp = SpinReadTransporter.new(bufsize)
|
407
|
-
@yacht.init(@tour, file, tp)
|
408
|
-
tp.init(@tour.ship.agent.spin_handler, @yacht, File.open(file, "rb"), File.size(file), timeout, nil)
|
409
|
-
@tour.ship.resume(@tour.ship_id)
|
410
|
-
tp.open_valve()
|
411
|
-
|
412
|
-
when Harbor::FILE_SEND_METHOD_TAXI
|
413
|
-
txi = ReadFileTaxi.new(@tour.ship.agent.agent_id, bufsize)
|
414
|
-
@yacht.init(@tour, file, txi)
|
415
|
-
txi.init(File.open(file, "rb"), @yacht)
|
416
|
-
if !TaxiRunner.post(@tour.ship.agent.agent_id, txi)
|
417
|
-
raise HttpException.new(HttpStatus::SERVICE_UNAVAILABLE, "Taxi is busy!");
|
418
|
-
end
|
419
|
-
|
420
|
-
else
|
421
|
-
raise Sink.new();
|
422
|
-
end
|
423
|
-
|
424
|
-
else
|
425
|
-
SendFileTrain.new(@tour, file).run()
|
426
|
-
end
|
427
|
-
rescue HttpException => e
|
428
|
-
raise e
|
429
|
-
rescue => e
|
430
|
-
BayLog.error_e(e)
|
431
|
-
raise HttpException.new(HttpStatus::INTERNAL_SERVER_ERROR, file)
|
432
|
-
end
|
433
|
-
|
349
|
+
end_res_content(chk_tour_id)
|
434
350
|
end
|
435
351
|
|
436
352
|
def get_compressor()
|
@@ -18,12 +18,12 @@ module Baykit
|
|
18
18
|
class AgentListener
|
19
19
|
include Baykit::BayServer::Agent::LifecycleListener # implements
|
20
20
|
|
21
|
-
def add(
|
22
|
-
TourStore.stores[
|
21
|
+
def add(agt_id)
|
22
|
+
TourStore.stores[agt_id] = TourStore.new();
|
23
23
|
end
|
24
24
|
|
25
|
-
def remove(
|
26
|
-
TourStore.stores.delete(
|
25
|
+
def remove(agt_id)
|
26
|
+
TourStore.stores.delete(agt_id);
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -46,7 +46,7 @@ module Baykit
|
|
46
46
|
def initialize()
|
47
47
|
@free_tours = []
|
48
48
|
@active_tour_map = {}
|
49
|
-
@lock = Monitor.new
|
49
|
+
@lock = ::Monitor.new
|
50
50
|
end
|
51
51
|
|
52
52
|
def get(key)
|
@@ -5,26 +5,30 @@ module Baykit
|
|
5
5
|
module BayServer
|
6
6
|
module Train
|
7
7
|
class TrainRunner
|
8
|
-
include Baykit::BayServer
|
8
|
+
include Baykit::BayServer
|
9
|
+
include Baykit::BayServer::Common
|
10
|
+
|
9
11
|
|
10
|
-
# define class instance accessor
|
11
12
|
class << self
|
12
|
-
attr :
|
13
|
+
attr :runner
|
13
14
|
end
|
14
15
|
|
15
|
-
|
16
|
-
|
16
|
+
@runner = VehicleRunner.new
|
17
|
+
|
18
|
+
|
19
|
+
######################################################
|
20
|
+
# Class methods
|
21
|
+
######################################################
|
22
|
+
|
23
|
+
def self.init(max_trains)
|
24
|
+
@runner.init(max_trains)
|
17
25
|
end
|
18
26
|
|
19
|
-
def self.post(train)
|
20
|
-
|
21
|
-
|
22
|
-
return true
|
23
|
-
rescue => e
|
24
|
-
BayLog.error_e(e)
|
25
|
-
return false
|
26
|
-
end
|
27
|
+
def self.post(agt_id, train)
|
28
|
+
BayLog.debug("agt#%d post train: thread=%s train=%s", agt_id, Thread.current.name, train);
|
29
|
+
@runner.post(agt_id, train)
|
27
30
|
end
|
31
|
+
|
28
32
|
end
|
29
33
|
end
|
30
34
|
end
|
@@ -60,13 +60,17 @@ module Baykit
|
|
60
60
|
count.times do |i|
|
61
61
|
started = false
|
62
62
|
Thread.new do
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
63
|
+
begin
|
64
|
+
started = true
|
65
|
+
id = i + 1
|
66
|
+
th_name = "Executor[#{name}]##{id}"
|
67
|
+
Thread.current.name = th_name
|
68
|
+
e = Executor.new @que, id, th_name
|
69
|
+
e.run
|
70
|
+
@executors << e
|
71
|
+
rescue => e
|
72
|
+
BayLog.error_e(e)
|
73
|
+
end
|
70
74
|
end
|
71
75
|
while !started
|
72
76
|
sleep(0.01)
|