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.
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
@@ -2,25 +2,28 @@ 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
+ require 'baykit/bayserver/docker/warp'
5
7
  require 'baykit/bayserver/docker/base/club_base'
6
- require 'baykit/bayserver/docker/warp/warp_data'
7
- require 'baykit/bayserver/docker/warp/warp_data_listener'
8
- require 'baykit/bayserver/docker/warp/warp_ship_store'
8
+ require 'baykit/bayserver/common/warp_data'
9
+ require 'baykit/bayserver/common/warp_ship_store'
9
10
 
10
11
  module Baykit
11
12
  module BayServer
12
13
  module Docker
13
- module Warp
14
- class WarpDocker < Baykit::BayServer::Docker::Base::ClubBase
14
+ module Base
15
+ class WarpBase < Baykit::BayServer::Docker::Base::ClubBase
16
+ include Baykit::BayServer::Docker::Warp # implements
15
17
 
16
18
  include Baykit::BayServer::Agent
19
+ include Baykit::BayServer::Agent::Multiplexer
17
20
  include Baykit::BayServer::Protocol
18
- include Baykit::BayServer::Bcf
19
21
  include Baykit::BayServer::Util
20
- include Baykit::BayServer::Docker::Warp
22
+ include Baykit::BayServer::Rudders
21
23
 
22
24
  class AgentListener
23
- include Baykit::BayServer::Agent::LifecycleListener
25
+ include Baykit::BayServer::Agent::LifecycleListener # implements
26
+ include Baykit::BayServer::Common
24
27
 
25
28
  attr :warp_docker
26
29
 
@@ -28,25 +31,12 @@ module Baykit
28
31
  @warp_docker = dkr
29
32
  end
30
33
 
31
- def add(agt)
32
- @warp_docker.stores[agt.agent_id] = WarpShipStore.new(@warp_docker.max_ships);
34
+ def add(agt_id)
35
+ @warp_docker.stores[agt_id] = WarpShipStore.new(@warp_docker.max_ships);
33
36
  end
34
37
 
35
- def remove(agt)
36
- @warp_docker.stores.delete(agt.agent_id);
37
- end
38
- end
39
-
40
-
41
- class WarpShipHolder
42
- attr :owner_id
43
- attr :ship_id
44
- attr :ship
45
-
46
- def initialize(owner_id, ship_id, ship)
47
- @owner_id = owner_id
48
- @ship_id = ship_id
49
- @ship = ship
38
+ def remove(agt_id)
39
+ @warp_docker.stores.delete(agt_id);
50
40
  end
51
41
  end
52
42
 
@@ -55,7 +45,6 @@ module Baykit
55
45
  attr :port
56
46
  attr :warp_base
57
47
  attr :max_ships
58
- attr :cur_ships
59
48
  attr :host_addr
60
49
  attr :timeout_sec
61
50
  attr :tour_list
@@ -67,13 +56,21 @@ module Baykit
67
56
  ######################################################
68
57
  # Abstract methods
69
58
  ######################################################
70
- #
71
- #
72
- # public abstract boolean secure();
73
- # protected abstract String protocol();
74
- # protected abstract Transporter newTransporter(ShipAgent agent, SocketChannel ch);
75
- #
59
+ def secure
60
+ raise NotImplementedError.new
61
+ end
62
+
63
+ def protocol
64
+ raise NotImplementedError.new
65
+ end
76
66
 
67
+ def new_transporter(agent, rd, ship)
68
+ raise NotImplementedError.new
69
+ end
70
+
71
+ ######################################################
72
+ # Initialize methods
73
+ ######################################################
77
74
  def initialize
78
75
  super
79
76
  @scheme = nil
@@ -81,7 +78,6 @@ module Baykit
81
78
  @port = 0
82
79
  @warp_base = nil
83
80
  @max_ships = -1
84
- @cur_ships = 0
85
81
  @host_addr = nil
86
82
  @tour_list = []
87
83
  @timeout_sec = -1 # -1 means "Use harbor.socketTimeoutSec"
@@ -180,7 +176,7 @@ module Baykit
180
176
  ######################################################
181
177
 
182
178
  def arrive(tur)
183
- agt = tur.ship.agent
179
+ agt = GrandAgent.get(tur.ship.agent_id)
184
180
  sto = get_ship_store(agt.agent_id)
185
181
 
186
182
  wsip = sto.rent()
@@ -199,12 +195,12 @@ module Baykit
199
195
  else
200
196
  skt = Socket.new(@host_addr[1].ipv4? ? Socket::AF_INET : Socket::AF_INET6, Socket::SOCK_STREAM, 0)
201
197
  end
202
- skt.nonblock = true
198
+ rd = IORudder.new(skt)
203
199
 
204
- tp = new_transporter(agt, skt)
200
+ tp = new_transporter(agt, rd, wsip)
205
201
  proto_hnd = ProtocolHandlerStore.get_store(protocol(), false, agt.agent_id).rent()
206
- wsip.init_warp(skt, agt, tp, self, proto_hnd)
207
- tp.init(agt.non_blocking_handler, skt, WarpDataListener.new(wsip))
202
+ wsip.init_warp(rd, agt.agent_id, tp, self, proto_hnd)
203
+
208
204
  BayLog.debug("%s init warp ship", wsip)
209
205
  BayLog.debug("%s Connect to %s:%d skt=%s", wsip, @host, @port, skt)
210
206
 
@@ -218,8 +214,8 @@ module Baykit
218
214
  wsip.start_warp_tour(tur)
219
215
 
220
216
  if need_connect
221
- agt.non_blocking_handler.add_channel_listener(wsip.socket, tp)
222
- agt.non_blocking_handler.ask_to_connect(wsip.socket, @host_addr[1])
217
+ agt.net_multiplexer.add_rudder_state(wsip.rudder, RudderState.new(wsip.rudder, tp))
218
+ agt.net_multiplexer.get_transporter(wsip.rudder).req_connect(wsip.rudder, @host_addr[1])
223
219
  end
224
220
 
225
221
  rescue SystemCallError => e
@@ -234,21 +230,18 @@ module Baykit
234
230
 
235
231
 
236
232
  ######################################################
237
- # Implements WarpDocker
233
+ # Implements Warp
238
234
  ######################################################
239
- def keep_ship(wsip)
235
+ def keep(wsip)
240
236
  BayLog.debug("%s keepShip: %s", self, wsip)
241
- get_ship_store(wsip.agent.agent_id).keep(wsip)
237
+ get_ship_store(wsip.agent_id).keep(wsip)
242
238
  end
243
239
 
244
- def return_ship(wsip)
240
+ def on_end_ship(wsip)
241
+ BayLog.debug("%s Return protocol handler: ", wsip)
242
+ get_protocol_handler_store(wsip.agent_id).Return(wsip.protocol_handler)
245
243
  BayLog.debug("%s return ship: %s", self, wsip);
246
- get_ship_store(wsip.agent.agent_id).Return(wsip)
247
- end
248
-
249
- def return_protocol_handler(agt, phnd)
250
- BayLog.debug("%s Return protocol handler: ", phnd)
251
- get_protocol_handler_store(agt.agent_id).Return(phnd)
244
+ get_ship_store(wsip.agent_id).Return(wsip)
252
245
  end
253
246
 
254
247
  ######################################################
@@ -4,7 +4,7 @@ require 'baykit/bayserver/docker/base/docker_base'
4
4
  require 'baykit/bayserver/constants'
5
5
  require 'baykit/bayserver/config_exception'
6
6
 
7
- require 'baykit/bayserver/util/groups'
7
+ require 'baykit/bayserver/common/groups'
8
8
  require 'baykit/bayserver/util/sys_util'
9
9
 
10
10
 
@@ -19,6 +19,7 @@ module Baykit
19
19
  include Baykit::BayServer
20
20
  include Baykit::BayServer::Bcf
21
21
  include Baykit::BayServer::Util
22
+ include Baykit::BayServer::Common
22
23
  include Baykit::BayServer::Constants
23
24
 
24
25
  DEFAULT_MAX_SHIPS = 256
@@ -33,7 +34,11 @@ module Baykit
33
34
  DEFAULT_CONTROL_PORT = -1
34
35
  DEFAULT_MULTI_CORE = true
35
36
  DEFAULT_GZIP_COMP = false
36
- DEFAULT_FILE_SEND_METHOD = FILE_SEND_METHOD_TAXI
37
+ DEFAULT_NET_MULTIPLEXER = MULTIPLEXER_TYPE_SPIDER
38
+ DEFAULT_FILE_MULTIPLEXER = MULTIPLEXER_TYPE_SPIDER
39
+ DEFAULT_LOG_MULTIPLEXER = MULTIPLEXER_TYPE_SPIDER
40
+ DEFAULT_CGI_MULTIPLEXER = MULTIPLEXER_TYPE_SPIDER
41
+ DEFAULT_RECIPIENT = RECIPIENT_TYPE_SPIDER
37
42
  DEFAULT_PID_FILE = "bayserver.pid"
38
43
 
39
44
  # Default charset
@@ -84,8 +89,20 @@ module Baykit
84
89
  # Multi core flag
85
90
  attr :multi_core
86
91
 
87
- # Method to send file
88
- attr :file_send_method
92
+ # Multiplexer type of network I/O
93
+ attr :net_multiplexer
94
+
95
+ # Multiplexer type of file read
96
+ attr :file_multiplexer
97
+
98
+ # Multiplexer type of log output
99
+ attr :log_multiplexer
100
+
101
+ # Multiplexer type of CGI input
102
+ attr :cgi_multiplexer
103
+
104
+ # Recipient type
105
+ attr :recipient
89
106
 
90
107
  # PID file name
91
108
  attr :pid_file
@@ -105,7 +122,11 @@ module Baykit
105
122
  @control_port = DEFAULT_CONTROL_PORT
106
123
  @multi_core = DEFAULT_MULTI_CORE
107
124
  @gzip_comp = DEFAULT_GZIP_COMP
108
- @file_send_method = DEFAULT_FILE_SEND_METHOD
125
+ @net_multiplexer = DEFAULT_NET_MULTIPLEXER
126
+ @file_multiplexer = DEFAULT_FILE_MULTIPLEXER
127
+ @log_multiplexer = DEFAULT_LOG_MULTIPLEXER
128
+ @cgi_multiplexer = DEFAULT_CGI_MULTIPLEXER
129
+ @recipient = DEFAULT_RECIPIENT
109
130
  @pid_file = DEFAULT_PID_FILE
110
131
  end
111
132
 
@@ -128,22 +149,61 @@ module Baykit
128
149
  BayLog.warn(BayMessage.get(:CFG_MAX_SHIPS_IS_TO_SMALL, @max_ships))
129
150
  end
130
151
 
131
- if @file_send_method == FILE_SEND_METHOD_SELECT and !SysUtil.support_select_file()
132
- BayLog.warn(BayMessage.get(:CFG_FILE_SEND_METHOD_SELECT_NOT_SUPPORTED))
133
- @file_send_method = FILE_SEND_METHOD_TAXI
152
+ if @net_multiplexer == MULTIPLEXER_TYPE_TAXI ||
153
+ @net_multiplexer == MULTIPLEXER_TYPE_TRAIN ||
154
+ @net_multiplexer == MULTIPLEXER_TYPE_SPIN
155
+ BayLog.warn(
156
+ BayMessage.get(
157
+ :CFG_NET_MULTIPLEXER_NOT_SUPPORTED,
158
+ Harbor::get_multiplexer_type_name(@net_multiplexer),
159
+ Harbor::get_multiplexer_type_name(DEFAULT_NET_MULTIPLEXER)))
160
+ @net_multiplexer = DEFAULT_NET_MULTIPLEXER
134
161
  end
135
162
 
136
- if @file_send_method == FILE_SEND_METHOD_SPIN and !SysUtil.support_nonblock_file_read()
137
- BayLog.warn(BayMessage.get(:CFG_FILE_SEND_METHOD_SPIN_NOT_SUPPORTED))
138
- @file_send_method = FILE_SEND_METHOD_TAXI
163
+ if @file_multiplexer == MULTIPLEXER_TYPE_SPIDER and !SysUtil.support_select_file ||
164
+ @file_multiplexer == MULTIPLEXER_TYPE_SPIN and !SysUtil.support_nonblock_file_read ||
165
+ @file_multiplexer == MULTIPLEXER_TYPE_TRAIN
166
+ BayLog.warn(
167
+ BayMessage.get(
168
+ :CFG_FILE_MULTIPLEXER_NOT_SUPPORTED,
169
+ Harbor::get_multiplexer_type_name(@file_multiplexer),
170
+ Harbor::get_multiplexer_type_name(DEFAULT_FILE_MULTIPLEXER)))
171
+ @file_multiplexer = DEFAULT_FILE_MULTIPLEXER
139
172
  end
140
173
 
174
+ if @log_multiplexer == MULTIPLEXER_TYPE_SPIDER and !SysUtil.support_select_file ||
175
+ @log_multiplexer == MULTIPLEXER_TYPE_SPIN and !SysUtil.support_nonblock_file_write ||
176
+ @log_multiplexer == MULTIPLEXER_TYPE_TRAIN
177
+ BayLog.warn(
178
+ BayMessage.get(
179
+ :CFG_LOG_MULTIPLEXER_NOT_SUPPORTED,
180
+ Harbor::get_multiplexer_type_name(@log_multiplexer),
181
+ Harbor::get_multiplexer_type_name(DEFAULT_LOG_MULTIPLEXER)))
182
+ @log_multiplexer = DEFAULT_LOG_MULTIPLEXER
183
+ end
141
184
 
142
- end
185
+ if @log_multiplexer == MULTIPLEXER_TYPE_SPIN ||
186
+ @log_multiplexer == MULTIPLEXER_TYPE_PIGEON
187
+ BayLog.warn(
188
+ BayMessage.get(
189
+ :CFG_CGI_MULTIPLEXER_NOT_SUPPORTED,
190
+ Harbor::get_multiplexer_type_name(@cgi_multiplexer),
191
+ Harbor::get_multiplexer_type_name(DEFAULT_CGI_MULTIPLEXER)))
192
+ @cgi_multiplexer = DEFAULT_CGI_MULTIPLEXER
193
+ end
143
194
 
144
- #######################
145
- # Implements DockerBase
146
- #######################
195
+ if @net_multiplexer == MULTIPLEXER_TYPE_SPIDER &&
196
+ @recipient != RECIPIENT_TYPE_SPIDER
197
+ BayLog.warn(
198
+ BayMessage.get(
199
+ :CFG_NET_MULTIPLEXER_DOES_NOT_SUPPORT_THIS_RECIPIENT,
200
+ Harbor::get_multiplexer_type_name(@net_multiplexer),
201
+ Harbor::get_recipient_type_name(@recipient),
202
+ Harbor::get_recipient_type_name(RECIPIENT_TYPE_SPIDER)))
203
+ @recipient = RECIPIENT_TYPE_SPIDER
204
+ end
205
+
206
+ end
147
207
 
148
208
  def init_docker(dkr)
149
209
  if dkr.instance_of?(Trouble)
@@ -193,17 +253,47 @@ module Baykit
193
253
  @multi_core = StringUtil.parse_bool(kv.value)
194
254
  when "gzipcomp"
195
255
  @gzip_comp = StringUtil.parse_bool(kv.value)
196
- when "sendfilemethod"
197
- case kv.value.downcase()
198
- when "select"
199
- @file_send_method = FILE_SEND_METHOD_SELECT
200
- when "spin"
201
- @file_send_method = FILE_SEND_METHOD_SPIN
202
- when "taxi"
203
- @file_send_method = FILE_SEND_METHOD_TAXI
204
- else
205
- raise ConfigException.new(kv.file_name, kv.line_no, BayMessage.get(:CFG_INVALID_PARAMETER_VALUE, kv.value))
256
+
257
+ when "netmultiplexer"
258
+ begin
259
+ @net_multiplexer = Harbor::get_multiplexer_type(kv.value.downcase)
260
+ rescue => e
261
+ BayLog.error_e(e)
262
+ raise ConfigException.new(kv.file_name, kv.line_no, BayMessage::get(:CFG_INVALID_PARAMETER_VALUE, kv.value))
206
263
  end
264
+
265
+ when "filemultiplexer"
266
+ begin
267
+ @file_multiplexer = Harbor::get_multiplexer_type(kv.value.downcase)
268
+ rescue => e
269
+ BayLog.error_e(e)
270
+ raise ConfigException.new(kv.file_name, kv.line_no, BayMessage::get(:CFG_INVALID_PARAMETER_VALUE, kv.value))
271
+ end
272
+
273
+ when "logmultiplexer"
274
+ begin
275
+ @log_multiplexer = Harbor.get_multiplexer_type(kv.value.downcase)
276
+ rescue => e
277
+ BayLog.error_e(e)
278
+ raise ConfigException.new(kv.file_name, kv.line_no, BayMessage::get(:CFG_INVALID_PARAMETER_VALUE, kv.value))
279
+ end
280
+
281
+ when "cgimultiplexer"
282
+ begin
283
+ @cgi_multiplexer = Harbor.get_multiplexer_type(kv.value.downcase)
284
+ rescue => e
285
+ BayLog.error_e(e)
286
+ raise ConfigException.new(kv.file_name, kv.line_no, BayMessage::get(:CFG_INVALID_PARAMETER_VALUE, kv.value))
287
+ end
288
+
289
+ when "recipient"
290
+ begin
291
+ @recipient = Harbor.get_recipient_type(kv.value.downcase)
292
+ rescue => e
293
+ BayLog.error_e(e)
294
+ raise ConfigException.new(kv.file_name, kv.line_no, BayMessage::get(:CFG_INVALID_PARAMETER_VALUE, kv.value))
295
+ end
296
+
207
297
  when "pidfile"
208
298
  @pid_file = kv.value
209
299
  else
@@ -212,13 +302,10 @@ module Baykit
212
302
  true
213
303
  end
214
304
 
215
- def trace_header?
216
- @trace_header
217
- end
305
+ #######################
306
+ # Implements Harbor
307
+ #######################
218
308
 
219
- def multi_core?
220
- @multi_core
221
- end
222
309
  end
223
310
  end
224
311
  end
@@ -1,7 +1,8 @@
1
1
  require 'baykit/bayserver/agent/grand_agent'
2
2
  require 'baykit/bayserver/agent/lifecycle_listener'
3
- require 'baykit/bayserver/agent/transporter/plain_transporter'
4
- require 'baykit/bayserver/agent/transporter/spin_write_transporter'
3
+ require 'baykit/bayserver/agent/multiplexer/plain_transporter'
4
+ require 'baykit/bayserver/agent/multiplexer/rudder_state'
5
+ require 'baykit/bayserver/rudders/io_rudder'
5
6
  require 'baykit/bayserver/docker/built_in/write_file_taxi'
6
7
  require 'baykit/bayserver/docker/log'
7
8
  require 'baykit/bayserver/docker/built_in/log_items'
@@ -14,15 +15,18 @@ module Baykit
14
15
  module BuiltIn
15
16
  class BuiltInLogDocker < Baykit::BayServer::Docker::Base::DockerBase
16
17
  include Baykit::BayServer::Docker::Log # implements
17
- include Baykit::BayServer::Agent::Transporter
18
- include Baykit::BayServer::Agent
19
- include Baykit::BayServer::Util
20
18
 
19
+ include Baykit::BayServer::Docker
20
+ include Baykit::BayServer::Util
21
21
  include Baykit::BayServer::Bcf
22
+ include Baykit::BayServer::Agent
22
23
 
23
24
  class AgentListener
25
+ include Baykit::BayServer::Agent::Multiplexer
24
26
  include Baykit::BayServer::Agent::LifecycleListener # implements
25
27
  include Baykit::BayServer::Agent::Transporter
28
+ include Baykit::BayServer::Agent
29
+ include Baykit::BayServer::Rudders
26
30
 
27
31
  attr :log_docker
28
32
 
@@ -30,48 +34,58 @@ module Baykit
30
34
  @log_docker = dkr
31
35
  end
32
36
 
33
- def add(agt)
34
- file_name = "#{@log_docker.file_prefix}_#{agt.agent_id}.#{@log_docker.file_ext}";
37
+ def add(agt_id)
38
+ file_name = "#{@log_docker.file_prefix}_#{agt_id}.#{@log_docker.file_ext}"
39
+ size = 0
40
+ if ::File.exist?(file_name)
41
+ size = ::File.size(file_name)
42
+ end
43
+ agt = GrandAgent.get(agt_id)
35
44
 
36
- boat = LogBoat.new()
45
+ begin
46
+ f = File.open(file_name, "a")
47
+ rescue => e
48
+ BayLog.fatal(BayMessage.get(:INT_CANNOT_OPEN_LOG_FILE, file_name))
49
+ BayLog.fatal_e(e);
50
+ end
37
51
 
38
- case @log_docker.log_write_method
39
- when LOG_WRITE_METHOD_SELECT
40
- tp = PlainTransporter.new(false, 0, true) # write only
41
- tp.init(agt.non_blocking_handler, File.open(file_name, "a"), boat)
52
+ rd = IORudder.new(f)
42
53
 
43
- when LOG_WRITE_METHOD_SPIN
44
- tp = SpinWriteTransporter.new()
45
- tp.init(agt.spin_handler, File.open(file_name, "a"), boat)
54
+ case BayServer::harbor.log_multiplexer
55
+ when Harbor::MULTIPLEXER_TYPE_TAXI
56
+ mpx = agt.taxi_multiplexer
46
57
 
47
- when LOG_WRITE_METHOD_TAXI
48
- tp = WriteFileTaxi.new()
49
- tp.init(agt.agent_id, File.open(file_name, "a"), boat)
58
+ when Harbor::MULTIPLEXER_TYPE_SPIN
59
+ mpx = agt.spin_multiplexer
50
60
 
51
- end
61
+ when Harbor::MULTIPLEXER_TYPE_SPIDER
62
+ mpx = agt.spider_multiplexer
52
63
 
53
- begin
54
- boat.init(file_name, tp)
55
- rescue IOError => e
56
- BayLog.fatal(BayMessage.get(:INT_CANNOT_OPEN_LOG_FILE, file_name));
57
- BayLog.fatal_e(e);
64
+ when Harbor::MULTIPLEXER_TYPE_JOB
65
+ mpx = agt.job_multiplexer
66
+
67
+ else
68
+ raise Sink.new
58
69
  end
59
70
 
60
- @log_docker.loggers[agt.agent_id] = boat
71
+ st = RudderState.new(rd)
72
+ st.bytes_wrote = size
73
+ mpx.add_rudder_state(rd, st)
74
+
75
+ @log_docker.multiplexers[agt_id] = mpx
76
+ @log_docker.rudders[agt_id] = rd
61
77
  end
62
78
 
63
79
 
64
- def remove(agt)
65
- @log_docker.loggers.delete(agt.agent_id);
80
+ def remove(agt_id)
81
+ rd = @log_docker.rudders[agt_id]
82
+ @log_docker.multiplexers[agt_id].req_close(rd)
83
+ @log_docker.multiplexers[agt_id] = nil
84
+ @log_docker.rudders[agt_id] = nil
66
85
  end
67
86
  end
68
87
 
69
88
 
70
- LOG_WRITE_METHOD_SELECT = 1
71
- LOG_WRITE_METHOD_SPIN = 2
72
- LOG_WRITE_METHOD_TAXI = 3
73
- DEFAULT_LOG_WRITE_METHOD = LOG_WRITE_METHOD_TAXI
74
-
75
89
  class << self
76
90
  # Mapping table for format
77
91
  attr :log_item_map
@@ -91,14 +105,17 @@ module Baykit
91
105
  # Log items
92
106
  attr :log_items
93
107
 
94
- # Log write method
95
- attr :log_write_method
108
+ attr :rudders
109
+
110
+ # Multiplexer to write to file
111
+ attr :multiplexers
96
112
 
97
113
  def initialize
98
114
  @loggers = {}
99
115
  @format = nil
100
116
  @log_items = []
101
- @log_write_method = DEFAULT_LOG_WRITE_METHOD
117
+ @rudders = {}
118
+ @multiplexers = {}
102
119
  end
103
120
 
104
121
  def init(elm, parent)
@@ -130,17 +147,6 @@ module Baykit
130
147
  # Parse format
131
148
  compile(@format, @log_items, elm.file_name, elm.line_no)
132
149
 
133
- # Check log write method
134
- if @log_write_method == LOG_WRITE_METHOD_SELECT and !SysUtil.support_select_file()
135
- BayLog.warn(BayMessage.get(:CFG_LOG_WRITE_METHOD_SELECT_NOT_SUPPORTED))
136
- @log_write_method = LOG_WRITE_METHOD_TAXI
137
- end
138
-
139
- if @log_write_method == LOG_WRITE_METHOD_SPIN and !SysUtil.support_nonblock_file_write()
140
- BayLog.warn(BayMessage.get(:CFG_LOG_WRITE_METHOD_SPIN_NOT_SUPPORTED))
141
- @log_write_method = LOG_WRITE_METHOD_TAXI
142
- end
143
-
144
150
  GrandAgent.add_lifecycle_listener(AgentListener.new(self));
145
151
  end
146
152
 
@@ -148,17 +154,7 @@ module Baykit
148
154
  case kv.key.downcase
149
155
  when "format"
150
156
  @format = kv.value
151
- when "logwritemethod"
152
- case kv.value.downcase()
153
- when "select"
154
- @log_write_method = LOG_WRITE_METHOD_SELECT
155
- when "spin"
156
- @log_write_method = LOG_WRITE_METHOD_SPIN
157
- when "taxi"
158
- @log_write_method = LOG_WRITE_METHOD_TAXI
159
- else
160
- raise ConfigException.new(kv.file_name, kv.line_no, BayMessage.get(:CFG_INVALID_PARAMETER_VALUE, kv.value))
161
- end
157
+
162
158
  else
163
159
  return false
164
160
  end
@@ -178,17 +174,18 @@ module Baykit
178
174
 
179
175
  # If threre are message to write, write it
180
176
  if sb.length > 0
181
- get_logger(tour.ship.agent).log(sb)
177
+ @multiplexers[tour.ship.agent_id].req_write(
178
+ @rudders[tour.ship.agent_id],
179
+ sb,
180
+ nil,
181
+ "log",
182
+ nil
183
+ )
182
184
  end
183
185
  end
184
186
 
185
187
  private
186
188
 
187
- def get_logger(agt)
188
- return @loggers[agt.agent_id]
189
- end
190
-
191
-
192
189
 
193
190
  #
194
191
  # Compile format pattern
@@ -3,7 +3,7 @@ require 'ipaddr'
3
3
  require 'baykit/bayserver/http_exception'
4
4
  require 'baykit/bayserver/bcf/package'
5
5
  require 'baykit/bayserver/docker/permission'
6
- require 'baykit/bayserver/util/groups'
6
+ require 'baykit/bayserver/common/groups'
7
7
  require 'baykit/bayserver/util/headers'
8
8
  require 'baykit/bayserver/util/http_status'
9
9
  require 'baykit/bayserver/util/host_matcher'
@@ -20,6 +20,7 @@ module Baykit
20
20
  include Baykit::BayServer
21
21
  include Baykit::BayServer::Bcf
22
22
  include Baykit::BayServer::Util
23
+ include Baykit::BayServer::Common
23
24
 
24
25
  class CheckItem
25
26
  attr :matcher
@@ -30,8 +31,8 @@ module Baykit
30
31
  @admit = admit
31
32
  end
32
33
 
33
- def socket_admitted(skt)
34
- matcher.match_socket(skt) == @admit
34
+ def socket_admitted(rd)
35
+ matcher.match_socket(rd) == @admit
35
36
  end
36
37
 
37
38
  def tour_admitted(tur)
@@ -41,12 +42,12 @@ module Baykit
41
42
 
42
43
  module PermissionMatcher # interface
43
44
 
44
- def match_socket(skt)
45
- raise NotImplementedError()
45
+ def match_socket(rd)
46
+ raise NotImplementedError.new
46
47
  end
47
48
 
48
49
  def match_tour(tur)
49
- raise NotImplementedError()
50
+ raise NotImplementedError.new
50
51
  end
51
52
  end
52
53
 
@@ -61,8 +62,8 @@ module Baykit
61
62
  @mch = HostMatcher.new(hostPtn)
62
63
  end
63
64
 
64
- def match_socket(skt)
65
- return @mch.match(skt.remote_address.getnameinfo[0])
65
+ def match_socket(rd)
66
+ return @mch.match(rd.io.remote_address.getnameinfo[0])
66
67
  end
67
68
 
68
69
  def match_tour(tur)
@@ -80,8 +81,8 @@ module Baykit
80
81
  @mch = IpMatcher.new(ip_desc)
81
82
  end
82
83
 
83
- def match_socket(skt)
84
- return @mch.match(@mch.get_ip_addr(skt.remote_address.ip_address))
84
+ def match_socket(rd)
85
+ return @mch.match(rd.io.remote_address.ip_address)
85
86
  end
86
87
 
87
88
  def match_tour(tur)