bayserver-core 3.0.3 → 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 (72) 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 +101 -93
  4. data/lib/baykit/bayserver/agent/letters/accepted_letter.rb +2 -2
  5. data/lib/baykit/bayserver/agent/letters/closed_letter.rb +2 -2
  6. data/lib/baykit/bayserver/agent/letters/connected_letter.rb +2 -2
  7. data/lib/baykit/bayserver/agent/letters/error_letter.rb +2 -2
  8. data/lib/baykit/bayserver/agent/letters/letter.rb +7 -3
  9. data/lib/baykit/bayserver/agent/letters/read_letter.rb +2 -2
  10. data/lib/baykit/bayserver/agent/letters/wrote_letter.rb +2 -2
  11. data/lib/baykit/bayserver/agent/monitor/grand_agent_monitor.rb +20 -22
  12. data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer.rb +44 -31
  13. data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer_base.rb +5 -0
  14. data/lib/baykit/bayserver/agent/multiplexer/multiplexer_base.rb +4 -4
  15. data/lib/baykit/bayserver/agent/multiplexer/plain_transporter.rb +2 -3
  16. data/lib/baykit/bayserver/agent/multiplexer/spider_multiplexer.rb +113 -59
  17. data/lib/baykit/bayserver/agent/multiplexer/spin_multiplexer.rb +22 -17
  18. data/lib/baykit/bayserver/agent/multiplexer/taxi_multiplexer.rb +17 -13
  19. data/lib/baykit/bayserver/bay_log.rb +20 -16
  20. data/lib/baykit/bayserver/bayserver.rb +8 -15
  21. data/lib/baykit/bayserver/common/cities.rb +1 -1
  22. data/lib/baykit/bayserver/common/inbound_ship.rb +1 -1
  23. data/lib/baykit/bayserver/common/inbound_ship_store.rb +0 -1
  24. data/lib/baykit/bayserver/{agent/multiplexer → common}/rudder_state.rb +43 -7
  25. data/lib/baykit/bayserver/common/rudder_state_store.rb +63 -0
  26. data/lib/baykit/bayserver/{agent/multiplexer → common}/transporter.rb +1 -3
  27. data/lib/baykit/bayserver/common/warp_ship.rb +4 -3
  28. data/lib/baykit/bayserver/{agent/multiplexer → common}/write_unit.rb +1 -3
  29. data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +0 -1
  30. data/lib/baykit/bayserver/docker/base/port_base.rb +5 -5
  31. data/lib/baykit/bayserver/docker/base/warp_base.rb +7 -4
  32. data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +25 -2
  33. data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +42 -26
  34. data/lib/baykit/bayserver/docker/harbor.rb +14 -0
  35. data/lib/baykit/bayserver/docker/send_file/file_content.rb +66 -0
  36. data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +113 -29
  37. data/lib/baykit/bayserver/docker/send_file/file_store.rb +117 -0
  38. data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +13 -5
  39. data/lib/baykit/bayserver/docker/send_file/send_file_ship.rb +11 -2
  40. data/lib/baykit/bayserver/docker/send_file/wait_file_ship.rb +92 -0
  41. data/lib/baykit/bayserver/mem_usage.rb +2 -0
  42. data/lib/baykit/bayserver/protocol/packet.rb +2 -1
  43. data/lib/baykit/bayserver/protocol/packet_part_accessor.rb +5 -5
  44. data/lib/baykit/bayserver/protocol/protocol_exception.rb +7 -1
  45. data/lib/baykit/bayserver/rudders/io_rudder.rb +2 -2
  46. data/lib/baykit/bayserver/rudders/rudder.rb +4 -0
  47. data/lib/baykit/bayserver/rudders/rudder_base.rb +21 -0
  48. data/lib/baykit/bayserver/tours/req_content_handler.rb +13 -13
  49. data/lib/baykit/bayserver/tours/tour.rb +1 -6
  50. data/lib/baykit/bayserver/tours/tour_req.rb +4 -8
  51. data/lib/baykit/bayserver/tours/tour_res.rb +1 -8
  52. data/lib/baykit/bayserver/util/cgi_util.rb +7 -2
  53. data/lib/baykit/bayserver/util/headers.rb +2 -2
  54. data/lib/baykit/bayserver/util/http_status.rb +7 -0
  55. data/lib/baykit/bayserver/util/http_util.rb +16 -0
  56. data/lib/baykit/bayserver/util/nio_selector.rb +103 -0
  57. data/lib/baykit/bayserver/util/rb_selector.rb +55 -0
  58. data/lib/baykit/bayserver/util/selector.rb +43 -80
  59. data/lib/baykit/bayserver/util/simple_buffer.rb +1 -1
  60. data/lib/baykit/bayserver/version.rb +1 -1
  61. metadata +16 -20
  62. data/lib/baykit/bayserver/agent/accept_handler.rb +0 -71
  63. data/lib/baykit/bayserver/agent/channel_listener.rb +0 -35
  64. data/lib/baykit/bayserver/agent/transporter/data_listener.rb +0 -38
  65. data/lib/baykit/bayserver/agent/transporter/package.rb +0 -0
  66. data/lib/baykit/bayserver/agent/transporter/spin_read_transporter.rb +0 -111
  67. data/lib/baykit/bayserver/agent/transporter/spin_write_transporter.rb +0 -125
  68. data/lib/baykit/bayserver/agent/transporter/transporter.rb +0 -332
  69. data/lib/baykit/bayserver/docker/built_in/log_boat.rb +0 -71
  70. data/lib/baykit/bayserver/tours/send_file_yacht.rb +0 -97
  71. data/lib/baykit/bayserver/watercraft/boat.rb +0 -43
  72. data/lib/baykit/bayserver/watercraft/yacht.rb +0 -42
@@ -21,9 +21,9 @@ module Baykit
21
21
  end
22
22
  def depart
23
23
  if @for_read
24
- @rudder_state.multiplexer.do_next_read(@rudder_state)
24
+ @rudder_state.multiplexer.do_next_read(@rudder_state.rudder)
25
25
  else
26
- @rudder_state.multiplexer.do_next_write(@rudder_state)
26
+ @rudder_state.multiplexer.do_next_write(@rudder_state.rudder)
27
27
  end
28
28
  end
29
29
 
@@ -40,6 +40,7 @@ module Baykit
40
40
  include Baykit::BayServer::Rudders
41
41
  include Baykit::BayServer::Util
42
42
  include Baykit::BayServer::Taxi
43
+ include Baykit::BayServer::Common
43
44
 
44
45
  def initialize(agt)
45
46
  super
@@ -87,7 +88,7 @@ module Baykit
87
88
  st = get_rudder_state(rd)
88
89
  BayLog.debug("%s reqWrite st=%s", @agent, st)
89
90
 
90
- if st == nil || st.closed
91
+ if st == nil
91
92
  BayLog.warn("%s Channel is closed: %s", @agent, rd)
92
93
  lis.call
93
94
  return
@@ -114,10 +115,10 @@ module Baykit
114
115
  end
115
116
 
116
117
  def req_close(rd)
118
+ BayLog.debug("%s reqClose rd=%s", @agent, rd);
119
+ close_rudder(rd)
117
120
  st = get_rudder_state(rd)
118
- BayLog.debug("%s reqClose st=%s", @agent, st);
119
- close_rudder(st)
120
- @agent.send_closed_letter(st, false)
121
+ @agent.send_closed_letter(st.id, rd, self, true)
121
122
  st.access
122
123
  end
123
124
 
@@ -155,22 +156,25 @@ module Baykit
155
156
  TaxiRunner.post(@agent.agent_id, TaxiForMpx.new(st, for_read))
156
157
  end
157
158
 
158
- def do_next_read(st)
159
- st.access
159
+ def do_next_read(rd)
160
+ st = get_rudder_state(rd)
161
+
160
162
  begin
161
163
  len = st.rudder.read(st.read_buf, st.buf_size)
162
164
  if len <= 0
163
165
  len = 0
164
166
  end
165
- @agent.send_read_letter(st, len, nil, true)
167
+ @agent.send_read_letter(st.id, rd, self, len, nil, true)
166
168
 
167
169
  rescue Exception => e
168
- @agent.send_error_letter(st, e, true)
170
+ @agent.send_error_letter(st.id, rd, self, e, true)
169
171
  end
170
172
  end
171
173
 
172
- def do_next_write(st)
174
+ def do_next_write(rd)
175
+ st = get_rudder_state(rd)
173
176
  st.access
177
+
174
178
  begin
175
179
  if st.write_queue.empty?
176
180
  raise Sink("%s write queue is empty", self)
@@ -183,10 +187,10 @@ module Baykit
183
187
  len = st.rudder.write(u.buf)
184
188
  u.buf.slice!(0, len)
185
189
  end
186
- @agent.send_wrote_letter(st, len, true)
190
+ @agent.send_wrote_letter(st.id, rd, self, len, true)
187
191
 
188
192
  rescue Exception => e
189
- @agent.send_error_letter(st, e, true)
193
+ @agent.send_error_letter(st.id, rd, self, e, true)
190
194
  end
191
195
  end
192
196
  end
@@ -81,6 +81,10 @@ module Baykit
81
81
  end
82
82
 
83
83
  def self.log(lvl, stack_idx, err, fmt, args)
84
+ if lvl < @log_level
85
+ return
86
+ end
87
+
84
88
  #pos = caller[1].split("/")[-1]
85
89
  apos = parse_caller(caller[1])
86
90
  if(!@full_path)
@@ -90,22 +94,20 @@ module Baykit
90
94
  #pos = caller[1]
91
95
 
92
96
  if fmt != nil
93
- if lvl >= @log_level
94
- begin
95
- if args == nil || args.length == 0
96
- msg = sprintf("%s", fmt)
97
- else
98
- msg = sprintf(fmt, *args)
99
- end
100
- rescue => e
101
- puts(e.class)
102
- puts(e.message + " " + pos)
103
- print_exception(e)
104
- msg = fmt
97
+ begin
98
+ if args == nil || args.length == 0
99
+ msg = sprintf("%s", fmt)
100
+ else
101
+ msg = sprintf(fmt, *args)
105
102
  end
106
-
107
- print("[#{Time.now}] #{LOG_LEVEL_NAME[lvl]}. #{msg} (at #{pos})\n")
103
+ rescue => e
104
+ puts(e.class)
105
+ puts(e.message + " " + pos)
106
+ print_exception(e)
107
+ msg = fmt
108
108
  end
109
+
110
+ print("[#{Time.now}] #{LOG_LEVEL_NAME[lvl]}. #{msg} (at #{pos})\n")
109
111
  end
110
112
 
111
113
  if err != nil
@@ -129,8 +131,10 @@ module Baykit
129
131
  end
130
132
 
131
133
  def self.print_exception err
132
- for s in err.backtrace
133
- puts "\t" + s
134
+ if err.backtrace != nil
135
+ for s in err.backtrace
136
+ puts "\t" + s
137
+ end
134
138
  end
135
139
  if err.cause
136
140
  puts "Caused by:"
@@ -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
@@ -214,7 +214,7 @@ module Baykit
214
214
  if keep_alive
215
215
  res_conn = tur.res.headers.get_connection()
216
216
  keep_alive = (res_conn == Headers::CONNECTION_KEEP_ALIVE) ||
217
- (res_conn == Headers::CONNECTION_UNKOWN)
217
+ (res_conn == Headers::CONNECTION_UNKNOWN)
218
218
  end
219
219
  if keep_alive
220
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
 
@@ -1,15 +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
24
  attr :read_buf
14
25
  attr :buf_size
15
26
  attr :write_queue
@@ -21,17 +32,19 @@ module Baykit
21
32
  attr :write_queue_lock
22
33
  attr :reading_lock
23
34
  attr :writing_lock
24
- attr_accessor :closed
25
35
  attr_accessor :finale
26
36
 
27
37
  attr_accessor :accepting
28
38
  attr_accessor :connecting
29
39
 
40
+ def initialize
41
+
42
+ end
30
43
 
31
- def initialize(rd, tp = nil, timeout_sec = 0)
44
+ def init(rd, tp = nil, timeout_sec = 0)
45
+ @id = RudderState.id_counter.next
32
46
  @rudder = rd
33
47
  @transporter = tp
34
- @closed = false
35
48
  @timeout_sec = timeout_sec
36
49
 
37
50
  if tp != nil
@@ -60,6 +73,30 @@ module Baykit
60
73
  return str
61
74
  end
62
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
+ #########################################
63
100
 
64
101
  def access
65
102
  @last_access_time = Time.now.tv_sec
@@ -69,7 +106,6 @@ module Baykit
69
106
  @finale = true
70
107
  end
71
108
 
72
- end
73
109
  end
74
110
  end
75
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
 
@@ -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
@@ -172,10 +172,10 @@ module Baykit
172
172
 
173
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
@@ -214,8 +214,9 @@ module Baykit
214
214
  def notify_error_to_owner_tour(status, msg)
215
215
  @lock.synchronize do
216
216
  @tour_map.keys.each do |warp_id|
217
+ BayLog.debug("%s wtur#%d notify error to owner", self, warp_id)
217
218
  tur = get_tour(warp_id)
218
- BayLog.debug("%s send error to owner: %s running=%s", self, tur, tur.running?)
219
+ BayLog.debug("%s wtur#%d send error to owner: %s running=%s", self, warp_id, tur, tur.running?)
219
220
  if tur.running? || tur.reading?
220
221
  begin
221
222
  tur.res.send_error(Tour::TOUR_ID_NOCHECK, status, msg)
@@ -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
@@ -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
@@ -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