bayserver-core 2.3.2 → 3.0.0

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.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/lib/baykit/bayserver/agent/accept_handler.rb +0 -26
  3. data/lib/baykit/bayserver/agent/channel_listener.rb +6 -6
  4. data/lib/baykit/bayserver/agent/command_receiver.rb +97 -38
  5. data/lib/baykit/bayserver/agent/grand_agent.rb +444 -134
  6. data/lib/baykit/bayserver/agent/letter.rb +30 -0
  7. data/lib/baykit/bayserver/agent/lifecycle_listener.rb +9 -7
  8. data/lib/baykit/bayserver/agent/monitor/grand_agent_monitor.rb +298 -0
  9. data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer.rb +257 -0
  10. data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer_base.rb +52 -0
  11. data/lib/baykit/bayserver/agent/multiplexer/multiplexer_base.rb +150 -0
  12. data/lib/baykit/bayserver/agent/multiplexer/plain_transporter.rb +129 -0
  13. data/lib/baykit/bayserver/agent/multiplexer/rudder_state.rb +81 -0
  14. data/lib/baykit/bayserver/agent/multiplexer/secure_transporter.rb +50 -0
  15. data/lib/baykit/bayserver/agent/multiplexer/spider_multiplexer.rb +561 -0
  16. data/lib/baykit/bayserver/agent/multiplexer/spin_multiplexer.rb +311 -0
  17. data/lib/baykit/bayserver/agent/multiplexer/taxi_multiplexer.rb +194 -0
  18. data/lib/baykit/bayserver/agent/multiplexer/transporter.rb +61 -0
  19. data/lib/baykit/bayserver/agent/multiplexer/write_unit.rb +30 -0
  20. data/lib/baykit/bayserver/agent/non_blocking_handler.rb +0 -319
  21. data/lib/baykit/bayserver/agent/signal/signal_agent.rb +2 -1
  22. data/lib/baykit/bayserver/agent/timer_handler.rb +1 -1
  23. data/lib/baykit/bayserver/agent/transporter/data_listener.rb +7 -7
  24. data/lib/baykit/bayserver/agent/transporter/package.rb +0 -3
  25. data/lib/baykit/bayserver/agent/transporter/transporter.rb +5 -139
  26. data/lib/baykit/bayserver/bay_log.rb +1 -0
  27. data/lib/baykit/bayserver/bayserver.rb +32 -28
  28. data/lib/baykit/bayserver/{util → common}/groups.rb +1 -1
  29. data/lib/baykit/bayserver/common/inbound_handler.rb +12 -0
  30. data/lib/baykit/bayserver/{docker/base → common}/inbound_ship.rb +94 -19
  31. data/lib/baykit/bayserver/{docker/base → common}/inbound_ship_store.rb +7 -9
  32. data/lib/baykit/bayserver/common/multiplexer.rb +98 -0
  33. data/lib/baykit/bayserver/common/postpone.rb +15 -0
  34. data/lib/baykit/bayserver/common/read_only_ship.rb +42 -0
  35. data/lib/baykit/bayserver/common/recipient.rb +24 -0
  36. data/lib/baykit/bayserver/common/vehicle.rb +24 -0
  37. data/lib/baykit/bayserver/common/vehicle_runner.rb +127 -0
  38. data/lib/baykit/bayserver/{docker/warp → common}/warp_data.rb +18 -10
  39. data/lib/baykit/bayserver/common/warp_handler.rb +27 -0
  40. data/lib/baykit/bayserver/{docker/warp → common}/warp_ship.rb +107 -27
  41. data/lib/baykit/bayserver/{docker/warp → common}/warp_ship_store.rb +3 -8
  42. data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +2 -2
  43. data/lib/baykit/bayserver/docker/base/port_base.rb +59 -27
  44. data/lib/baykit/bayserver/docker/{warp/warp_docker.rb → base/warp_base.rb} +43 -50
  45. data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +118 -31
  46. data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +60 -63
  47. data/lib/baykit/bayserver/docker/built_in/built_in_permission_docker.rb +11 -10
  48. data/lib/baykit/bayserver/docker/built_in/built_in_secure_docker.rb +13 -4
  49. data/lib/baykit/bayserver/docker/city.rb +27 -13
  50. data/lib/baykit/bayserver/docker/club.rb +8 -8
  51. data/lib/baykit/bayserver/docker/docker.rb +9 -1
  52. data/lib/baykit/bayserver/docker/harbor.rb +184 -22
  53. data/lib/baykit/bayserver/docker/permission.rb +7 -6
  54. data/lib/baykit/bayserver/docker/port.rb +39 -11
  55. data/lib/baykit/bayserver/docker/secure.rb +11 -9
  56. data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +99 -4
  57. data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +6 -2
  58. data/lib/baykit/bayserver/docker/send_file/send_file_ship.rb +92 -0
  59. data/lib/baykit/bayserver/docker/town.rb +31 -15
  60. data/lib/baykit/bayserver/docker/trouble.rb +17 -5
  61. data/lib/baykit/bayserver/docker/warp.rb +34 -0
  62. data/lib/baykit/bayserver/mem_usage.rb +9 -9
  63. data/lib/baykit/bayserver/protocol/command_packer.rb +1 -8
  64. data/lib/baykit/bayserver/protocol/packet_packer.rb +7 -11
  65. data/lib/baykit/bayserver/protocol/packet_store.rb +4 -4
  66. data/lib/baykit/bayserver/protocol/protocol_handler.rb +26 -8
  67. data/lib/baykit/bayserver/protocol/protocol_handler_store.rb +5 -5
  68. data/lib/baykit/bayserver/rudders/io_rudder.rb +62 -0
  69. data/lib/baykit/bayserver/rudders/rudder.rb +29 -0
  70. data/lib/baykit/bayserver/{watercraft → ships}/ship.rb +65 -41
  71. data/lib/baykit/bayserver/taxi/taxi.rb +15 -10
  72. data/lib/baykit/bayserver/taxi/taxi_runner.rb +9 -94
  73. data/lib/baykit/bayserver/tours/read_file_taxi.rb +2 -2
  74. data/lib/baykit/bayserver/tours/req_content_handler.rb +16 -13
  75. data/lib/baykit/bayserver/tours/tour.rb +2 -2
  76. data/lib/baykit/bayserver/tours/tour_handler.rb +36 -0
  77. data/lib/baykit/bayserver/tours/tour_req.rb +14 -24
  78. data/lib/baykit/bayserver/tours/tour_res.rb +5 -89
  79. data/lib/baykit/bayserver/tours/tour_store.rb +5 -5
  80. data/lib/baykit/bayserver/train/train_runner.rb +17 -13
  81. data/lib/baykit/bayserver/util/data_consume_listener.rb +1 -1
  82. data/lib/baykit/bayserver/util/executor_service.rb +11 -7
  83. data/lib/baykit/bayserver/util/ip_matcher.rb +9 -39
  84. data/lib/baykit/bayserver/util/locale.rb +1 -1
  85. data/lib/baykit/bayserver/util/selector.rb +24 -5
  86. data/lib/baykit/bayserver/util/sys_util.rb +6 -6
  87. data/lib/baykit/bayserver/version.rb +1 -1
  88. metadata +37 -18
  89. data/lib/baykit/bayserver/agent/grand_agent_monitor.rb +0 -231
  90. data/lib/baykit/bayserver/agent/transporter/plain_transporter.rb +0 -55
  91. data/lib/baykit/bayserver/agent/transporter/secure_transporter.rb +0 -81
  92. data/lib/baykit/bayserver/docker/base/inbound_handler.rb +0 -42
  93. data/lib/baykit/bayserver/docker/warp/package.rb +0 -4
  94. data/lib/baykit/bayserver/docker/warp/warp_data_listener.rb +0 -112
  95. data/lib/baykit/bayserver/docker/warp/warp_handler.rb +0 -38
  96. /data/lib/baykit/bayserver/{util → common}/cities.rb +0 -0
@@ -0,0 +1,311 @@
1
+ require 'baykit/bayserver/common/recipient'
2
+ require 'baykit/bayserver/rudders/rudder'
3
+ require 'baykit/bayserver/rudders/io_rudder'
4
+
5
+ require 'baykit/bayserver/agent/multiplexer/multiplexer_base'
6
+ require 'baykit/bayserver/agent/timer_handler'
7
+
8
+ module Baykit
9
+ module BayServer
10
+ module Agent
11
+ module Multiplexer
12
+ class SpinMultiplexer < Baykit::BayServer::Agent::Multiplexer::MultiplexerBase
13
+ include Baykit::BayServer::Agent::TimerHandler #implements
14
+
15
+ include Baykit::BayServer::Rudders
16
+ include Baykit::BayServer::Util
17
+
18
+ class Lapper # abstract class
19
+
20
+ attr :state
21
+ attr :last_access
22
+
23
+ def initialize(state)
24
+ @state = state
25
+ access
26
+ end
27
+
28
+ def access
29
+ @last_access = Time.now.tv_sec
30
+ end
31
+
32
+ def lap()
33
+ raise NotImplementedError
34
+ end
35
+
36
+ def next
37
+ raise NotImplementedError
38
+ end
39
+
40
+ def ==(other)
41
+ other.state == @state
42
+ end
43
+ end
44
+
45
+ class ReadIOLapper < Lapper
46
+
47
+ attr :agent
48
+
49
+ def initialize(agt, st)
50
+ super(st)
51
+ @agent = agt
52
+ st.rudder.set_non_blocking
53
+ end
54
+
55
+ def lap
56
+ spun = false
57
+
58
+ begin
59
+ infile = @state.rudder.io
60
+ eof = false
61
+
62
+ begin
63
+ n = @state.rudder.read(@state.read_buf, @state.buf_size)
64
+ #infile.sysread(@state.buf_size, @state.read_buf)
65
+ rescue EOFError => e
66
+ @state.read_buf.clear
67
+ eof = true
68
+ rescue Errno::EAGAIN => e
69
+ BayLog.debug("%s %s", @agent, e)
70
+ return true
71
+ end
72
+
73
+ if @state.read_buf.length == 0
74
+ if !eof
75
+ return true
76
+ else
77
+ BayLog.debug("%s Spin read: EOF\\(^o^)/ rd=%s", @agent, infile)
78
+ end
79
+ end
80
+
81
+ @agent.send_read_letter(@state, @state.read_buf.length, nil, nil, false)
82
+ return false
83
+
84
+ rescue Exception => e
85
+ BayLog.error_e(e, "%s Error", @agent)
86
+ @agent.send_close_req_letter(@state, false)
87
+ return false
88
+ end
89
+ end
90
+
91
+ def next
92
+
93
+ end
94
+
95
+ end
96
+
97
+ attr :spin_count
98
+ attr :running_list
99
+ attr :running_list_lock
100
+
101
+ def initialize(agt)
102
+ super(agt)
103
+ @spin_count = 0
104
+ @running_list = []
105
+ @running_list_lock = Mutex.new
106
+ @agent.add_timer_handler(self)
107
+ end
108
+ def to_s
109
+ return "SpnMpx[#{@agent}]"
110
+ end
111
+
112
+ #########################################
113
+ # Implements Multiplexer
114
+ #########################################
115
+
116
+ def req_accept(rd)
117
+ raise NotImplementedError.new
118
+ end
119
+
120
+ def req_connect(rd, adr)
121
+ raise NotImplementedError.new
122
+ end
123
+
124
+ def req_read(rd)
125
+ st = get_rudder_state(rd)
126
+ if st == nil
127
+ BayLog.error("%s Invalid rudder", self)
128
+ return
129
+ end
130
+
131
+ need_read = false
132
+ st.reading_lock.synchronize do
133
+ if not st.reading
134
+ need_read = true
135
+ st.reading = true
136
+ end
137
+ end
138
+
139
+ if need_read
140
+ next_read(st)
141
+ end
142
+ end
143
+
144
+ def req_write(rd, buf, len, adr, tag, lis)
145
+ st = get_rudder_state(rd)
146
+ if st == nil
147
+ raise IOError("Invalid rudder")
148
+ end
149
+
150
+ unt = WriteUnit.new(buf, adr, tag, lis)
151
+ st.write_queue_lock.synchronize do
152
+ st.write_queue << unt
153
+ end
154
+ st.access
155
+
156
+ need_write = false
157
+ st.writing_lock.synchronize do
158
+ if not st.writing
159
+ need_write = true
160
+ st.writing = true
161
+ end
162
+ end
163
+
164
+ if need_write
165
+ next_write(st)
166
+ end
167
+ end
168
+
169
+ def req_end(rd)
170
+ st = get_rudder_state(rd)
171
+ st.finale = true
172
+ end
173
+
174
+ def req_close(rd)
175
+ st = get_rudder_state(rd)
176
+ st.closing = true
177
+ @agent.send_close_req_letter(st, false)
178
+ end
179
+
180
+
181
+ def shutdown
182
+ wakeup
183
+ end
184
+
185
+ def is_non_blocking
186
+ return false
187
+ end
188
+
189
+ def use_async_api
190
+ return false
191
+ end
192
+
193
+
194
+ def cancel_read(st)
195
+ st.reading_lock.synchronize do
196
+ BayLog.debug("%s Reading off %s", agent, st.rudder)
197
+ st.reading = false
198
+ end
199
+ remove_from_running_list(st)
200
+ end
201
+
202
+ def cancel_write(st)
203
+ end
204
+
205
+ def next_accept(st)
206
+ end
207
+
208
+ def next_read(st)
209
+ lpr = ReadIOLapper.new(@agent, st)
210
+ lpr.next
211
+
212
+ add_to_running_list(lpr)
213
+ end
214
+
215
+ def next_write(st)
216
+ end
217
+
218
+ def on_busy
219
+ BayLog.debug("%s onBusy", agent)
220
+ BayServer::anchorable_port_map.keys.each do |rd|
221
+
222
+ end
223
+ end
224
+
225
+ def on_free
226
+ BayLog.debug("%s onFree aborted=%s", agent, agent.aborted);
227
+ if agent.aborted
228
+ return
229
+ end
230
+
231
+ BayServer.anchorable_port_map.keys.each do |rd|
232
+
233
+ end
234
+ end
235
+
236
+ def close_rudder(st)
237
+ remove_from_running_list(st)
238
+ super
239
+ end
240
+
241
+ #########################################
242
+ # Implements TimerHandler
243
+ #########################################
244
+
245
+ def on_timer
246
+ #stop_timeout_spins
247
+ end
248
+
249
+ #########################################
250
+ # Custom methods
251
+ #########################################
252
+ def is_empty
253
+ return @running_list.empty?
254
+ end
255
+
256
+ def process_data
257
+ if is_empty
258
+ return false
259
+ end
260
+
261
+ all_spun = true
262
+ remove_list = []
263
+ @running_list.length.downto(1) do |i|
264
+ lpr = @running_list[i-1]
265
+ st = lpr.state
266
+ spun = lpr.lap
267
+ st.access
268
+
269
+ all_spun = all_spun & spun
270
+ end
271
+
272
+ if all_spun
273
+ @spin_count += 1
274
+ if @spin_count > 10
275
+ sleep(0.01)
276
+ else
277
+ @spin_count = 0
278
+ end
279
+ end
280
+
281
+ return true
282
+
283
+ end
284
+
285
+ #########################################
286
+ # Private methods
287
+ #########################################
288
+ private
289
+
290
+ def remove_from_running_list(st)
291
+ BayLog.debug("remove: %s", st.rudder)
292
+ @running_list_lock.synchronize do
293
+ @running_list.delete_if do |lpr |
294
+ lpr.state == st
295
+ end
296
+ end
297
+ end
298
+
299
+ def add_to_running_list(lpr)
300
+ BayLog.debug("add: %s", lpr.state.rudder)
301
+ @running_list_lock.synchronize do
302
+ if !@running_list.include?(lpr)
303
+ @running_list << lpr
304
+ end
305
+ end
306
+ end
307
+ end
308
+ end
309
+ end
310
+ end
311
+ end
@@ -0,0 +1,194 @@
1
+ require 'baykit/bayserver/sink'
2
+ require 'baykit/bayserver/rudders/io_rudder'
3
+
4
+ require 'baykit/bayserver/agent/multiplexer/multiplexer_base'
5
+ require 'baykit/bayserver/taxi/taxi'
6
+ require 'baykit/bayserver/taxi/taxi_runner'
7
+
8
+
9
+ module Baykit
10
+ module BayServer
11
+ module Agent
12
+ module Multiplexer
13
+ class TaxiMultiplexer < MultiplexerBase
14
+
15
+ class TaxiForMpx < Baykit::BayServer::Taxi::Taxi
16
+ attr :rudder_state
17
+ attr :for_read
18
+ def initialize(st, for_read)
19
+ @rudder_state = st
20
+ @for_read = for_read
21
+ end
22
+ def depart
23
+ if @for_read
24
+ @rudder_state.multiplexer.do_next_read(@rudder_state)
25
+ else
26
+ @rudder_state.multiplexer.do_next_write(@rudder_state)
27
+ end
28
+ end
29
+
30
+ def on_timer
31
+ if @rudder_state.transporter != nil
32
+ @rudder_state.transporter.check_timeout(@rudder_state.rudder, -1)
33
+ end
34
+ end
35
+ end
36
+
37
+ include Baykit::BayServer::Agent::Multiplexer
38
+
39
+ include Baykit::BayServer
40
+ include Baykit::BayServer::Rudders
41
+ include Baykit::BayServer::Util
42
+ include Baykit::BayServer::Taxi
43
+
44
+ def initialize(agt)
45
+ super
46
+ end
47
+ def to_s
48
+ return "TaxiMpx[#{@agent}]"
49
+ end
50
+
51
+
52
+ #########################################
53
+ # Implements Multiplexer
54
+ #########################################
55
+
56
+ def req_accept(rd)
57
+ raise Sink.new
58
+ end
59
+
60
+ def req_connect(rd, adr)
61
+ raise Sink.new
62
+ end
63
+
64
+ def req_read(rd)
65
+ st = get_rudder_state(rd)
66
+ if st == nil
67
+ return
68
+ end
69
+
70
+ BayLog.debug("%s reqRead rd=%s state=%s", @agent, st.rudder, st);
71
+ need_read = false
72
+ st.reading_lock.synchronize do
73
+ if !st.reading
74
+ need_read = true
75
+ st.reading = true
76
+ end
77
+ end
78
+
79
+ if need_read
80
+ next_run(st, true)
81
+ end
82
+
83
+ st.access
84
+ end
85
+
86
+ def req_write(rd, buf, adr, tag, lis)
87
+ st = get_rudder_state(rd)
88
+ BayLog.debug("%s reqWrite st=%s", @agent, st)
89
+
90
+ if st == nil || st.closed
91
+ BayLog.warn("%s Channel is closed: %s", @agent, rd)
92
+ return
93
+ end
94
+
95
+ unt = WriteUnit.new(buf, adr, tag, lis)
96
+ st.writing_lock.synchronize do
97
+ st.write_queue << unt
98
+ end
99
+
100
+ need_write = false
101
+ st.writing_lock.synchronize do
102
+ if !st.writing
103
+ need_write = true
104
+ st.writing = true
105
+ end
106
+ end
107
+
108
+ if need_write
109
+ next_run(st, false)
110
+ end
111
+
112
+ st.access
113
+ end
114
+
115
+ def req_close(rd)
116
+ st = get_rudder_state(rd)
117
+ BayLog.debug("%s reqClose st=%s", @agent, st);
118
+ close_rudder(st)
119
+ st.access
120
+ end
121
+
122
+ def cancel_read(st)
123
+
124
+ end
125
+
126
+ def cancel_write(st)
127
+
128
+ end
129
+
130
+ def next_accept(st)
131
+ raise Sink.new
132
+ end
133
+
134
+ def next_read(st)
135
+ next_run(st, true)
136
+ end
137
+
138
+ def next_write(st)
139
+ next_run(st, false)
140
+ end
141
+
142
+ def is_non_blocking()
143
+ return false
144
+ end
145
+
146
+ def use_async_api()
147
+ return false
148
+ end
149
+
150
+ def next_run(st, for_read)
151
+ BayLog.debug("%s Post next run: %s", self, st)
152
+
153
+ TaxiRunner.post(@agent.agent_id, TaxiForMpx.new(st, for_read))
154
+ end
155
+
156
+ def do_next_read(st)
157
+ st.access
158
+ begin
159
+ len = st.rudder.read(st.read_buf, st.buf_size)
160
+ if len <= 0
161
+ len = 0
162
+ end
163
+ @agent.send_read_letter(st, len, nil, nil, true)
164
+
165
+ rescue Exception => e
166
+ @agent.send_read_letter(st, -1, nil, e, true)
167
+ end
168
+ end
169
+
170
+ def do_next_write(st)
171
+ st.access
172
+ begin
173
+ if st.write_queue.empty?
174
+ raise Sink("%s write queue is empty", self)
175
+ end
176
+
177
+ u = st.write_queue[0]
178
+ if u.buf.length == 0
179
+ len = 0
180
+ else
181
+ len = st.rudder.write(u.buf)
182
+ u.buf.slice!(0, len)
183
+ end
184
+ @agent.send_wrote_letter(st, len, nil, true)
185
+
186
+ rescue Exception => e
187
+ @agent.send_wrote_letter(st, -1, e, true)
188
+ end
189
+ end
190
+ end
191
+ end
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,61 @@
1
+ require 'baykit/bayserver/util/reusable'
2
+
3
+ module Baykit
4
+ module BayServer
5
+ module Agent
6
+ module Multiplexer
7
+ module Transporter # interface
8
+ include Baykit::BayServer::Util::Reusable # implements
9
+
10
+ def init()
11
+ raise NotImplementedError.new
12
+ end
13
+
14
+ def on_connect(rd)
15
+ raise NotImplementedError.new
16
+ end
17
+
18
+ def on_read(rd, data, adr)
19
+ raise NotImplementedError.new
20
+ end
21
+
22
+ def on_error(rd, e)
23
+ raise NotImplementedError.new
24
+ end
25
+
26
+ def on_closed(rd)
27
+ raise NotImplementedError.new
28
+ end
29
+
30
+ def req_connect(rd, adr)
31
+ raise NotImplementedError.new
32
+ end
33
+
34
+ def req_read(rd)
35
+ raise NotImplementedError.new
36
+ end
37
+
38
+ def req_write(rd, buf, adr, tag, &lis)
39
+ raise NotImplementedError.new
40
+ end
41
+
42
+ def req_close(rd)
43
+ raise NotImplementedError.new
44
+ end
45
+
46
+ def check_timeout(rd, duretion_sec)
47
+ raise NotImplementedError.new
48
+ end
49
+
50
+ def get_read_buffer_size
51
+ raise NotImplementedError.new
52
+ end
53
+
54
+ def print_usage(indent)
55
+ raise NotImplementedError.new
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,30 @@
1
+ require 'baykit/bayserver/util/reusable'
2
+
3
+ module Baykit
4
+ module BayServer
5
+ module Agent
6
+ module Multiplexer
7
+ class WriteUnit
8
+
9
+ attr :buf
10
+ attr :adr
11
+ attr :tag
12
+ attr :listener
13
+
14
+ def initialize(buf, adr, tag, lis)
15
+ @buf = buf
16
+ @adr = adr
17
+ @tag = tag
18
+ @listener = lis
19
+ end
20
+
21
+ def done()
22
+ if @listener != nil
23
+ @listener.call()
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end