bayserver-core 2.3.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/lib/baykit/bayserver/agent/accept_handler.rb +0 -26
  3. data/lib/baykit/bayserver/agent/channel_listener.rb +6 -6
  4. data/lib/baykit/bayserver/agent/command_receiver.rb +97 -38
  5. data/lib/baykit/bayserver/agent/grand_agent.rb +444 -134
  6. data/lib/baykit/bayserver/agent/letter.rb +30 -0
  7. data/lib/baykit/bayserver/agent/lifecycle_listener.rb +9 -7
  8. data/lib/baykit/bayserver/agent/monitor/grand_agent_monitor.rb +298 -0
  9. data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer.rb +257 -0
  10. data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer_base.rb +52 -0
  11. data/lib/baykit/bayserver/agent/multiplexer/multiplexer_base.rb +150 -0
  12. data/lib/baykit/bayserver/agent/multiplexer/plain_transporter.rb +129 -0
  13. data/lib/baykit/bayserver/agent/multiplexer/rudder_state.rb +81 -0
  14. data/lib/baykit/bayserver/agent/multiplexer/secure_transporter.rb +50 -0
  15. data/lib/baykit/bayserver/agent/multiplexer/spider_multiplexer.rb +561 -0
  16. data/lib/baykit/bayserver/agent/multiplexer/spin_multiplexer.rb +311 -0
  17. data/lib/baykit/bayserver/agent/multiplexer/taxi_multiplexer.rb +194 -0
  18. data/lib/baykit/bayserver/agent/multiplexer/transporter.rb +61 -0
  19. data/lib/baykit/bayserver/agent/multiplexer/write_unit.rb +30 -0
  20. data/lib/baykit/bayserver/agent/non_blocking_handler.rb +0 -319
  21. data/lib/baykit/bayserver/agent/signal/signal_agent.rb +2 -1
  22. data/lib/baykit/bayserver/agent/timer_handler.rb +1 -1
  23. data/lib/baykit/bayserver/agent/transporter/data_listener.rb +7 -7
  24. data/lib/baykit/bayserver/agent/transporter/package.rb +0 -3
  25. data/lib/baykit/bayserver/agent/transporter/transporter.rb +5 -139
  26. data/lib/baykit/bayserver/bay_log.rb +1 -0
  27. data/lib/baykit/bayserver/bayserver.rb +32 -28
  28. data/lib/baykit/bayserver/{util → common}/groups.rb +1 -1
  29. data/lib/baykit/bayserver/common/inbound_handler.rb +12 -0
  30. data/lib/baykit/bayserver/{docker/base → common}/inbound_ship.rb +94 -19
  31. data/lib/baykit/bayserver/{docker/base → common}/inbound_ship_store.rb +7 -9
  32. data/lib/baykit/bayserver/common/multiplexer.rb +98 -0
  33. data/lib/baykit/bayserver/common/postpone.rb +15 -0
  34. data/lib/baykit/bayserver/common/read_only_ship.rb +42 -0
  35. data/lib/baykit/bayserver/common/recipient.rb +24 -0
  36. data/lib/baykit/bayserver/common/vehicle.rb +24 -0
  37. data/lib/baykit/bayserver/common/vehicle_runner.rb +127 -0
  38. data/lib/baykit/bayserver/{docker/warp → common}/warp_data.rb +18 -10
  39. data/lib/baykit/bayserver/common/warp_handler.rb +27 -0
  40. data/lib/baykit/bayserver/{docker/warp → common}/warp_ship.rb +107 -27
  41. data/lib/baykit/bayserver/{docker/warp → common}/warp_ship_store.rb +3 -8
  42. data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +2 -2
  43. data/lib/baykit/bayserver/docker/base/port_base.rb +59 -27
  44. data/lib/baykit/bayserver/docker/{warp/warp_docker.rb → base/warp_base.rb} +43 -50
  45. data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +118 -31
  46. data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +60 -63
  47. data/lib/baykit/bayserver/docker/built_in/built_in_permission_docker.rb +11 -10
  48. data/lib/baykit/bayserver/docker/built_in/built_in_secure_docker.rb +13 -4
  49. data/lib/baykit/bayserver/docker/city.rb +27 -13
  50. data/lib/baykit/bayserver/docker/club.rb +8 -8
  51. data/lib/baykit/bayserver/docker/docker.rb +9 -1
  52. data/lib/baykit/bayserver/docker/harbor.rb +184 -22
  53. data/lib/baykit/bayserver/docker/permission.rb +7 -6
  54. data/lib/baykit/bayserver/docker/port.rb +39 -11
  55. data/lib/baykit/bayserver/docker/secure.rb +11 -9
  56. data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +99 -4
  57. data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +6 -2
  58. data/lib/baykit/bayserver/docker/send_file/send_file_ship.rb +92 -0
  59. data/lib/baykit/bayserver/docker/town.rb +31 -15
  60. data/lib/baykit/bayserver/docker/trouble.rb +17 -5
  61. data/lib/baykit/bayserver/docker/warp.rb +34 -0
  62. data/lib/baykit/bayserver/mem_usage.rb +9 -9
  63. data/lib/baykit/bayserver/protocol/command_packer.rb +1 -8
  64. data/lib/baykit/bayserver/protocol/packet_packer.rb +7 -11
  65. data/lib/baykit/bayserver/protocol/packet_store.rb +4 -4
  66. data/lib/baykit/bayserver/protocol/protocol_handler.rb +26 -8
  67. data/lib/baykit/bayserver/protocol/protocol_handler_store.rb +5 -5
  68. data/lib/baykit/bayserver/rudders/io_rudder.rb +62 -0
  69. data/lib/baykit/bayserver/rudders/rudder.rb +29 -0
  70. data/lib/baykit/bayserver/{watercraft → ships}/ship.rb +65 -41
  71. data/lib/baykit/bayserver/taxi/taxi.rb +15 -10
  72. data/lib/baykit/bayserver/taxi/taxi_runner.rb +9 -94
  73. data/lib/baykit/bayserver/tours/read_file_taxi.rb +2 -2
  74. data/lib/baykit/bayserver/tours/req_content_handler.rb +16 -13
  75. data/lib/baykit/bayserver/tours/tour.rb +2 -2
  76. data/lib/baykit/bayserver/tours/tour_handler.rb +36 -0
  77. data/lib/baykit/bayserver/tours/tour_req.rb +14 -24
  78. data/lib/baykit/bayserver/tours/tour_res.rb +5 -89
  79. data/lib/baykit/bayserver/tours/tour_store.rb +5 -5
  80. data/lib/baykit/bayserver/train/train_runner.rb +17 -13
  81. data/lib/baykit/bayserver/util/data_consume_listener.rb +1 -1
  82. data/lib/baykit/bayserver/util/executor_service.rb +11 -7
  83. data/lib/baykit/bayserver/util/ip_matcher.rb +9 -39
  84. data/lib/baykit/bayserver/util/locale.rb +1 -1
  85. data/lib/baykit/bayserver/util/selector.rb +24 -5
  86. data/lib/baykit/bayserver/util/sys_util.rb +6 -6
  87. data/lib/baykit/bayserver/version.rb +1 -1
  88. metadata +37 -18
  89. data/lib/baykit/bayserver/agent/grand_agent_monitor.rb +0 -231
  90. data/lib/baykit/bayserver/agent/transporter/plain_transporter.rb +0 -55
  91. data/lib/baykit/bayserver/agent/transporter/secure_transporter.rb +0 -81
  92. data/lib/baykit/bayserver/docker/base/inbound_handler.rb +0 -42
  93. data/lib/baykit/bayserver/docker/warp/package.rb +0 -4
  94. data/lib/baykit/bayserver/docker/warp/warp_data_listener.rb +0 -112
  95. data/lib/baykit/bayserver/docker/warp/warp_handler.rb +0 -38
  96. /data/lib/baykit/bayserver/{util → common}/cities.rb +0 -0
@@ -0,0 +1,150 @@
1
+ require 'baykit/bayserver/bay_log'
2
+ require 'baykit/bayserver/common/multiplexer'
3
+
4
+ module Baykit
5
+ module BayServer
6
+ module Agent
7
+ module Multiplexer
8
+ class MultiplexerBase
9
+ include Baykit::BayServer::Common::Multiplexer # implements
10
+ include Baykit::BayServer
11
+
12
+ attr :channel_count
13
+ attr :agent
14
+ attr :rudders
15
+ attr :rudders_lock
16
+ attr :lock
17
+
18
+ def initialize(agt)
19
+ @agent = agt
20
+ @channel_count = 0
21
+ @rudders = {}
22
+ @rudders_lock = Mutex::new
23
+ @lock = Mutex::new
24
+ end
25
+
26
+ #########################################
27
+ # Implements Multiplexer
28
+ #########################################
29
+
30
+ def add_rudder_state(rd, st)
31
+ st.multiplexer = self
32
+ @rudders_lock.synchronize do
33
+ @rudders[rd.key] = st
34
+ end
35
+ @channel_count += 1
36
+ st.access()
37
+ end
38
+
39
+ def get_rudder_state(rd)
40
+ return find_rudder_state_by_key(rd.key)
41
+ end
42
+
43
+ def get_transporter(rd)
44
+ return get_rudder_state(rd).transporter
45
+ end
46
+
47
+ def consume_oldest_unit(st)
48
+ u = nil
49
+ st.write_queue_lock.synchronize do
50
+ if st.write_queue.empty?
51
+ return false
52
+ end
53
+ u = st.write_queue.shift()
54
+ end
55
+ u.done()
56
+ return true
57
+ end
58
+
59
+ def close_rudder(st)
60
+ BayLog.debug("%s closeRd %s state=%s closed=%s", agent, st.rudder, st, st.closed)
61
+
62
+ @lock.synchronize do
63
+ if st.closed
64
+ return
65
+ end
66
+ st.closed = true
67
+ end
68
+
69
+ remove_rudder_state(st.rudder)
70
+
71
+ begin
72
+ st.rudder.close()
73
+ rescue IOError => e
74
+ Baylog.error_e(e)
75
+ end
76
+
77
+ while consume_oldest_unit(st) do
78
+
79
+ end
80
+
81
+ if st.transporter != nil
82
+ st.transporter.on_closed(st.rudder)
83
+ end
84
+ end
85
+
86
+ def is_busy()
87
+ return @channel_count >= @agent.max_inbound_ships
88
+ end
89
+
90
+
91
+ #########################################
92
+ # Custom methods
93
+ #########################################
94
+
95
+ def find_rudder_state_by_key(key)
96
+ @rudders_lock.synchronize do
97
+ return @rudders[key]
98
+ end
99
+ end
100
+
101
+ def remove_rudder_state(rd)
102
+ @rudders_lock.synchronize do
103
+ @rudders.delete(rd.key())
104
+ end
105
+ @channel_count -= 1
106
+ end
107
+
108
+ def close_timeout_sockets
109
+ if @rudders.empty?
110
+ return
111
+ end
112
+
113
+ close_list = []
114
+ copied = nil
115
+ @rudders_lock.synchronize do
116
+ copied = @rudders.values
117
+ end
118
+ now = Time.now.tv_sec
119
+
120
+ copied.each do |st|
121
+ if st.transporter != nil
122
+ duration = now - st.last_access_time
123
+ if st.transporter.check_timeout(st.rudder, duration)
124
+ BayLog.debug("%s timeout: ch=%s", @agent, st.rudder)
125
+ close_list << st
126
+ end
127
+ end
128
+ end
129
+
130
+ close_list.each do |st|
131
+ close_rudder(st)
132
+ end
133
+ end
134
+
135
+ def close_all()
136
+ copied = nil
137
+ @rudders_lock.synchronize do
138
+ copied = @rudders.values
139
+ end
140
+ copied.each do |st|
141
+ if st.rudder != @agent.command_receiver.rudder
142
+ close_rudder(st)
143
+ end
144
+ end
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,129 @@
1
+ require 'baykit/bayserver/agent/multiplexer/transporter'
2
+ require 'baykit/bayserver/protocol/protocol_exception'
3
+ require 'baykit/bayserver/agent/next_socket_action'
4
+
5
+ module Baykit
6
+ module BayServer
7
+ module Agent
8
+ module Multiplexer
9
+ class PlainTransporter
10
+ include Transporter # Implements
11
+ include Baykit::BayServer::Agent
12
+ include Baykit::BayServer::Protocol
13
+ include Baykit::BayServer::Util
14
+
15
+ attr :multiplexer
16
+ attr :server_mode
17
+ attr :trace_ssl
18
+ attr :read_buffer_size
19
+ attr :ship
20
+ attr :closed
21
+
22
+ def initialize(mpx, sip, server_mode, bufsiz, trace_ssl)
23
+ @multiplexer = mpx
24
+ @ship = sip
25
+ @server_mode = server_mode
26
+ @trace_ssl = trace_ssl
27
+ @read_buffer_size = bufsiz
28
+ @closed = false
29
+ end
30
+
31
+ def to_s
32
+ return "tp[#{@ship}]"
33
+ end
34
+
35
+ #########################################
36
+ # Implements Transporter
37
+ #########################################
38
+
39
+ def init
40
+
41
+ end
42
+
43
+ def on_connect(rd)
44
+ BayLog.trace("%s onConnect", self)
45
+
46
+ return @ship.notify_connect
47
+ ;
48
+ end
49
+
50
+ def on_read(rd, buf, adr)
51
+ BayLog.debug("%s onRead", self)
52
+
53
+ if buf.length == 0
54
+ return @ship.notify_eof
55
+ else
56
+ begin
57
+ return @ship.notify_read(buf)
58
+
59
+ rescue UpgradeException => e
60
+ BayLog.debug("%s Protocol upgrade", @ship)
61
+ return @ship.notify_read(buf)
62
+
63
+ rescue ProtocolException => e
64
+ close = @ship.notify_protocol_error(e)
65
+ if !close && @server_mode
66
+ return NextSocketAction::CONTINUE
67
+ else
68
+ return NextSocketAction::CLOSE
69
+ end
70
+
71
+ rescue IOError => e
72
+ # IOError which occur in notifyRead must be distinguished from
73
+ # IOError which occur in handshake or readNonBlock.
74
+ on_error(rd, e)
75
+ return NextSocketAction::CLOSE
76
+ end
77
+ end
78
+ end
79
+
80
+ def on_error(rd, e)
81
+ @ship.notify_error(e)
82
+ end
83
+
84
+ def on_closed(rd)
85
+ @ship.notify_close
86
+ end
87
+
88
+ def req_connect(rd, adr)
89
+ @multiplexer.req_connect(rd, adr)
90
+ end
91
+
92
+ def req_read(rd)
93
+ @multiplexer.req_read(rd)
94
+ end
95
+
96
+ def req_write(rd, buf, adr, tag, &lis)
97
+ @multiplexer.req_write(rd, buf, adr, tag, lis)
98
+ end
99
+
100
+ def req_close(rd)
101
+ @closed = true
102
+ @multiplexer.req_close(rd)
103
+ end
104
+
105
+ def check_timeout(rd, duration_sec)
106
+ return @ship.check_timeout(duration_sec)
107
+ end
108
+
109
+ def get_read_buffer_size
110
+ return @read_buffer_size
111
+ end
112
+
113
+ def print_usage(indent)
114
+ end
115
+
116
+
117
+ #########################################
118
+ # Custom methods
119
+ #########################################
120
+ def secure()
121
+ return false
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
128
+
129
+
@@ -0,0 +1,81 @@
1
+
2
+ module Baykit
3
+ module BayServer
4
+ module Agent
5
+ module Multiplexer
6
+ class RudderState
7
+ attr :rudder
8
+ attr :transporter
9
+ attr_accessor :multiplexer
10
+
11
+ attr :last_access_time
12
+ attr_accessor :closing
13
+
14
+ attr :read_buf
15
+ attr :buf_size
16
+ attr :write_queue
17
+ attr_accessor :handshaking
18
+ attr_accessor :reading
19
+ attr_accessor :writing
20
+ attr_accessor :bytes_read
21
+ attr_accessor :bytes_wrote
22
+ attr :write_queue_lock
23
+ attr :reading_lock
24
+ attr :writing_lock
25
+ attr_accessor :closed
26
+ attr_accessor :finale
27
+
28
+ attr_accessor :accepting
29
+ attr_accessor :connecting
30
+
31
+
32
+ def initialize(rd, tp = nil, timeout_sec = 0)
33
+ @rudder = rd
34
+ @transporter = tp
35
+ @closed = false
36
+ @timeout_sec = timeout_sec
37
+
38
+ if tp != nil
39
+ @buf_size = tp.get_read_buffer_size
40
+ @handshaking = tp.secure() ? true : false
41
+ else
42
+ @buf_size = 8192
43
+ @handshaking = false
44
+ end
45
+ @read_buf = " ".b * @buf_size
46
+
47
+ @accepting = false
48
+ @connecting = false
49
+ @closing = false
50
+ @write_queue = []
51
+ @write_queue_lock = Mutex::new
52
+ @reading_lock = Mutex::new
53
+ @writing_lock = Mutex::new
54
+ @reading = false
55
+ @writing = false
56
+ @bytes_read = 0
57
+ @bytes_wrote = 0
58
+ end
59
+
60
+ def to_s
61
+ str = "st(rd=#{@rudder} mpx=#{@multiplexer} tp=#{@transporter})"
62
+ if @closing
63
+ str += " closing";
64
+ end
65
+ return str
66
+ end
67
+
68
+
69
+ def access
70
+ @last_access_time = Time.now.tv_sec
71
+ end
72
+
73
+ def end
74
+ @finale = true
75
+ end
76
+
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,50 @@
1
+ require 'openssl'
2
+
3
+ require 'baykit/bayserver/agent/multiplexer/plain_transporter'
4
+ require 'baykit/bayserver/agent/next_socket_action'
5
+
6
+ module Baykit
7
+ module BayServer
8
+ module Agent
9
+ module Multiplexer
10
+ class SecureTransporter < PlainTransporter
11
+ include OpenSSL
12
+ include Baykit::BayServer::Protocol
13
+
14
+ attr :sslctx
15
+
16
+ def initialize(mpx, sip, server_mode, bufsize, trace_ssl, sslctx)
17
+ super(mpx, sip, server_mode, bufsize, trace_ssl)
18
+ @sslctx = sslctx
19
+ end
20
+
21
+
22
+ def to_s()
23
+ "stp[#{@ship}]"
24
+ end
25
+
26
+ ######################################################
27
+ # Implements Transporter
28
+ ######################################################
29
+
30
+ def secure()
31
+ return true
32
+ end
33
+
34
+ def on_read(rd, buf, len)
35
+ super
36
+ end
37
+
38
+ ######################################################
39
+ # Custom methods
40
+ ######################################################
41
+
42
+ def new_ssl_socket(skt)
43
+ SSL::SSLSocket.new(skt, @sslctx)
44
+ end
45
+ end
46
+ end
47
+
48
+ end
49
+ end
50
+ end