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
@@ -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)