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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/lib/baykit/bayserver/agent/command_receiver.rb +2 -0
  3. data/lib/baykit/bayserver/agent/grand_agent.rb +145 -133
  4. data/lib/baykit/bayserver/agent/letters/accepted_letter.rb +17 -0
  5. data/lib/baykit/bayserver/agent/letters/closed_letter.rb +14 -0
  6. data/lib/baykit/bayserver/agent/letters/connected_letter.rb +14 -0
  7. data/lib/baykit/bayserver/agent/letters/error_letter.rb +16 -0
  8. data/lib/baykit/bayserver/agent/letters/letter.rb +19 -0
  9. data/lib/baykit/bayserver/agent/letters/package.rb +9 -0
  10. data/lib/baykit/bayserver/agent/letters/read_letter.rb +20 -0
  11. data/lib/baykit/bayserver/agent/letters/wrote_letter.rb +17 -0
  12. data/lib/baykit/bayserver/agent/monitor/grand_agent_monitor.rb +49 -49
  13. data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer.rb +47 -32
  14. data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer_base.rb +5 -0
  15. data/lib/baykit/bayserver/agent/multiplexer/multiplexer_base.rb +12 -28
  16. data/lib/baykit/bayserver/agent/multiplexer/plain_transporter.rb +20 -5
  17. data/lib/baykit/bayserver/agent/multiplexer/spider_multiplexer.rb +125 -87
  18. data/lib/baykit/bayserver/agent/multiplexer/spin_multiplexer.rb +24 -19
  19. data/lib/baykit/bayserver/agent/multiplexer/taxi_multiplexer.rb +21 -15
  20. data/lib/baykit/bayserver/bay_log.rb +20 -16
  21. data/lib/baykit/bayserver/bayserver.rb +8 -15
  22. data/lib/baykit/bayserver/common/cities.rb +1 -1
  23. data/lib/baykit/bayserver/common/inbound_ship.rb +5 -45
  24. data/lib/baykit/bayserver/common/inbound_ship_store.rb +0 -1
  25. data/lib/baykit/bayserver/common/multiplexer.rb +5 -1
  26. data/lib/baykit/bayserver/{agent/multiplexer → common}/rudder_state.rb +42 -11
  27. data/lib/baykit/bayserver/common/rudder_state_store.rb +63 -0
  28. data/lib/baykit/bayserver/{agent/multiplexer → common}/transporter.rb +2 -4
  29. data/lib/baykit/bayserver/common/warp_ship.rb +12 -7
  30. data/lib/baykit/bayserver/{agent/multiplexer → common}/write_unit.rb +2 -4
  31. data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +0 -1
  32. data/lib/baykit/bayserver/docker/base/port_base.rb +5 -5
  33. data/lib/baykit/bayserver/docker/base/warp_base.rb +7 -4
  34. data/lib/baykit/bayserver/docker/built_in/built_in_city_docker.rb +1 -1
  35. data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +25 -2
  36. data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +43 -35
  37. data/lib/baykit/bayserver/docker/harbor.rb +14 -0
  38. data/lib/baykit/bayserver/docker/send_file/file_content.rb +66 -0
  39. data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +113 -29
  40. data/lib/baykit/bayserver/docker/send_file/file_store.rb +117 -0
  41. data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +13 -5
  42. data/lib/baykit/bayserver/docker/send_file/send_file_ship.rb +11 -2
  43. data/lib/baykit/bayserver/docker/send_file/wait_file_ship.rb +92 -0
  44. data/lib/baykit/bayserver/mem_usage.rb +2 -0
  45. data/lib/baykit/bayserver/protocol/packet.rb +2 -1
  46. data/lib/baykit/bayserver/protocol/packet_part_accessor.rb +5 -5
  47. data/lib/baykit/bayserver/protocol/protocol_exception.rb +7 -1
  48. data/lib/baykit/bayserver/rudders/io_rudder.rb +2 -2
  49. data/lib/baykit/bayserver/rudders/rudder.rb +4 -0
  50. data/lib/baykit/bayserver/rudders/rudder_base.rb +21 -0
  51. data/lib/baykit/bayserver/tours/req_content_handler.rb +13 -13
  52. data/lib/baykit/bayserver/tours/tour.rb +18 -13
  53. data/lib/baykit/bayserver/tours/tour_req.rb +13 -15
  54. data/lib/baykit/bayserver/tours/tour_res.rb +42 -19
  55. data/lib/baykit/bayserver/util/cgi_util.rb +7 -2
  56. data/lib/baykit/bayserver/util/headers.rb +2 -2
  57. data/lib/baykit/bayserver/util/http_status.rb +7 -0
  58. data/lib/baykit/bayserver/util/http_util.rb +16 -0
  59. data/lib/baykit/bayserver/util/nio_selector.rb +103 -0
  60. data/lib/baykit/bayserver/util/rb_selector.rb +55 -0
  61. data/lib/baykit/bayserver/util/selector.rb +43 -80
  62. data/lib/baykit/bayserver/util/simple_buffer.rb +1 -1
  63. data/lib/baykit/bayserver/version.rb +1 -1
  64. metadata +24 -21
  65. data/lib/baykit/bayserver/agent/accept_handler.rb +0 -71
  66. data/lib/baykit/bayserver/agent/channel_listener.rb +0 -35
  67. data/lib/baykit/bayserver/agent/letter.rb +0 -30
  68. data/lib/baykit/bayserver/agent/transporter/data_listener.rb +0 -38
  69. data/lib/baykit/bayserver/agent/transporter/package.rb +0 -0
  70. data/lib/baykit/bayserver/agent/transporter/spin_read_transporter.rb +0 -111
  71. data/lib/baykit/bayserver/agent/transporter/spin_write_transporter.rb +0 -125
  72. data/lib/baykit/bayserver/agent/transporter/transporter.rb +0 -332
  73. data/lib/baykit/bayserver/docker/built_in/log_boat.rb +0 -71
  74. data/lib/baykit/bayserver/tours/send_file_yacht.rb +0 -97
  75. data/lib/baykit/bayserver/watercraft/boat.rb +0 -43
  76. data/lib/baykit/bayserver/watercraft/yacht.rb +0 -42
@@ -28,6 +28,7 @@ require 'baykit/bayserver/protocol/protocol_handler_store'
28
28
 
29
29
  require 'baykit/bayserver/docker/package'
30
30
  require 'baykit/bayserver/common/inbound_ship_store'
31
+ require 'baykit/bayserver/common/rudder_state_store'
31
32
  require 'baykit/bayserver/common/warp_ship_store'
32
33
 
33
34
  require 'baykit/bayserver/util/locale'
@@ -52,7 +53,6 @@ module Baykit
52
53
  include Baykit::BayServer::Agent::Signal
53
54
  include Baykit::BayServer::Agent::Monitor
54
55
  include Baykit::BayServer::Protocol
55
- include Baykit::BayServer::WaterCraft
56
56
  include Baykit::BayServer::Tours
57
57
  include Baykit::BayServer::Docker
58
58
  include Baykit::BayServer::Docker::Base
@@ -249,6 +249,7 @@ module Baykit
249
249
 
250
250
  # Init stores, memory usage managers
251
251
  PacketStore.init()
252
+ RudderStateStore.init()
252
253
  InboundShipStore.init()
253
254
  ProtocolHandlerStore.init()
254
255
  TourStore.init(TourStore::MAX_TOURS)
@@ -281,7 +282,7 @@ module Baykit
281
282
  end
282
283
  end
283
284
 
284
- def self.open_ports(anchored_port_map, unanchored_port_map)
285
+ def self.open_ports()
285
286
  @ports.each do |dkr|
286
287
  # open port
287
288
  adr = dkr.address()
@@ -312,8 +313,6 @@ module Baykit
312
313
 
313
314
  skt.listen(0)
314
315
 
315
- #skt = port_dkr.new_server_socket skt
316
- anchored_port_map[skt] = dkr
317
316
  else
318
317
  # Open UDP port
319
318
  BayLog.info(BayMessage.get(:MSG_OPENING_UDP_PORT, dkr.host, dkr.port, dkr.protocol()))
@@ -328,23 +327,20 @@ module Baykit
328
327
  BayLog.error_e(e, BayMessage.get(:INT_CANNOT_OPEN_PORT, dkr.host, dkr.port, e))
329
328
  raise e
330
329
  end
331
- unanchored_port_map[skt] = dkr
330
+ @unanchorable_port_map[IORudder.new(skt)] = dkr
332
331
 
333
332
  end
334
333
  end
335
334
  end
336
335
 
337
336
  def self.parent_start()
338
- anchored_port_map = {}
339
- unanchored_port_map = {}
340
-
341
337
 
342
338
  if @harbor.multi_core
343
339
  if !SysUtil.run_on_windows()
344
- open_ports(anchored_port_map, unanchored_port_map)
340
+ open_ports()
345
341
  end
346
342
  else
347
- open_ports(anchored_port_map, unanchored_port_map)
343
+ open_ports()
348
344
 
349
345
  # Thread mode
350
346
  GrandAgent.init(
@@ -355,7 +351,7 @@ module Baykit
355
351
  end
356
352
 
357
353
  SignalAgent.init(@harbor.control_port)
358
- GrandAgentMonitor.init(@harbor.grand_agents, anchored_port_map)
354
+ GrandAgentMonitor.init(@harbor.grand_agents)
359
355
  create_pid_file(Process.pid)
360
356
  GrandAgentMonitor.join
361
357
  end
@@ -364,11 +360,8 @@ module Baykit
364
360
 
365
361
  invoke_runners()
366
362
 
367
- @anchorable_port_map = {}
368
- unanchored_port_map = {}
369
-
370
363
  if(SysUtil.run_on_windows())
371
- open_ports(@anchorable_port_map, unanchored_port_map)
364
+ open_ports()
372
365
  else
373
366
  @derived_port_nos.each do |no|
374
367
  # Rebuild server socket
@@ -1,6 +1,6 @@
1
1
  module Baykit
2
2
  module BayServer
3
- module Util
3
+ module Common
4
4
  class Cities
5
5
 
6
6
  attr :any_city
@@ -166,51 +166,11 @@ module Baykit
166
166
  def send_headers(check_id, tur)
167
167
  check_ship_id(check_id)
168
168
 
169
- if tur.zombie? || tur.aborted?
170
- # Don't send peer any data
171
- BayLog.debug("%s zombie tur", tur)
172
- return
173
- end
174
-
175
- handled = false
176
- if !tur.error_handling && tur.res.headers.status >= 400
177
- trouble = BayServer.harbor.trouble
178
- if trouble != nil
179
- cmd = trouble.find(tur.res.headers.status)
180
- if cmd != nil
181
- err_tour = get_error_tour
182
- err_tour.req.uri = cmd.target
183
- tur.req.headers.copy_to(err_tour.req.headers)
184
- tur.res.headers.copy_to(err_tour.res.headers)
185
- err_tour.req.remote_port = tur.req.remote_port
186
- err_tour.req.remote_address = tur.req.remote_address
187
- err_tour.req.server_address = tur.req.server_address
188
- err_tour.req.server_port = tur.req.server_port
189
- err_tour.req.server_name = tur.req.server_name
190
- err_tour.res.header_sent = tur.res.header_sent
191
- tur.change_state(Tour::TOUR_ID_NOCHECK, Tour::TourState::ZOMBIE)
192
- case cmd.method
193
- when :GUIDE
194
- err_tour.go
195
- when :TEXT
196
- @protocol_handler.send_headers(err_tour)
197
- data = cmd.target
198
- err_tour.res.send_content(Tour::TOUR_ID_NOCHECK, data, 0, data.length)
199
- err_tour.end_content(Tour::TOUR_ID_NOCHECK)
200
- when :REROUTE
201
- err_tour.res.send_http_exception(Tour::TOUR_ID_NOCHECK, HttpException.moved_temp(cmd.target))
202
- end
203
- handled = true
204
- end
205
- end
206
- end
207
- if !handled
208
- @port_docker.additional_headers.each do |nv|
209
- tur.res.headers.add(nv[0], nv[1])
210
- end
211
- BayLog.debug("%s send_res_headers", tur)
212
- tour_handler.send_res_headers(tur)
169
+ @port_docker.additional_headers.each do |nv|
170
+ tur.res.headers.add(nv[0], nv[1])
213
171
  end
172
+ BayLog.debug("%s send_res_headers", tur)
173
+ tour_handler.send_res_headers(tur)
214
174
  end
215
175
 
216
176
  def send_redirect(check_id, tur, status, location)
@@ -254,7 +214,7 @@ module Baykit
254
214
  if keep_alive
255
215
  res_conn = tur.res.headers.get_connection()
256
216
  keep_alive = (res_conn == Headers::CONNECTION_KEEP_ALIVE) ||
257
- (res_conn == Headers::CONNECTION_UNKOWN)
217
+ (res_conn == Headers::CONNECTION_UNKNOWN)
258
218
  end
259
219
  if keep_alive
260
220
  if tur.res.headers.content_length() < 0
@@ -11,7 +11,6 @@ module Baykit
11
11
  module BayServer
12
12
  module Common
13
13
  class InboundShipStore < Baykit::BayServer::Util::ObjectStore
14
- include Baykit::BayServer::WaterCraft
15
14
  include Baykit::BayServer::Util
16
15
  include Baykit::BayServer::Agent
17
16
 
@@ -9,6 +9,10 @@ module Baykit
9
9
  raise NotImplementedError.new
10
10
  end
11
11
 
12
+ def remove_rudder_state(rd)
13
+ raise NotImplementedError.new
14
+ end
15
+
12
16
  def get_rudder_state(rd)
13
17
  raise NotImplementedError.new
14
18
  end
@@ -29,7 +33,7 @@ module Baykit
29
33
  raise NotImplementedError.new
30
34
  end
31
35
 
32
- def req_write(rd, buf, adr, tag, lis)
36
+ def req_write(rd, buf, adr, tag, &lis)
33
37
  raise NotImplementedError.new
34
38
  end
35
39
 
@@ -1,16 +1,26 @@
1
+ require 'baykit/bayserver/util/reusable'
2
+ require 'baykit/bayserver/util/counter'
1
3
 
2
4
  module Baykit
3
5
  module BayServer
4
- module Agent
5
- module Multiplexer
6
+ module Common
6
7
  class RudderState
8
+ include Baykit::BayServer::Util::Reusable # implements
9
+
10
+ include Baykit::BayServer::Util
11
+ class << self
12
+ attr :id_counter
13
+ end
14
+ @id_counter = Counter.new
15
+
16
+ attr :id
17
+
7
18
  attr :rudder
8
19
  attr :transporter
9
20
  attr_accessor :multiplexer
10
21
 
11
22
  attr :last_access_time
12
23
  attr_accessor :closing
13
-
14
24
  attr :read_buf
15
25
  attr :buf_size
16
26
  attr :write_queue
@@ -22,17 +32,19 @@ module Baykit
22
32
  attr :write_queue_lock
23
33
  attr :reading_lock
24
34
  attr :writing_lock
25
- attr_accessor :closed
26
35
  attr_accessor :finale
27
36
 
28
37
  attr_accessor :accepting
29
38
  attr_accessor :connecting
30
39
 
40
+ def initialize
31
41
 
32
- def initialize(rd, tp = nil, timeout_sec = 0)
42
+ end
43
+
44
+ def init(rd, tp = nil, timeout_sec = 0)
45
+ @id = RudderState.id_counter.next
33
46
  @rudder = rd
34
47
  @transporter = tp
35
- @closed = false
36
48
  @timeout_sec = timeout_sec
37
49
 
38
50
  if tp != nil
@@ -46,7 +58,6 @@ module Baykit
46
58
 
47
59
  @accepting = false
48
60
  @connecting = false
49
- @closing = false
50
61
  @write_queue = []
51
62
  @write_queue_lock = Mutex::new
52
63
  @reading_lock = Mutex::new
@@ -59,12 +70,33 @@ module Baykit
59
70
 
60
71
  def to_s
61
72
  str = "st(rd=#{@rudder} mpx=#{@multiplexer} tp=#{@transporter})"
62
- if @closing
63
- str += " closing";
64
- end
65
73
  return str
66
74
  end
67
75
 
76
+ #########################################
77
+ # Implements Reusable
78
+ #########################################
79
+ def reset()
80
+ @id = 0
81
+ @rudder = nil
82
+ @transporter = nil
83
+ @multiplexer = nil
84
+
85
+ @last_access_time = 0
86
+ @closing = false
87
+ @read_buf.clear
88
+ @write_queue = []
89
+ @bytes_read = 0
90
+ @bytes_wrote = 0
91
+ @finale = false
92
+ @reading = false
93
+ @writing = false
94
+ @timeout_sec = 0
95
+ end
96
+
97
+ #########################################
98
+ # Custom methods
99
+ #########################################
68
100
 
69
101
  def access
70
102
  @last_access_time = Time.now.tv_sec
@@ -74,7 +106,6 @@ module Baykit
74
106
  @finale = true
75
107
  end
76
108
 
77
- end
78
109
  end
79
110
  end
80
111
  end
@@ -0,0 +1,63 @@
1
+ require 'baykit/bayserver/agent/grand_agent'
2
+ require 'baykit/bayserver/agent/lifecycle_listener'
3
+
4
+ require 'baykit/bayserver/common/rudder_state'
5
+
6
+ require 'baykit/bayserver/util/object_store'
7
+ require 'baykit/bayserver/util/string_util'
8
+
9
+ module Baykit
10
+ module BayServer
11
+ module Common
12
+ class RudderStateStore < Baykit::BayServer::Util::ObjectStore
13
+ include Baykit::BayServer::Util
14
+ include Baykit::BayServer::Agent
15
+ class AgentListener
16
+ include Baykit::BayServer::Agent::LifecycleListener # implements
17
+
18
+ def add(agt_id)
19
+ RudderStateStore.stores[agt_id] = RudderStateStore.new();
20
+ end
21
+
22
+ def remove(agt_id)
23
+ RudderStateStore.stores.delete(agt_id);
24
+ end
25
+ end
26
+
27
+ class << self
28
+ # Agent id => InboundShipStore
29
+ attr :stores
30
+ end
31
+ @stores = {}
32
+
33
+
34
+ def initialize
35
+ super
36
+ @factory = -> { RudderState.new() }
37
+ end
38
+
39
+ #
40
+ # print memory usage
41
+ #
42
+ def print_usage(indent)
43
+ BayLog.info("%sRudderStateStore Usage:", StringUtil.indent(indent))
44
+ super(indent+1)
45
+ end
46
+
47
+
48
+ ######################################################
49
+ # class methods
50
+ ######################################################
51
+ def self.init()
52
+ GrandAgent.add_lifecycle_listener(AgentListener.new())
53
+ end
54
+
55
+ def self.get_store(agent_id)
56
+ return @stores[agent_id]
57
+ end
58
+
59
+ end
60
+ end
61
+ end
62
+ end
63
+
@@ -2,8 +2,7 @@ require 'baykit/bayserver/util/reusable'
2
2
 
3
3
  module Baykit
4
4
  module BayServer
5
- module Agent
6
- module Multiplexer
5
+ module Common
7
6
  module Transporter # interface
8
7
  include Baykit::BayServer::Util::Reusable # implements
9
8
 
@@ -11,7 +10,7 @@ module Baykit
11
10
  raise NotImplementedError.new
12
11
  end
13
12
 
14
- def on_connect(rd)
13
+ def on_connected(rd)
15
14
  raise NotImplementedError.new
16
15
  end
17
16
 
@@ -55,7 +54,6 @@ module Baykit
55
54
  raise NotImplementedError.new
56
55
  end
57
56
  end
58
- end
59
57
  end
60
58
  end
61
59
  end
@@ -170,16 +170,20 @@ module Baykit
170
170
  end
171
171
  end
172
172
 
173
- def end_warp_tour(tur)
173
+ def end_warp_tour(tur, keep)
174
174
  wdat = WarpData.get(tur)
175
- BayLog.debug("%s end warp tour: started=%s ended=%s", tur, wdat.started, wdat.ended)
175
+ BayLog.debug("%s end warp tour: wtur#%d started=%s ended=%s", tur, wdat.warp_id, wdat.started, wdat.ended)
176
176
 
177
177
  if(!@tour_map.include?(wdat.warp_id))
178
- raise Sink.new("%s WarpId not in tourMap: %d", tur, wdat.warp_id);
178
+ raise Sink.new("%s WarpId not in tourMap: wture#%d", tur, wdat.warp_id);
179
179
  else
180
180
  @tour_map.delete wdat.warp_id
181
181
  end
182
- @docker.keep(self)
182
+
183
+ if keep
184
+ BayLog.debug("%s keep warp ship", self)
185
+ @docker.keep(self)
186
+ end
183
187
  end
184
188
 
185
189
  def notify_service_unavailable(msg)
@@ -197,7 +201,7 @@ module Baykit
197
201
  end
198
202
 
199
203
  if must
200
- raise Sink.new("%s warp tours not found: id=%d", self, warp_id)
204
+ raise Sink.new("%s warp tour not found: id=%d", self, warp_id)
201
205
  else
202
206
  nil
203
207
  end
@@ -210,9 +214,10 @@ module Baykit
210
214
  def notify_error_to_owner_tour(status, msg)
211
215
  @lock.synchronize do
212
216
  @tour_map.keys.each do |warp_id|
217
+ BayLog.debug("%s wtur#%d notify error to owner", self, warp_id)
213
218
  tur = get_tour(warp_id)
214
- BayLog.debug("%s send error to owner: %s running=%s", self, tur, tur.running?)
215
- if tur.running?
219
+ BayLog.debug("%s wtur#%d send error to owner: %s running=%s", self, warp_id, tur, tur.running?)
220
+ if tur.running? || tur.reading?
216
221
  begin
217
222
  tur.res.send_error(Tour::TOUR_ID_NOCHECK, status, msg)
218
223
  rescue Exception => e
@@ -2,8 +2,7 @@ require 'baykit/bayserver/util/reusable'
2
2
 
3
3
  module Baykit
4
4
  module BayServer
5
- module Agent
6
- module Multiplexer
5
+ module Common
7
6
  class WriteUnit
8
7
 
9
8
  attr :buf
@@ -11,7 +10,7 @@ module Baykit
11
10
  attr :tag
12
11
  attr :listener
13
12
 
14
- def initialize(buf, adr, tag, lis)
13
+ def initialize(buf, adr, tag, &lis)
15
14
  @buf = buf
16
15
  @adr = adr
17
16
  @tag = tag
@@ -24,7 +23,6 @@ module Baykit
24
23
  end
25
24
  end
26
25
  end
27
- end
28
26
  end
29
27
  end
30
28
  end
@@ -1,5 +1,4 @@
1
1
  require 'baykit/bayserver/agent/next_socket_action'
2
- require 'baykit/bayserver/agent/transporter/data_listener'
3
2
  require 'baykit/bayserver/ships/ship'
4
3
  require 'baykit/bayserver/tours/package'
5
4
 
@@ -1,6 +1,5 @@
1
1
  require 'baykit/bayserver/protocol/protocol_handler_store'
2
2
  require 'baykit/bayserver/bcf/package'
3
- require 'baykit/bayserver/agent/multiplexer/plain_transporter'
4
3
  require 'baykit/bayserver/rudders/io_rudder'
5
4
  require 'baykit/bayserver/util/object_store'
6
5
  require 'baykit/bayserver/util/object_factory'
@@ -8,6 +7,7 @@ require 'baykit/bayserver/util/object_factory'
8
7
  require 'baykit/bayserver/docker/port'
9
8
  require 'baykit/bayserver/docker/base/docker_base'
10
9
  require 'baykit/bayserver/common/inbound_ship_store'
10
+ require 'baykit/bayserver/agent/multiplexer/plain_transporter'
11
11
 
12
12
  module Baykit
13
13
  module BayServer
@@ -21,7 +21,6 @@ module Baykit
21
21
  include Baykit::BayServer::Agent::Multiplexer
22
22
  include Baykit::BayServer::Docker
23
23
  include Baykit::BayServer::Docker::Base
24
- include Baykit::BayServer::WaterCraft
25
24
  include Baykit::BayServer::Protocol
26
25
  include Baykit::BayServer::Rudders
27
26
  include Baykit::BayServer::Util
@@ -152,8 +151,8 @@ module Baykit
152
151
  raise ConfigException.new(kv.file_name, kv.line_no, BayMessage.get(:CFG_INVALID_PARAMETER_VALUE, kv.value))
153
152
  end
154
153
 
155
- name = kv.value[0 .. idx].strip()
156
- value = kv.value[idx+1 .. -1].strip()
154
+ name = kv.value[0, idx].strip
155
+ value = kv.value[idx+1, kv.value.length].strip
157
156
  @additional_headers << [name, value]
158
157
 
159
158
  else
@@ -218,7 +217,8 @@ module Baykit
218
217
  proto_hnd = PortBase.get_protocol_handler_store(protocol(), agt_id).rent()
219
218
  sip.init_inbound(rd, agt_id, tp, self, proto_hnd)
220
219
 
221
- st = RudderState.new(rd, tp)
220
+ st = RudderStateStore.get_store(agt_id).rent()
221
+ st.init(rd, tp)
222
222
  agt.net_multiplexer.add_rudder_state(rd, st)
223
223
  agt.net_multiplexer.req_read(rd)
224
224
  end
@@ -2,11 +2,11 @@ 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
5
  require 'baykit/bayserver/docker/warp'
7
6
  require 'baykit/bayserver/docker/base/club_base'
8
7
  require 'baykit/bayserver/common/warp_data'
9
8
  require 'baykit/bayserver/common/warp_ship_store'
9
+ require 'baykit/bayserver/common/rudder_state'
10
10
 
11
11
  module Baykit
12
12
  module BayServer
@@ -20,6 +20,7 @@ module Baykit
20
20
  include Baykit::BayServer::Protocol
21
21
  include Baykit::BayServer::Util
22
22
  include Baykit::BayServer::Rudders
23
+ include Baykit::BayServer::Common
23
24
 
24
25
  class AgentListener
25
26
  include Baykit::BayServer::Agent::LifecycleListener # implements
@@ -214,13 +215,15 @@ module Baykit
214
215
  wsip.start_warp_tour(tur)
215
216
 
216
217
  if need_connect
217
- agt.net_multiplexer.add_rudder_state(wsip.rudder, RudderState.new(wsip.rudder, tp))
218
+ st = RudderStateStore.get_store(agt.agent_id).rent()
219
+ st.init(wsip.rudder, tp)
220
+ agt.net_multiplexer.add_rudder_state(wsip.rudder, st)
218
221
  agt.net_multiplexer.get_transporter(wsip.rudder).req_connect(wsip.rudder, @host_addr[1])
219
222
  end
220
223
 
221
224
  rescue SystemCallError => e
222
- wsip.end_warp_tour(tur)
223
- raise e
225
+ BayLog.error_e(e, "%s Error on starting warp tour", wsip)
226
+ raise HttpException.new(HttpStatus::INTERNAL_SERVER_ERROR, "%s", e)
224
227
  rescue HttpException => e
225
228
  raise e
226
229
  end
@@ -155,7 +155,7 @@ module Baykit
155
155
  @log_list.each do |dkr|
156
156
  begin
157
157
  dkr.log(tur)
158
- rescue => e
158
+ rescue IOError => e
159
159
  BayLog.error_e(e)
160
160
  end
161
161
  end
@@ -40,6 +40,9 @@ module Baykit
40
40
  DEFAULT_CGI_MULTIPLEXER = MULTIPLEXER_TYPE_SPIDER
41
41
  DEFAULT_RECIPIENT = RECIPIENT_TYPE_SPIDER
42
42
  DEFAULT_PID_FILE = "bayserver.pid"
43
+ DEFAULT_ENABLE_CACHE = false
44
+ DEFAULT_CACHE_LIFESPAN_SEC = 60
45
+ DEFAULT_CACHE_SIZE_MB = 32
43
46
 
44
47
  # Default charset
45
48
  attr :charset
@@ -107,6 +110,14 @@ module Baykit
107
110
  # PID file name
108
111
  attr :pid_file
109
112
 
113
+ # True if cache is enabled
114
+ attr :enable_cache
115
+
116
+ # Lifespan seconds of cache
117
+ attr :cache_lifespan_sec
118
+
119
+ # Cache size
120
+ attr :cache_size_mb
110
121
 
111
122
  def initialize
112
123
  @grand_agents = DEFAULT_SHIP_AGENTS
@@ -128,6 +139,8 @@ module Baykit
128
139
  @cgi_multiplexer = DEFAULT_CGI_MULTIPLEXER
129
140
  @recipient = DEFAULT_RECIPIENT
130
141
  @pid_file = DEFAULT_PID_FILE
142
+ @cache_lifespan_sec = DEFAULT_CACHE_LIFESPAN_SEC
143
+ @cache_size_mb = DEFAULT_CACHE_SIZE_MB
131
144
  end
132
145
 
133
146
  ######################
@@ -182,8 +195,8 @@ module Baykit
182
195
  @log_multiplexer = DEFAULT_LOG_MULTIPLEXER
183
196
  end
184
197
 
185
- if @log_multiplexer == MULTIPLEXER_TYPE_SPIN ||
186
- @log_multiplexer == MULTIPLEXER_TYPE_PIGEON
198
+ if @cgi_multiplexer == MULTIPLEXER_TYPE_SPIN ||
199
+ @cgi_multiplexer == MULTIPLEXER_TYPE_PIGEON
187
200
  BayLog.warn(
188
201
  BayMessage.get(
189
202
  :CFG_CGI_MULTIPLEXER_NOT_SUPPORTED,
@@ -296,6 +309,16 @@ module Baykit
296
309
 
297
310
  when "pidfile"
298
311
  @pid_file = kv.value
312
+
313
+ when "enablecache"
314
+ @enable_cache = StringUtil.parse_bool(kv.value)
315
+
316
+ when "cachelifespan"
317
+ @cache_lifespan_sec = kv.value.to_i
318
+
319
+ when "cachesize"
320
+ @cache_size_mb = kv.value.to_i
321
+
299
322
  else
300
323
  return false
301
324
  end