service_skeleton 0.0.0.16.g99ff4d7 → 0.0.0.20.gb9a0460
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 +4 -4
 - data/.editorconfig +7 -0
 - data/lib/service_skeleton/background_worker.rb +13 -4
 - data/lib/service_skeleton/signal_handler.rb +18 -10
 - metadata +3 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 651f874d0096f67e63ff46f957125c53b032861d34b6b43cfdfb2113eca7ad65
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 78c72f06cb3693d10d9c02338191eb0fef4a8171a97a138c01c42374133ecef6
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 59635704ca571789796e46449916154cbcc4194e39a6bf754c564490e7acd4a3217e32693090920b8c5195672f6d602426e85b80f52fec5bc9d6f4d3dd2c6f35
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: b67dd4d48fe6c468f10b7e34deb54195eee9f55e460f8179714228f727e5ff941f1200347825e8108fdb17ccd97da0b00d53431adb887b7ac37ee941ad3bd55d
         
     | 
    
        data/.editorconfig
    ADDED
    
    
| 
         @@ -54,15 +54,24 @@ class ServiceSkeleton 
     | 
|
| 
       54 
54 
     | 
    
         
             
                  end
         
     | 
| 
       55 
55 
     | 
    
         
             
                end
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
       57 
     | 
    
         
            -
                def stop!
         
     | 
| 
      
 57 
     | 
    
         
            +
                def stop!(force = nil)
         
     | 
| 
       58 
58 
     | 
    
         
             
                  @bg_worker_op_mutex.synchronize do
         
     | 
| 
       59 
59 
     | 
    
         
             
                    return if @bg_worker_thread.nil?
         
     | 
| 
       60 
60 
     | 
    
         | 
| 
       61 
     | 
    
         
            -
                    logger.debug("BackgroundWorker(#{self.class})#stop!") { "Terminating worker thread #{ 
     | 
| 
      
 61 
     | 
    
         
            +
                    logger.debug("BackgroundWorker(#{self.class})#stop!") { "Terminating worker thread #{@bg_worker_thread.object_id} as requested" }
         
     | 
| 
       62 
62 
     | 
    
         | 
| 
       63 
     | 
    
         
            -
                     
     | 
| 
      
 63 
     | 
    
         
            +
                    if force == :force
         
     | 
| 
      
 64 
     | 
    
         
            +
                      @bg_worker_thread.raise(TerminateBackgroundThread)
         
     | 
| 
      
 65 
     | 
    
         
            +
                    else
         
     | 
| 
      
 66 
     | 
    
         
            +
                      shutdown
         
     | 
| 
      
 67 
     | 
    
         
            +
                    end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 70 
     | 
    
         
            +
                      @bg_worker_thread.join unless @bg_worker_thread == Thread.current
         
     | 
| 
      
 71 
     | 
    
         
            +
                    rescue TerminateBackgroundThread
         
     | 
| 
      
 72 
     | 
    
         
            +
                      nil
         
     | 
| 
      
 73 
     | 
    
         
            +
                    end
         
     | 
| 
       64 
74 
     | 
    
         | 
| 
       65 
     | 
    
         
            -
                    @bg_worker_thread.join
         
     | 
| 
       66 
75 
     | 
    
         
             
                    @bg_worker_thread = nil
         
     | 
| 
       67 
76 
     | 
    
         | 
| 
       68 
77 
     | 
    
         
             
                    logger.debug("BackgroundWorker(#{self.class})#stop!") { "Worker thread terminated" }
         
     | 
| 
         @@ -42,6 +42,8 @@ class ServiceSkeleton 
     | 
|
| 
       42 
42 
     | 
    
         | 
| 
       43 
43 
     | 
    
         
             
                  @signal_registry = []
         
     | 
| 
       44 
44 
     | 
    
         | 
| 
      
 45 
     | 
    
         
            +
                  @handler_install_mutex = Mutex.new
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
       45 
47 
     | 
    
         
             
                  super
         
     | 
| 
       46 
48 
     | 
    
         
             
                end
         
     | 
| 
       47 
49 
     | 
    
         | 
| 
         @@ -62,16 +64,18 @@ class ServiceSkeleton 
     | 
|
| 
       62 
64 
     | 
    
         
             
                #   specifier by `Signal.trap`.
         
     | 
| 
       63 
65 
     | 
    
         
             
                #
         
     | 
| 
       64 
66 
     | 
    
         
             
                def hook_signal(sig, &blk)
         
     | 
| 
       65 
     | 
    
         
            -
                   
     | 
| 
       66 
     | 
    
         
            -
                    handler_num = @signal_registry.length
         
     | 
| 
      
 67 
     | 
    
         
            +
                  logger.debug(logloc) { "Hooking signal #{sig}" }
         
     | 
| 
       67 
68 
     | 
    
         | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
                      raise RuntimeError,
         
     | 
| 
       70 
     | 
    
         
            -
                            "Signal hook limit reached.  Slow down there, pardner"
         
     | 
| 
       71 
     | 
    
         
            -
                    end
         
     | 
| 
      
 69 
     | 
    
         
            +
                  handler_num = @signal_registry.length
         
     | 
| 
       72 
70 
     | 
    
         | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
      
 71 
     | 
    
         
            +
                  if handler_num > 255
         
     | 
| 
      
 72 
     | 
    
         
            +
                    raise RuntimeError,
         
     | 
| 
      
 73 
     | 
    
         
            +
                          "Signal hook limit reached.  Slow down there, pardner"
         
     | 
| 
      
 74 
     | 
    
         
            +
                  end
         
     | 
| 
       74 
75 
     | 
    
         | 
| 
      
 76 
     | 
    
         
            +
                  sigspec = { signal: sig, callback: blk }
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                  @handler_install_mutex.synchronize do
         
     | 
| 
       75 
79 
     | 
    
         
             
                    if @bg_worker_thread
         
     | 
| 
       76 
80 
     | 
    
         
             
                      install_handler(sigspec, handler_num)
         
     | 
| 
       77 
81 
     | 
    
         
             
                    else
         
     | 
| 
         @@ -84,11 +88,13 @@ class ServiceSkeleton 
     | 
|
| 
       84 
88 
     | 
    
         
             
                end
         
     | 
| 
       85 
89 
     | 
    
         | 
| 
       86 
90 
     | 
    
         
             
                def start
         
     | 
| 
       87 
     | 
    
         
            -
                   
     | 
| 
      
 91 
     | 
    
         
            +
                  @handler_install_mutex.synchronize do
         
     | 
| 
      
 92 
     | 
    
         
            +
                    logger.info(logloc) { "Starting signal handler with #{@signal_registry.length} hooks" }
         
     | 
| 
       88 
93 
     | 
    
         | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
      
 94 
     | 
    
         
            +
                    @r, @w = IO.pipe
         
     | 
| 
       90 
95 
     | 
    
         | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
      
 96 
     | 
    
         
            +
                    install_signal_handlers
         
     | 
| 
      
 97 
     | 
    
         
            +
                  end
         
     | 
| 
       92 
98 
     | 
    
         | 
| 
       93 
99 
     | 
    
         
             
                  loop do
         
     | 
| 
       94 
100 
     | 
    
         
             
                    begin
         
     | 
| 
         @@ -99,6 +105,7 @@ class ServiceSkeleton 
     | 
|
| 
       99 
105 
     | 
    
         
             
                            break
         
     | 
| 
       100 
106 
     | 
    
         
             
                          else
         
     | 
| 
       101 
107 
     | 
    
         
             
                            c = ios.first.first.read_nonblock(1)
         
     | 
| 
      
 108 
     | 
    
         
            +
                            logger.debug(logloc) { "Received character #{c.inspect} from signal pipe" }
         
     | 
| 
       102 
109 
     | 
    
         
             
                            handle_signal(c)
         
     | 
| 
       103 
110 
     | 
    
         
             
                          end
         
     | 
| 
       104 
111 
     | 
    
         
             
                        else
         
     | 
| 
         @@ -146,6 +153,7 @@ class ServiceSkeleton 
     | 
|
| 
       146 
153 
     | 
    
         
             
                end
         
     | 
| 
       147 
154 
     | 
    
         | 
| 
       148 
155 
     | 
    
         
             
                def install_handler(sigspec, i)
         
     | 
| 
      
 156 
     | 
    
         
            +
                  logger.debug(logloc) { "Installing signal handler for #{sigspec[:signal]}" }
         
     | 
| 
       149 
157 
     | 
    
         
             
                  chain = nil
         
     | 
| 
       150 
158 
     | 
    
         | 
| 
       151 
159 
     | 
    
         
             
                  p = ->(*args) do
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: service_skeleton
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.0.20.gb9a0460
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Matt Palmer
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2019-02-13 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: frankenstein
         
     | 
| 
         @@ -261,6 +261,7 @@ executables: [] 
     | 
|
| 
       261 
261 
     | 
    
         
             
            extensions: []
         
     | 
| 
       262 
262 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       263 
263 
     | 
    
         
             
            files:
         
     | 
| 
      
 264 
     | 
    
         
            +
            - ".editorconfig"
         
     | 
| 
       264 
265 
     | 
    
         
             
            - ".gitignore"
         
     | 
| 
       265 
266 
     | 
    
         
             
            - ".rubocop.yml"
         
     | 
| 
       266 
267 
     | 
    
         
             
            - ".travis.yml"
         
     |