serverengine 1.5.9 → 1.5.10
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.
- checksums.yaml +8 -8
 - data/Changelog +9 -0
 - data/README.md +82 -34
 - data/lib/serverengine.rb +1 -0
 - data/lib/serverengine/multi_spawn_server.rb +87 -0
 - data/lib/serverengine/multi_thread_server.rb +1 -0
 - data/lib/serverengine/process_manager.rb +1 -1
 - data/lib/serverengine/server.rb +3 -0
 - data/lib/serverengine/supervisor.rb +2 -0
 - data/lib/serverengine/version.rb +1 -1
 - data/lib/serverengine/worker.rb +9 -2
 - metadata +3 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,15 +1,15 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            !binary "U0hBMQ==":
         
     | 
| 
       3 
3 
     | 
    
         
             
              metadata.gz: !binary |-
         
     | 
| 
       4 
     | 
    
         
            -
                 
     | 
| 
      
 4 
     | 
    
         
            +
                OWNiN2U5ZGRhMjk1NGI1ZDAxNmY3OWE5OTZkMWI0ZDI5Nzg3NDQzYw==
         
     | 
| 
       5 
5 
     | 
    
         
             
              data.tar.gz: !binary |-
         
     | 
| 
       6 
     | 
    
         
            -
                 
     | 
| 
      
 6 
     | 
    
         
            +
                MTFlMzk4MjE1ZDdhZDdiMWRkNzg2YmY3M2MxMWU5MjY5OWU3ZTFkNw==
         
     | 
| 
       7 
7 
     | 
    
         
             
            SHA512:
         
     | 
| 
       8 
8 
     | 
    
         
             
              metadata.gz: !binary |-
         
     | 
| 
       9 
     | 
    
         
            -
                 
     | 
| 
       10 
     | 
    
         
            -
                 
     | 
| 
       11 
     | 
    
         
            -
                 
     | 
| 
      
 9 
     | 
    
         
            +
                NGI0NjQyMWMxNTJmMzBlYTFhM2YwM2U2OGUwMWM4OGMzMzI4ODA4YmQ4ZGI3
         
     | 
| 
      
 10 
     | 
    
         
            +
                ZjE5MTUzMzk2YTJkYWVjNTNkMzU0ZjkwZWU1ODY2M2VkNDUwZmM5ZjgxY2Qw
         
     | 
| 
      
 11 
     | 
    
         
            +
                NWUyYzhmOWIyYTA0ZGQ3ZGUwYWMwYTNjODZlNzAyM2IwNWFlNDI=
         
     | 
| 
       12 
12 
     | 
    
         
             
              data.tar.gz: !binary |-
         
     | 
| 
       13 
     | 
    
         
            -
                 
     | 
| 
       14 
     | 
    
         
            -
                 
     | 
| 
       15 
     | 
    
         
            -
                 
     | 
| 
      
 13 
     | 
    
         
            +
                ZTRjMWQ0N2E4OTI5ZGUzOTZjYTU3ZTI5MzVmYzdiMjBjOGU5Yjg4NzBjOGE0
         
     | 
| 
      
 14 
     | 
    
         
            +
                OGEwYzM2MDNiMTc5ZmE1NDQ4MjkwNGVhZjFiZDIxMzEzMTBiNzRkOWU0ZTM0
         
     | 
| 
      
 15 
     | 
    
         
            +
                NmFkZWM1NTgyYjBmOGRhYzU1NmZjNzJiOGM5ZDYyNjBiYzQxNDI=
         
     | 
    
        data/Changelog
    CHANGED
    
    | 
         @@ -1,4 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         | 
| 
      
 2 
     | 
    
         
            +
            2014-10-27 version 1.5.10:
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            * Added worker_type=spawn (experimental)
         
     | 
| 
      
 5 
     | 
    
         
            +
            * Fixed Worker#config to reference Server#config so that Worker#reload reads
         
     | 
| 
      
 6 
     | 
    
         
            +
              the new config reloaded by Server#reload (=ConfigLoader#reload_config) in
         
     | 
| 
      
 7 
     | 
    
         
            +
              worker_type=thread and embedded
         
     | 
| 
      
 8 
     | 
    
         
            +
            * Server#stop, #restart and #reload show a debug log message
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
       2 
11 
     | 
    
         
             
            2014-07-24 version 1.5.9:
         
     | 
| 
       3 
12 
     | 
    
         | 
| 
       4 
13 
     | 
    
         
             
            * Fixed DaemonLogger#reoepen! on Ruby >= 2.1.0
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -50,9 +50,9 @@ module MyWorker 
     | 
|
| 
       50 
50 
     | 
    
         
             
            end
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
       52 
52 
     | 
    
         
             
            se = ServerEngine.create(nil, MyWorker, {
         
     | 
| 
       53 
     | 
    
         
            -
              : 
     | 
| 
       54 
     | 
    
         
            -
              : 
     | 
| 
       55 
     | 
    
         
            -
              : 
     | 
| 
      
 53 
     | 
    
         
            +
              daemonize: true,
         
     | 
| 
      
 54 
     | 
    
         
            +
              log: 'myserver.log',
         
     | 
| 
      
 55 
     | 
    
         
            +
              pid_path: 'myserver.pid',
         
     | 
| 
       56 
56 
     | 
    
         
             
            })
         
     | 
| 
       57 
57 
     | 
    
         
             
            se.run
         
     | 
| 
       58 
58 
     | 
    
         
             
            ```
         
     | 
| 
         @@ -66,11 +66,11 @@ Simply set **worker_type=process** or **worker_type=thread** parameter, and set 
     | 
|
| 
       66 
66 
     | 
    
         | 
| 
       67 
67 
     | 
    
         
             
            ```ruby
         
     | 
| 
       68 
68 
     | 
    
         
             
            se = ServerEngine.create(nil, MyWorker, {
         
     | 
| 
       69 
     | 
    
         
            -
              : 
     | 
| 
       70 
     | 
    
         
            -
              : 
     | 
| 
       71 
     | 
    
         
            -
              : 
     | 
| 
       72 
     | 
    
         
            -
              : 
     | 
| 
       73 
     | 
    
         
            -
              : 
     | 
| 
      
 69 
     | 
    
         
            +
              daemonize: true,
         
     | 
| 
      
 70 
     | 
    
         
            +
              log: 'myserver.log',
         
     | 
| 
      
 71 
     | 
    
         
            +
              pid_path: 'myserver.pid',
         
     | 
| 
      
 72 
     | 
    
         
            +
              worker_type: 'process',
         
     | 
| 
      
 73 
     | 
    
         
            +
              workers: 4,
         
     | 
| 
       74 
74 
     | 
    
         
             
            })
         
     | 
| 
       75 
75 
     | 
    
         
             
            se.run
         
     | 
| 
       76 
76 
     | 
    
         
             
            ```
         
     | 
| 
         @@ -111,13 +111,54 @@ module MyWorker 
     | 
|
| 
       111 
111 
     | 
    
         
             
            end
         
     | 
| 
       112 
112 
     | 
    
         | 
| 
       113 
113 
     | 
    
         
             
            se = ServerEngine.create(MyServer, MyWorker, {
         
     | 
| 
       114 
     | 
    
         
            -
              : 
     | 
| 
       115 
     | 
    
         
            -
              : 
     | 
| 
       116 
     | 
    
         
            -
              : 
     | 
| 
       117 
     | 
    
         
            -
              : 
     | 
| 
       118 
     | 
    
         
            -
              : 
     | 
| 
       119 
     | 
    
         
            -
              : 
     | 
| 
       120 
     | 
    
         
            -
              : 
     | 
| 
      
 114 
     | 
    
         
            +
              daemonize: true,
         
     | 
| 
      
 115 
     | 
    
         
            +
              log: 'myserver.log',
         
     | 
| 
      
 116 
     | 
    
         
            +
              pid_path: 'myserver.pid',
         
     | 
| 
      
 117 
     | 
    
         
            +
              worker_type: 'process',
         
     | 
| 
      
 118 
     | 
    
         
            +
              workers: 4,
         
     | 
| 
      
 119 
     | 
    
         
            +
              bind: '0.0.0.0',
         
     | 
| 
      
 120 
     | 
    
         
            +
              port: 9071,
         
     | 
| 
      
 121 
     | 
    
         
            +
            })
         
     | 
| 
      
 122 
     | 
    
         
            +
            se.run
         
     | 
| 
      
 123 
     | 
    
         
            +
            ```
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
            ### Multiprocess server on Windows and JRuby platform
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
            Above **worker_type=process** depends on `fork` system call, which doesn't work on Windows or JRuby platform.
         
     | 
| 
      
 129 
     | 
    
         
            +
            ServerEngine provides **worker_type=spawn** for those platforms (This is still EXPERIMENTAL). However, unfortunately, you need to implement different worker module because `worker_type=spawn` is not compatible with **worker_type=process** in terms of API.
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
            What you need to implement at least to use worker_type=spawn is `spawn(process_manager)` method. You will call `process_manager.spawn` at the method, where `spawn` is same with `Process.spawn` excepting return value.
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 134 
     | 
    
         
            +
            module MyWorker
         
     | 
| 
      
 135 
     | 
    
         
            +
              def spawn(process_manager)
         
     | 
| 
      
 136 
     | 
    
         
            +
                env = {
         
     | 
| 
      
 137 
     | 
    
         
            +
                  'SERVER_ENGINE_CONFIG' => config.to_json
         
     | 
| 
      
 138 
     | 
    
         
            +
                }
         
     | 
| 
      
 139 
     | 
    
         
            +
                script = %[
         
     | 
| 
      
 140 
     | 
    
         
            +
                  require 'serverengine'
         
     | 
| 
      
 141 
     | 
    
         
            +
                  require 'json'
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
                  conf = JSON.parse(ENV['SERVER_ENGINE_CONFIG'], symbolize_names: true)
         
     | 
| 
      
 144 
     | 
    
         
            +
                  logger = ServerEngine::DaemonLogger.new(conf[:log] || STDOUT, conf)
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                  @stop = false
         
     | 
| 
      
 147 
     | 
    
         
            +
                  trap(:SIGTERM) { @stop = true }
         
     | 
| 
      
 148 
     | 
    
         
            +
                  trap(:SIGINT) { @stop = true }
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
                  until @stop
         
     | 
| 
      
 151 
     | 
    
         
            +
                    logger.info 'Awesome work!'
         
     | 
| 
      
 152 
     | 
    
         
            +
                    sleep 1
         
     | 
| 
      
 153 
     | 
    
         
            +
                  end
         
     | 
| 
      
 154 
     | 
    
         
            +
                ]
         
     | 
| 
      
 155 
     | 
    
         
            +
                process_manager.spawn(env, "ruby", "-e", script)
         
     | 
| 
      
 156 
     | 
    
         
            +
              end
         
     | 
| 
      
 157 
     | 
    
         
            +
            end
         
     | 
| 
      
 158 
     | 
    
         
            +
             
     | 
| 
      
 159 
     | 
    
         
            +
            se = ServerEngine.create(nil, MyWorker, {
         
     | 
| 
      
 160 
     | 
    
         
            +
              worker_type: 'spawn',
         
     | 
| 
      
 161 
     | 
    
         
            +
              log: 'myserver.log',
         
     | 
| 
       121 
162 
     | 
    
         
             
            })
         
     | 
| 
       122 
163 
     | 
    
         
             
            se.run
         
     | 
| 
       123 
164 
     | 
    
         
             
            ```
         
     | 
| 
         @@ -129,10 +170,10 @@ ServerEngine logger rotates logs by 1MB and keeps 5 generations by default. 
     | 
|
| 
       129 
170 
     | 
    
         | 
| 
       130 
171 
     | 
    
         
             
            ```ruby
         
     | 
| 
       131 
172 
     | 
    
         
             
            se = ServerEngine.create(MyServer, MyWorker, {
         
     | 
| 
       132 
     | 
    
         
            -
              : 
     | 
| 
       133 
     | 
    
         
            -
              : 
     | 
| 
       134 
     | 
    
         
            -
              : 
     | 
| 
       135 
     | 
    
         
            -
              : 
     | 
| 
      
 173 
     | 
    
         
            +
              log: 'myserver.log',
         
     | 
| 
      
 174 
     | 
    
         
            +
              log_level: 'debug',
         
     | 
| 
      
 175 
     | 
    
         
            +
              log_rotate_age: 5,
         
     | 
| 
      
 176 
     | 
    
         
            +
              log_rotate_size: 1*1024*1024,
         
     | 
| 
       136 
177 
     | 
    
         
             
            })
         
     | 
| 
       137 
178 
     | 
    
         
             
            se.run
         
     | 
| 
       138 
179 
     | 
    
         
             
            ```
         
     | 
| 
         @@ -154,9 +195,9 @@ Supervisor process runs as the parent process of the server process and monitor 
     | 
|
| 
       154 
195 
     | 
    
         | 
| 
       155 
196 
     | 
    
         
             
            ```ruby
         
     | 
| 
       156 
197 
     | 
    
         
             
            se = ServerEngine.create(nil, MyWorker, {
         
     | 
| 
       157 
     | 
    
         
            -
              : 
     | 
| 
       158 
     | 
    
         
            -
              : 
     | 
| 
       159 
     | 
    
         
            -
              : 
     | 
| 
      
 198 
     | 
    
         
            +
              daemonize: true,
         
     | 
| 
      
 199 
     | 
    
         
            +
              pid_path: 'myserver.pid',
         
     | 
| 
      
 200 
     | 
    
         
            +
              supervisor: true,  # enable supervisor process
         
     | 
| 
       160 
201 
     | 
    
         
             
            })
         
     | 
| 
       161 
202 
     | 
    
         
             
            se.run
         
     | 
| 
       162 
203 
     | 
    
         
             
            ```
         
     | 
| 
         @@ -229,8 +270,8 @@ end 
     | 
|
| 
       229 
270 
     | 
    
         | 
| 
       230 
271 
     | 
    
         
             
            se = ServerEngine.create(nil, MyWorker) do
         
     | 
| 
       231 
272 
     | 
    
         
             
              YAML.load_file("config.yml").merge({
         
     | 
| 
       232 
     | 
    
         
            -
                : 
     | 
| 
       233 
     | 
    
         
            -
                : 
     | 
| 
      
 273 
     | 
    
         
            +
                daemonize: true,
         
     | 
| 
      
 274 
     | 
    
         
            +
                worker_type: 'process',
         
     | 
| 
       234 
275 
     | 
    
         
             
              })
         
     | 
| 
       235 
276 
     | 
    
         
             
            end
         
     | 
| 
       236 
277 
     | 
    
         
             
            se.run
         
     | 
| 
         @@ -264,8 +305,8 @@ end 
     | 
|
| 
       264 
305 
     | 
    
         | 
| 
       265 
306 
     | 
    
         
             
            se = ServerEngine.create(nil, MyWorker) do
         
     | 
| 
       266 
307 
     | 
    
         
             
              YAML.load_file(config).merge({
         
     | 
| 
       267 
     | 
    
         
            -
                : 
     | 
| 
       268 
     | 
    
         
            -
                : 
     | 
| 
      
 308 
     | 
    
         
            +
                daemonize: true,
         
     | 
| 
      
 309 
     | 
    
         
            +
                worker_type: 'process'
         
     | 
| 
       269 
310 
     | 
    
         
             
              })
         
     | 
| 
       270 
311 
     | 
    
         
             
            end
         
     | 
| 
       271 
312 
     | 
    
         
             
            se.run
         
     | 
| 
         @@ -276,13 +317,16 @@ se.run 
     | 
|
| 
       276 
317 
     | 
    
         | 
| 
       277 
318 
     | 
    
         
             
            ### Worker module
         
     | 
| 
       278 
319 
     | 
    
         | 
| 
      
 320 
     | 
    
         
            +
            Available methods are different depending on `worker_type`.
         
     | 
| 
      
 321 
     | 
    
         
            +
             
     | 
| 
       279 
322 
     | 
    
         
             
            - interface
         
     | 
| 
       280 
323 
     | 
    
         
             
              - `initialize` is called in the parent process (or thread) in contrast to the other methods
         
     | 
| 
       281 
     | 
    
         
            -
              - `before_fork` is called before fork for each worker process  
     | 
| 
       282 
     | 
    
         
            -
              - `run` is the required method
         
     | 
| 
       283 
     | 
    
         
            -
              - ` 
     | 
| 
       284 
     | 
    
         
            -
              - ` 
     | 
| 
       285 
     | 
    
         
            -
              - ` 
     | 
| 
      
 324 
     | 
    
         
            +
              - `before_fork` is called before fork for each worker process [`worker_type` = "thread", "process"]
         
     | 
| 
      
 325 
     | 
    
         
            +
              - `run` is the required method for `worker_type` = "embedded", "thread", "process"
         
     | 
| 
      
 326 
     | 
    
         
            +
              - `spawn(process_manager)` is the required method for `worker_type` = "spawn". Should call `process_manager.spawn([env,] command... [,options])`.
         
     | 
| 
      
 327 
     | 
    
         
            +
              - `stop` is called when TERM signal is received [`worker_type` = "embedded", "thread", "process"]
         
     | 
| 
      
 328 
     | 
    
         
            +
              - `reload` is called when USR2 signal is received [`worker_type` = "embedded", "thread", "process"]
         
     | 
| 
      
 329 
     | 
    
         
            +
              - `after_start` is called after starting the worker process in the parent process (or thread) [`worker_type` = "thread", "process", "spawn"]
         
     | 
| 
       286 
330 
     | 
    
         
             
            - api
         
     | 
| 
       287 
331 
     | 
    
         
             
              - `server` server instance
         
     | 
| 
       288 
332 
     | 
    
         
             
              - `config` configuration
         
     | 
| 
         @@ -296,7 +340,7 @@ se.run 
     | 
|
| 
       296 
340 
     | 
    
         
             
              - `initialize` is called in the parent process in contrast to the other methods
         
     | 
| 
       297 
341 
     | 
    
         
             
              - `before_run` is called before starting workers
         
     | 
| 
       298 
342 
     | 
    
         
             
              - `after_run` is called before shutting down
         
     | 
| 
       299 
     | 
    
         
            -
              - `after_start` is called after starting the server process in the parent process (available  
     | 
| 
      
 343 
     | 
    
         
            +
              - `after_start` is called after starting the server process in the parent process (available if `supervisor` parameter is true)
         
     | 
| 
       300 
344 
     | 
    
         
             
            - hook points (call `super` in these methods)
         
     | 
| 
       301 
345 
     | 
    
         
             
              - `reload_config`
         
     | 
| 
       302 
346 
     | 
    
         
             
              - `stop(stop_graceful)`
         
     | 
| 
         @@ -312,7 +356,8 @@ ServerEngine supports 3 worker types: 
     | 
|
| 
       312 
356 
     | 
    
         | 
| 
       313 
357 
     | 
    
         
             
            - **embedded**: uses a thread to run worker module (default). This type doesn't support immediate shutdown or immediate restart.
         
     | 
| 
       314 
358 
     | 
    
         
             
            - **thread**: uses threads to run worker modules. This type doesn't support immediate shutdown or immediate restart.
         
     | 
| 
       315 
     | 
    
         
            -
            - **process**: uses processes to run worker modules. This type doesn't work on  
     | 
| 
      
 359 
     | 
    
         
            +
            - **process**: uses processes to run worker modules. This type doesn't work on Windows or JRuby platform.
         
     | 
| 
      
 360 
     | 
    
         
            +
            - **spawn**: uses processes to run worker modules. This type works on Windows and JRuby platform but available interface of worker module is limited (See also Worker module section).
         
     | 
| 
       316 
361 
     | 
    
         | 
| 
       317 
362 
     | 
    
         | 
| 
       318 
363 
     | 
    
         
             
            ## Signals
         
     | 
| 
         @@ -352,7 +397,7 @@ Graceful shutdown and restart call `Worker#stop` method and wait for completion 
     | 
|
| 
       352 
397 
     | 
    
         
             
              - **workers** sets number of workers (default: 1) [dynamic reloadable]
         
     | 
| 
       353 
398 
     | 
    
         
             
              - **start_worker_delay** sets wait time before starting a new worker (default: 0) [dynamic reloadable]
         
     | 
| 
       354 
399 
     | 
    
         
             
              - **start_worker_delay_rand** randomizes start_worker_delay at this ratio (default: 0.2) [dynamic reloadable]
         
     | 
| 
       355 
     | 
    
         
            -
            - Multiprocess server: available only when `worker_type` is "process" 
     | 
| 
      
 400 
     | 
    
         
            +
            - Multiprocess server: available only when `worker_type` is "process"
         
     | 
| 
       356 
401 
     | 
    
         
             
              - **worker_process_name** changes process name ($0) of workers [dynamic reloadable]
         
     | 
| 
       357 
402 
     | 
    
         
             
              - **worker_heartbeat_interval** sets interval of heartbeats in seconds (default: 1.0) [dynamic reloadable]
         
     | 
| 
       358 
403 
     | 
    
         
             
              - **worker_heartbeat_timeout** sets timeout of heartbeat in seconds (default: 180) [dynamic reloadable]
         
     | 
| 
         @@ -362,6 +407,9 @@ Graceful shutdown and restart call `Worker#stop` method and wait for completion 
     | 
|
| 
       362 
407 
     | 
    
         
             
              - **worker_immediate_kill_interval** sets the first interval of QUIT signals in seconds (default: 10) [dynamic reloadable]
         
     | 
| 
       363 
408 
     | 
    
         
             
              - **worker_immediate_kill_interval_increment** sets increment of QUIT signal interval in seconds (default: 10) [dynamic reloadable]
         
     | 
| 
       364 
409 
     | 
    
         
             
              - **worker_immediate_kill_timeout** sets promotion timeout from QUIT to KILL signal in seconds. -1 means no timeout (default: 600) [dynamic reloadable]
         
     | 
| 
      
 410 
     | 
    
         
            +
            - Multiprocess spawn server: available only when `worker_type` is "spawn"
         
     | 
| 
      
 411 
     | 
    
         
            +
              - all parameters of multiprocess server excepting worker_process_name
         
     | 
| 
      
 412 
     | 
    
         
            +
              - **worker_reload_signal** sets the signal to notice configuration reload to a spawned process. Set nil to disable (default: nil)
         
     | 
| 
       365 
413 
     | 
    
         
             
            - Logger
         
     | 
| 
       366 
414 
     | 
    
         
             
              - **log** sets path to log file. Set "-" for STDOUT (default: STDERR) [dynamic reloadable]
         
     | 
| 
       367 
415 
     | 
    
         
             
              - **log_level** log level: trace, debug, info, warn, error or fatal. (default: debug) [dynamic reloadable]
         
     | 
    
        data/lib/serverengine.rb
    CHANGED
    
    | 
         @@ -33,6 +33,7 @@ module ServerEngine 
     | 
|
| 
       33 
33 
     | 
    
         
             
                :MultiWorkerServer => 'serverengine/multi_worker_server',
         
     | 
| 
       34 
34 
     | 
    
         
             
                :MultiProcessServer => 'serverengine/multi_process_server',
         
     | 
| 
       35 
35 
     | 
    
         
             
                :MultiThreadServer => 'serverengine/multi_thread_server',
         
     | 
| 
      
 36 
     | 
    
         
            +
                :MultiSpawnServer => 'serverengine/multi_spawn_server',
         
     | 
| 
       36 
37 
     | 
    
         
             
                :ProcessManager => 'serverengine/process_manager',
         
     | 
| 
       37 
38 
     | 
    
         
             
                :Worker => 'serverengine/worker',
         
     | 
| 
       38 
39 
     | 
    
         
             
                :VERSION => 'serverengine/version',
         
     | 
| 
         @@ -0,0 +1,87 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #
         
     | 
| 
      
 2 
     | 
    
         
            +
            # ServerEngine
         
     | 
| 
      
 3 
     | 
    
         
            +
            #
         
     | 
| 
      
 4 
     | 
    
         
            +
            # Copyright (C) 2012-2013 Sadayuki Furuhashi
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            #    Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
      
 7 
     | 
    
         
            +
            #    you may not use this file except in compliance with the License.
         
     | 
| 
      
 8 
     | 
    
         
            +
            #    You may obtain a copy of the License at
         
     | 
| 
      
 9 
     | 
    
         
            +
            #
         
     | 
| 
      
 10 
     | 
    
         
            +
            #        http://www.apache.org/licenses/LICENSE-2.0
         
     | 
| 
      
 11 
     | 
    
         
            +
            #
         
     | 
| 
      
 12 
     | 
    
         
            +
            #    Unless required by applicable law or agreed to in writing, software
         
     | 
| 
      
 13 
     | 
    
         
            +
            #    distributed under the License is distributed on an "AS IS" BASIS,
         
     | 
| 
      
 14 
     | 
    
         
            +
            #    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         
     | 
| 
      
 15 
     | 
    
         
            +
            #    See the License for the specific language governing permissions and
         
     | 
| 
      
 16 
     | 
    
         
            +
            #    limitations under the License.
         
     | 
| 
      
 17 
     | 
    
         
            +
            #
         
     | 
| 
      
 18 
     | 
    
         
            +
            module ServerEngine
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              class MultiSpawnServer < MultiWorkerServer
         
     | 
| 
      
 21 
     | 
    
         
            +
                def initialize(worker_module, load_config_proc={}, &block)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  @pm = ProcessManager.new(
         
     | 
| 
      
 23 
     | 
    
         
            +
                    auto_tick: false,
         
     | 
| 
      
 24 
     | 
    
         
            +
                    graceful_kill_signal: Daemon::Signals::GRACEFUL_STOP,
         
     | 
| 
      
 25 
     | 
    
         
            +
                    immediate_kill_signal: Daemon::Signals::IMMEDIATE_STOP,
         
     | 
| 
      
 26 
     | 
    
         
            +
                    enable_heartbeat: false,
         
     | 
| 
      
 27 
     | 
    
         
            +
                  )
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  super(worker_module, load_config_proc, &block)
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  @reload_signal = @config[:worker_reload_signal]
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                def run
         
     | 
| 
      
 35 
     | 
    
         
            +
                  super
         
     | 
| 
      
 36 
     | 
    
         
            +
                ensure
         
     | 
| 
      
 37 
     | 
    
         
            +
                  @pm.close
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                def logger=(logger)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  super
         
     | 
| 
      
 42 
     | 
    
         
            +
                  @pm.logger = logger
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                private
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                def reload_config
         
     | 
| 
      
 48 
     | 
    
         
            +
                  super
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  @pm.configure(@config, prefix: 'worker_')
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  nil
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                def start_worker(wid)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  w = create_worker(wid)
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                  w.before_fork
         
     | 
| 
      
 59 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 60 
     | 
    
         
            +
                    pmon = w.spawn(@pm)
         
     | 
| 
      
 61 
     | 
    
         
            +
                  ensure
         
     | 
| 
      
 62 
     | 
    
         
            +
                    w.after_start
         
     | 
| 
      
 63 
     | 
    
         
            +
                  end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                  return WorkerMonitor.new(w, wid, pmon, @reload_signal)
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                def wait_tick
         
     | 
| 
      
 69 
     | 
    
         
            +
                  @pm.tick(0.5)
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                class WorkerMonitor < MultiProcessServer::WorkerMonitor
         
     | 
| 
      
 73 
     | 
    
         
            +
                  def initialize(worker, wid, pmon, reload_signal)
         
     | 
| 
      
 74 
     | 
    
         
            +
                    super(worker, wid, pmon)
         
     | 
| 
      
 75 
     | 
    
         
            +
                    @reload_signal = reload_signal
         
     | 
| 
      
 76 
     | 
    
         
            +
                  end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                  def send_reload
         
     | 
| 
      
 79 
     | 
    
         
            +
                    if @reload_signal
         
     | 
| 
      
 80 
     | 
    
         
            +
                      @pmon.send_signal(@reload_signal) if @pmon
         
     | 
| 
      
 81 
     | 
    
         
            +
                    end
         
     | 
| 
      
 82 
     | 
    
         
            +
                    nil
         
     | 
| 
      
 83 
     | 
    
         
            +
                  end
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
              end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/serverengine/server.rb
    CHANGED
    
    | 
         @@ -40,6 +40,7 @@ module ServerEngine 
     | 
|
| 
       40 
40 
     | 
    
         
             
                end
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
                def stop(stop_graceful)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  @logger.info "Received #{stop_graceful ? 'graceful' : 'immediate'} stop" if @logger
         
     | 
| 
       43 
44 
     | 
    
         
             
                  @stop = true
         
     | 
| 
       44 
45 
     | 
    
         
             
                  nil
         
     | 
| 
       45 
46 
     | 
    
         
             
                end
         
     | 
| 
         @@ -48,12 +49,14 @@ module ServerEngine 
     | 
|
| 
       48 
49 
     | 
    
         
             
                end
         
     | 
| 
       49 
50 
     | 
    
         | 
| 
       50 
51 
     | 
    
         
             
                def restart(stop_graceful)
         
     | 
| 
      
 52 
     | 
    
         
            +
                  @logger.info "Received #{stop_graceful ? 'graceful' : 'immediate'} restart" if @logger
         
     | 
| 
       51 
53 
     | 
    
         
             
                  reload_config
         
     | 
| 
       52 
54 
     | 
    
         
             
                  @logger.reopen! if @logger
         
     | 
| 
       53 
55 
     | 
    
         
             
                  nil
         
     | 
| 
       54 
56 
     | 
    
         
             
                end
         
     | 
| 
       55 
57 
     | 
    
         | 
| 
       56 
58 
     | 
    
         
             
                def reload
         
     | 
| 
      
 59 
     | 
    
         
            +
                  @logger.info "Received reload" if @logger
         
     | 
| 
       57 
60 
     | 
    
         
             
                  reload_config
         
     | 
| 
       58 
61 
     | 
    
         
             
                  @logger.reopen! if @logger
         
     | 
| 
       59 
62 
     | 
    
         
             
                  nil
         
     | 
    
        data/lib/serverengine/version.rb
    CHANGED
    
    
    
        data/lib/serverengine/worker.rb
    CHANGED
    
    | 
         @@ -20,13 +20,16 @@ module ServerEngine 
     | 
|
| 
       20 
20 
     | 
    
         
             
              class Worker
         
     | 
| 
       21 
21 
     | 
    
         
             
                def initialize(server, worker_id)
         
     | 
| 
       22 
22 
     | 
    
         
             
                  @server = server
         
     | 
| 
       23 
     | 
    
         
            -
                  @config = server.config
         
     | 
| 
       24 
23 
     | 
    
         
             
                  @logger = @server.logger
         
     | 
| 
       25 
24 
     | 
    
         
             
                  @worker_id = worker_id
         
     | 
| 
       26 
25 
     | 
    
         
             
                end
         
     | 
| 
       27 
26 
     | 
    
         | 
| 
       28 
27 
     | 
    
         
             
                attr_reader :server, :worker_id
         
     | 
| 
       29 
     | 
    
         
            -
                attr_accessor : 
     | 
| 
      
 28 
     | 
    
         
            +
                attr_accessor :logger
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                def config
         
     | 
| 
      
 31 
     | 
    
         
            +
                  @server.config
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
       30 
33 
     | 
    
         | 
| 
       31 
34 
     | 
    
         
             
                def before_fork
         
     | 
| 
       32 
35 
     | 
    
         
             
                end
         
     | 
| 
         @@ -35,6 +38,10 @@ module ServerEngine 
     | 
|
| 
       35 
38 
     | 
    
         
             
                  raise NoMethodError, "Worker#run method is not implemented"
         
     | 
| 
       36 
39 
     | 
    
         
             
                end
         
     | 
| 
       37 
40 
     | 
    
         | 
| 
      
 41 
     | 
    
         
            +
                def spawn(process_manager)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  raise NoMethodError, "Worker#spawn(process_manager) method is required for worker_type=spawn"
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
       38 
45 
     | 
    
         
             
                def stop
         
     | 
| 
       39 
46 
     | 
    
         
             
                end
         
     | 
| 
       40 
47 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: serverengine
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.5. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.5.10
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Sadayuki Furuhashi
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2014- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2014-10-27 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: sigdump
         
     | 
| 
         @@ -75,6 +75,7 @@ files: 
     | 
|
| 
       75 
75 
     | 
    
         
             
            - lib/serverengine/daemon_logger.rb
         
     | 
| 
       76 
76 
     | 
    
         
             
            - lib/serverengine/embedded_server.rb
         
     | 
| 
       77 
77 
     | 
    
         
             
            - lib/serverengine/multi_process_server.rb
         
     | 
| 
      
 78 
     | 
    
         
            +
            - lib/serverengine/multi_spawn_server.rb
         
     | 
| 
       78 
79 
     | 
    
         
             
            - lib/serverengine/multi_thread_server.rb
         
     | 
| 
       79 
80 
     | 
    
         
             
            - lib/serverengine/multi_worker_server.rb
         
     | 
| 
       80 
81 
     | 
    
         
             
            - lib/serverengine/process_manager.rb
         
     |