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
|
@@ -14,14 +14,12 @@ module Baykit
|
|
|
14
14
|
class << self
|
|
15
15
|
attr :num_agents
|
|
16
16
|
attr :cur_id
|
|
17
|
-
attr :anchored_port_map
|
|
18
17
|
attr :monitors
|
|
19
18
|
attr :finale
|
|
20
19
|
end
|
|
21
20
|
|
|
22
21
|
@num_agents = 0
|
|
23
22
|
@cur_id = 0
|
|
24
|
-
@anchored_port_map = []
|
|
25
23
|
@monitors = {}
|
|
26
24
|
@finale = false
|
|
27
25
|
|
|
@@ -67,23 +65,12 @@ module Baykit
|
|
|
67
65
|
|
|
68
66
|
end
|
|
69
67
|
rescue EOFError, IOError => e
|
|
70
|
-
BayLog.fatal("Agent terminated")
|
|
68
|
+
BayLog.fatal("%s Agent terminated", self)
|
|
71
69
|
rescue Exception => e
|
|
72
70
|
BayLog.fatal_e(e)
|
|
73
71
|
end
|
|
74
|
-
end
|
|
75
72
|
|
|
76
|
-
|
|
77
|
-
begin
|
|
78
|
-
res = IOUtil.read_int32(@communication_channel)
|
|
79
|
-
if res == nil || res == GrandAgent::CMD_CLOSE
|
|
80
|
-
close()
|
|
81
|
-
else
|
|
82
|
-
BayLog.debug("%s read OK: %d", self, res)
|
|
83
|
-
end
|
|
84
|
-
rescue IO::WaitReadable
|
|
85
|
-
#BayLog.debug("%s no data", self)
|
|
86
|
-
end
|
|
73
|
+
GrandAgentMonitor.agent_aborted @agent_id, @child_pid, @anchorable
|
|
87
74
|
end
|
|
88
75
|
|
|
89
76
|
def shutdown()
|
|
@@ -124,33 +111,6 @@ module Baykit
|
|
|
124
111
|
|
|
125
112
|
end
|
|
126
113
|
|
|
127
|
-
def agent_aborted()
|
|
128
|
-
BayLog.info(BayMessage.get(:MSG_GRAND_AGENT_SHUTDOWN, @agent_id))
|
|
129
|
-
|
|
130
|
-
if @child_pid != nil
|
|
131
|
-
begin
|
|
132
|
-
Process.kill("TERM", @child_pid)
|
|
133
|
-
rescue => e
|
|
134
|
-
BayLog.debug_e(e, "Error on killing process")
|
|
135
|
-
end
|
|
136
|
-
Process.wait(@child_pid)
|
|
137
|
-
end
|
|
138
|
-
GrandAgentMonitor.monitors.delete(@agent_id)
|
|
139
|
-
|
|
140
|
-
if not GrandAgentMonitor.finale
|
|
141
|
-
if GrandAgentMonitor.monitors.length < GrandAgentMonitor.num_agents
|
|
142
|
-
begin
|
|
143
|
-
if !BayServer.harbor.multi_core
|
|
144
|
-
GrandAgent.add(-1, @anchorable)
|
|
145
|
-
end
|
|
146
|
-
GrandAgentMonitor.add(@anchorable)
|
|
147
|
-
rescue => e
|
|
148
|
-
BayLog.error_e(e)
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
end
|
|
152
|
-
end
|
|
153
|
-
|
|
154
114
|
def start
|
|
155
115
|
@child_thread = Thread.new do
|
|
156
116
|
run()
|
|
@@ -161,9 +121,8 @@ module Baykit
|
|
|
161
121
|
# Class methods
|
|
162
122
|
########################################
|
|
163
123
|
|
|
164
|
-
def self.init(num_agents
|
|
124
|
+
def self.init(num_agents)
|
|
165
125
|
@num_agents = num_agents
|
|
166
|
-
@anchored_port_map = anchored_port_map
|
|
167
126
|
@num_agents.times do
|
|
168
127
|
add(true)
|
|
169
128
|
end
|
|
@@ -185,12 +144,12 @@ module Baykit
|
|
|
185
144
|
ports = ""
|
|
186
145
|
|
|
187
146
|
no_close_io = {} # Port list not to close on spawned
|
|
188
|
-
|
|
189
|
-
no_close_io[
|
|
147
|
+
BayServer.anchorable_port_map.each_key do |rd|
|
|
148
|
+
no_close_io[rd.key()] = rd.key()
|
|
190
149
|
if ports != ""
|
|
191
150
|
ports +=","
|
|
192
151
|
end
|
|
193
|
-
ports +=
|
|
152
|
+
ports += rd.key().fileno.to_s
|
|
194
153
|
end
|
|
195
154
|
new_argv << "-ports=" + ports
|
|
196
155
|
|
|
@@ -241,11 +200,52 @@ module Baykit
|
|
|
241
200
|
|
|
242
201
|
end
|
|
243
202
|
|
|
203
|
+
def self.agent_aborted(agt_id, pid, anchorable)
|
|
204
|
+
BayLog.info(BayMessage.get(:MSG_GRAND_AGENT_SHUTDOWN, agt_id))
|
|
205
|
+
|
|
206
|
+
if pid != nil
|
|
207
|
+
begin
|
|
208
|
+
Process.kill("TERM", pid)
|
|
209
|
+
rescue => e
|
|
210
|
+
BayLog.debug_e(e, "Error on killing process")
|
|
211
|
+
end
|
|
212
|
+
Process.wait(pid)
|
|
213
|
+
end
|
|
214
|
+
@monitors.delete(agt_id)
|
|
215
|
+
|
|
216
|
+
if not @finale
|
|
217
|
+
if @monitors.length < @num_agents
|
|
218
|
+
begin
|
|
219
|
+
if !BayServer.harbor.multi_core
|
|
220
|
+
GrandAgent.add(-1, @anchorable)
|
|
221
|
+
end
|
|
222
|
+
self.add(@anchorable)
|
|
223
|
+
rescue => e
|
|
224
|
+
BayLog.error_e(e)
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
244
230
|
def self.join
|
|
245
231
|
while !@monitors.empty?
|
|
232
|
+
err = nil
|
|
246
233
|
@monitors.values.each do |mon|
|
|
247
|
-
|
|
248
|
-
|
|
234
|
+
begin
|
|
235
|
+
mon.child_thread.join
|
|
236
|
+
sleep 5
|
|
237
|
+
rescue Interrupt => e
|
|
238
|
+
err = e
|
|
239
|
+
BayLog.error("%s Interrupted! Kill child: %d", mon, mon.child_pid)
|
|
240
|
+
begin
|
|
241
|
+
Process.kill("INT", mon.child_pid)
|
|
242
|
+
rescue SystemCallError => e
|
|
243
|
+
BayLog.error("%s Failed to kill child: %s", mon, e)
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
if err
|
|
248
|
+
raise err
|
|
249
249
|
end
|
|
250
250
|
end
|
|
251
251
|
end
|
|
@@ -15,6 +15,7 @@ module Baykit
|
|
|
15
15
|
|
|
16
16
|
include Baykit::BayServer::Rudders
|
|
17
17
|
include Baykit::BayServer::Util
|
|
18
|
+
include Baykit::BayServer::Common
|
|
18
19
|
|
|
19
20
|
def initialize(agt, anchorable)
|
|
20
21
|
super
|
|
@@ -35,6 +36,7 @@ module Baykit
|
|
|
35
36
|
end
|
|
36
37
|
|
|
37
38
|
st = get_rudder_state(rd)
|
|
39
|
+
id = st.id
|
|
38
40
|
|
|
39
41
|
Thread.new do
|
|
40
42
|
begin
|
|
@@ -45,7 +47,7 @@ module Baykit
|
|
|
45
47
|
begin
|
|
46
48
|
client_skt, adr = rd.io.accept
|
|
47
49
|
rescue Exception => e
|
|
48
|
-
@agent.
|
|
50
|
+
@agent.send_error_letter(id, rd, self, e, true)
|
|
49
51
|
next
|
|
50
52
|
end
|
|
51
53
|
|
|
@@ -54,7 +56,7 @@ module Baykit
|
|
|
54
56
|
BayLog.error("%s Agent is not alive (close)", @agent);
|
|
55
57
|
client_skt.close
|
|
56
58
|
else
|
|
57
|
-
@agent.send_accepted_letter(
|
|
59
|
+
@agent.send_accepted_letter(id, rd, self, IORudder.new(client_skt), true)
|
|
58
60
|
end
|
|
59
61
|
|
|
60
62
|
rescue Exception => e
|
|
@@ -67,20 +69,28 @@ module Baykit
|
|
|
67
69
|
|
|
68
70
|
|
|
69
71
|
def req_connect(rd, adr)
|
|
70
|
-
|
|
71
|
-
BayLog.debug("%s reqConnect adr=%s rd=%s chState=%s", @agent, adr.canonname, rd, st)
|
|
72
|
+
BayLog.debug("%s reqConnect adr=%s rd=%s", @agent, adr.canonname, rd)
|
|
72
73
|
|
|
73
74
|
Thread.new do
|
|
75
|
+
st = get_rudder_state(rd)
|
|
76
|
+
if st == nil
|
|
77
|
+
# rudder is already closed
|
|
78
|
+
BayLog.debug("%s Rudder is already closed: rd=%s", @agent, rd)
|
|
79
|
+
return
|
|
80
|
+
end
|
|
81
|
+
|
|
74
82
|
begin
|
|
75
83
|
rd.io.connect(adr)
|
|
76
84
|
BayLog.debug("%s Connected rd=%s", @agent, rd)
|
|
77
|
-
@agent.send_connected_letter(st,
|
|
85
|
+
@agent.send_connected_letter(st.id, rd, self, true)
|
|
78
86
|
rescue Exception => e
|
|
79
|
-
@agent.
|
|
87
|
+
@agent.send_error_letter(st.id, rd, self, e, true)
|
|
80
88
|
return
|
|
81
89
|
end
|
|
82
90
|
end
|
|
83
91
|
|
|
92
|
+
st = get_rudder_state(rd)
|
|
93
|
+
st.access
|
|
84
94
|
st.connecting = true
|
|
85
95
|
end
|
|
86
96
|
|
|
@@ -106,17 +116,19 @@ module Baykit
|
|
|
106
116
|
st.access
|
|
107
117
|
end
|
|
108
118
|
|
|
109
|
-
def req_write(rd, buf, adr, tag, lis)
|
|
119
|
+
def req_write(rd, buf, adr, tag, &lis)
|
|
110
120
|
st = get_rudder_state(rd)
|
|
111
121
|
BayLog.debug("%s reqWrite st=%s", @agent, st)
|
|
112
122
|
|
|
113
|
-
if st == nil
|
|
114
|
-
|
|
115
|
-
|
|
123
|
+
if st == nil
|
|
124
|
+
raise IOError.new("Invalid rudder")
|
|
125
|
+
#BayLog.warn("%s Channel is closed(callback immediately): %s", @agent, rd)
|
|
126
|
+
#lis.call()
|
|
127
|
+
#return
|
|
116
128
|
end
|
|
117
129
|
|
|
118
|
-
unt = WriteUnit.new(buf, adr, tag, lis)
|
|
119
|
-
st.
|
|
130
|
+
unt = WriteUnit.new(buf, adr, tag, &lis)
|
|
131
|
+
st.write_queue_lock.synchronize do
|
|
120
132
|
st.write_queue << unt
|
|
121
133
|
end
|
|
122
134
|
|
|
@@ -144,7 +156,9 @@ module Baykit
|
|
|
144
156
|
return
|
|
145
157
|
end
|
|
146
158
|
|
|
147
|
-
|
|
159
|
+
id = st.id
|
|
160
|
+
|
|
161
|
+
Thread.new do
|
|
148
162
|
begin
|
|
149
163
|
st = get_rudder_state(rd)
|
|
150
164
|
if st == nil
|
|
@@ -152,7 +166,8 @@ module Baykit
|
|
|
152
166
|
next
|
|
153
167
|
end
|
|
154
168
|
|
|
155
|
-
close_rudder(
|
|
169
|
+
close_rudder(rd)
|
|
170
|
+
@agent.send_closed_letter(id, rd, self, true)
|
|
156
171
|
rescue Exception => e
|
|
157
172
|
BayLog.fatal_e(e)
|
|
158
173
|
@agent.shutdown
|
|
@@ -175,12 +190,9 @@ module Baykit
|
|
|
175
190
|
end
|
|
176
191
|
|
|
177
192
|
def next_read(st)
|
|
193
|
+
id = st.id
|
|
194
|
+
|
|
178
195
|
Thread.new do
|
|
179
|
-
if st.closed
|
|
180
|
-
#channel is already closed
|
|
181
|
-
BayLog.debug("%s Rudder is already closed: rd=%s", @agent, st.rudder);
|
|
182
|
-
next
|
|
183
|
-
end
|
|
184
196
|
|
|
185
197
|
begin
|
|
186
198
|
if st.handshaking
|
|
@@ -201,45 +213,48 @@ module Baykit
|
|
|
201
213
|
end
|
|
202
214
|
|
|
203
215
|
BayLog.debug("%s Try to Read (rd=%s)", @agent, st.rudder)
|
|
204
|
-
|
|
205
|
-
n = st.rudder.read(st.read_buf, st.buf_size)
|
|
206
|
-
rescue EOFError => e
|
|
207
|
-
n = 0
|
|
208
|
-
st.read_buf.clear
|
|
209
|
-
end
|
|
216
|
+
n = st.rudder.read(st.read_buf, st.buf_size)
|
|
210
217
|
|
|
211
|
-
|
|
218
|
+
if get_rudder_state(st.rudder) == nil
|
|
219
|
+
#channel is already closed
|
|
220
|
+
BayLog.debug("%s Rudder is already closed: rd=%s", self, st.rudder);
|
|
221
|
+
next
|
|
222
|
+
else
|
|
223
|
+
@agent.send_read_letter(id, st.rudder, self, n, nil, true)
|
|
224
|
+
end
|
|
212
225
|
|
|
213
226
|
rescue Exception => e
|
|
214
|
-
@agent.
|
|
227
|
+
@agent.send_error_letter(id, st.rudder, self, e, true)
|
|
215
228
|
end
|
|
216
229
|
end
|
|
217
230
|
end
|
|
218
231
|
|
|
219
232
|
def next_write(st)
|
|
233
|
+
id = st.id
|
|
234
|
+
|
|
220
235
|
Thread.new do
|
|
221
236
|
BayLog.debug("%s next write st=%s", @agent, st)
|
|
222
237
|
|
|
223
|
-
if st == nil
|
|
238
|
+
if st == nil
|
|
224
239
|
BayLog.warn("%s Channel is closed: %s", @agent, st.rudder)
|
|
225
240
|
next
|
|
226
241
|
end
|
|
227
242
|
|
|
228
243
|
u = st.write_queue[0]
|
|
229
|
-
BayLog.debug("%s Try to write: pkt=%s buflen=%d
|
|
244
|
+
BayLog.debug("%s Try to write: pkt=%s buflen=%d", self, u.tag, u.buf.length)
|
|
230
245
|
|
|
231
246
|
n = 0
|
|
232
247
|
begin
|
|
233
|
-
if
|
|
248
|
+
if u.buf.length > 0
|
|
234
249
|
n = st.rudder.write(u.buf)
|
|
235
250
|
u.buf.slice!(0, n)
|
|
236
251
|
end
|
|
237
252
|
rescue Exception => e
|
|
238
|
-
@agent.
|
|
253
|
+
@agent.send_error_letter(id, st.rudder, self, e, true)
|
|
239
254
|
next
|
|
240
255
|
end
|
|
241
256
|
|
|
242
|
-
@agent.send_wrote_letter(st,
|
|
257
|
+
@agent.send_wrote_letter(id, st.rudder, self, n, true)
|
|
243
258
|
end
|
|
244
259
|
end
|
|
245
260
|
|
|
@@ -36,6 +36,13 @@ module Baykit
|
|
|
36
36
|
st.access()
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
+
def remove_rudder_state(rd)
|
|
40
|
+
@rudders_lock.synchronize do
|
|
41
|
+
@rudders.delete(rd.key())
|
|
42
|
+
end
|
|
43
|
+
@channel_count -= 1
|
|
44
|
+
end
|
|
45
|
+
|
|
39
46
|
def get_rudder_state(rd)
|
|
40
47
|
return find_rudder_state_by_key(rd.key)
|
|
41
48
|
end
|
|
@@ -56,31 +63,15 @@ module Baykit
|
|
|
56
63
|
return true
|
|
57
64
|
end
|
|
58
65
|
|
|
59
|
-
def close_rudder(
|
|
60
|
-
BayLog.debug("%s closeRd %s
|
|
61
|
-
|
|
62
|
-
@lock.synchronize do
|
|
63
|
-
if st.closed
|
|
64
|
-
return
|
|
65
|
-
end
|
|
66
|
-
st.closed = true
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
remove_rudder_state(st.rudder)
|
|
66
|
+
def close_rudder(rd)
|
|
67
|
+
BayLog.debug("%s closeRd %s", agent, rd)
|
|
70
68
|
|
|
71
69
|
begin
|
|
72
|
-
|
|
70
|
+
rd.close()
|
|
73
71
|
rescue IOError => e
|
|
74
72
|
Baylog.error_e(e)
|
|
75
73
|
end
|
|
76
74
|
|
|
77
|
-
while consume_oldest_unit(st) do
|
|
78
|
-
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
if st.transporter != nil
|
|
82
|
-
st.transporter.on_closed(st.rudder)
|
|
83
|
-
end
|
|
84
75
|
end
|
|
85
76
|
|
|
86
77
|
def is_busy()
|
|
@@ -98,13 +89,6 @@ module Baykit
|
|
|
98
89
|
end
|
|
99
90
|
end
|
|
100
91
|
|
|
101
|
-
def remove_rudder_state(rd)
|
|
102
|
-
@rudders_lock.synchronize do
|
|
103
|
-
@rudders.delete(rd.key())
|
|
104
|
-
end
|
|
105
|
-
@channel_count -= 1
|
|
106
|
-
end
|
|
107
|
-
|
|
108
92
|
def close_timeout_sockets
|
|
109
93
|
if @rudders.empty?
|
|
110
94
|
return
|
|
@@ -128,7 +112,7 @@ module Baykit
|
|
|
128
112
|
end
|
|
129
113
|
|
|
130
114
|
close_list.each do |st|
|
|
131
|
-
|
|
115
|
+
req_close(st.rudder)
|
|
132
116
|
end
|
|
133
117
|
end
|
|
134
118
|
|
|
@@ -139,7 +123,7 @@ module Baykit
|
|
|
139
123
|
end
|
|
140
124
|
copied.each do |st|
|
|
141
125
|
if st.rudder != @agent.command_receiver.rudder
|
|
142
|
-
close_rudder(st)
|
|
126
|
+
close_rudder(st.rudder)
|
|
143
127
|
end
|
|
144
128
|
end
|
|
145
129
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require 'baykit/bayserver/
|
|
1
|
+
require 'baykit/bayserver/common/transporter'
|
|
2
2
|
require 'baykit/bayserver/protocol/protocol_exception'
|
|
3
3
|
require 'baykit/bayserver/agent/next_socket_action'
|
|
4
4
|
|
|
@@ -7,7 +7,7 @@ module Baykit
|
|
|
7
7
|
module Agent
|
|
8
8
|
module Multiplexer
|
|
9
9
|
class PlainTransporter
|
|
10
|
-
include Transporter # Implements
|
|
10
|
+
include Baykit::BayServer::Common::Transporter # Implements
|
|
11
11
|
include Baykit::BayServer::Agent
|
|
12
12
|
include Baykit::BayServer::Protocol
|
|
13
13
|
include Baykit::BayServer::Util
|
|
@@ -40,15 +40,16 @@ module Baykit
|
|
|
40
40
|
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
def
|
|
43
|
+
def on_connected(rd)
|
|
44
44
|
BayLog.trace("%s onConnect", self)
|
|
45
|
+
check_rudder rd
|
|
45
46
|
|
|
46
47
|
return @ship.notify_connect
|
|
47
|
-
;
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
def on_read(rd, buf, adr)
|
|
51
51
|
BayLog.debug("%s onRead", self)
|
|
52
|
+
check_rudder rd
|
|
52
53
|
|
|
53
54
|
if buf.length == 0
|
|
54
55
|
return @ship.notify_eof
|
|
@@ -78,31 +79,38 @@ module Baykit
|
|
|
78
79
|
end
|
|
79
80
|
|
|
80
81
|
def on_error(rd, e)
|
|
82
|
+
check_rudder rd
|
|
81
83
|
@ship.notify_error(e)
|
|
82
84
|
end
|
|
83
85
|
|
|
84
86
|
def on_closed(rd)
|
|
87
|
+
check_rudder rd
|
|
85
88
|
@ship.notify_close
|
|
86
89
|
end
|
|
87
90
|
|
|
88
91
|
def req_connect(rd, adr)
|
|
92
|
+
check_rudder rd
|
|
89
93
|
@multiplexer.req_connect(rd, adr)
|
|
90
94
|
end
|
|
91
95
|
|
|
92
96
|
def req_read(rd)
|
|
97
|
+
check_rudder rd
|
|
93
98
|
@multiplexer.req_read(rd)
|
|
94
99
|
end
|
|
95
100
|
|
|
96
101
|
def req_write(rd, buf, adr, tag, &lis)
|
|
97
|
-
|
|
102
|
+
check_rudder rd
|
|
103
|
+
@multiplexer.req_write(rd, buf, adr, tag, &lis)
|
|
98
104
|
end
|
|
99
105
|
|
|
100
106
|
def req_close(rd)
|
|
107
|
+
check_rudder rd
|
|
101
108
|
@closed = true
|
|
102
109
|
@multiplexer.req_close(rd)
|
|
103
110
|
end
|
|
104
111
|
|
|
105
112
|
def check_timeout(rd, duration_sec)
|
|
113
|
+
check_rudder rd
|
|
106
114
|
return @ship.check_timeout(duration_sec)
|
|
107
115
|
end
|
|
108
116
|
|
|
@@ -120,6 +128,13 @@ module Baykit
|
|
|
120
128
|
def secure()
|
|
121
129
|
return false
|
|
122
130
|
end
|
|
131
|
+
|
|
132
|
+
private
|
|
133
|
+
def check_rudder(rd)
|
|
134
|
+
if rd != @ship.rudder
|
|
135
|
+
raise Sink.new("Invalid rudder: %s", rd)
|
|
136
|
+
end
|
|
137
|
+
end
|
|
123
138
|
end
|
|
124
139
|
end
|
|
125
140
|
end
|