diff options
| author | Steve Kemp <steve@steve.org.uk> | 2015-02-18 04:10:36 +0000 | 
|---|---|---|
| committer | Steve Kemp <steve@steve.org.uk> | 2015-02-18 04:10:36 +0000 | 
| commit | 672f39245744ad3fdaf37afa9b39d7d5327aad7e (patch) | |
| tree | f59c6f1e16acc8a39fb2e554812b94cacb33a478 /lib/custodian | |
| parent | 31632d46e83914a29a75dab4e0c7a4f36f5ad405 (diff) | |
Updated the way we wait for jobs.
The new approach uses the redis gems timeout functionality
and ensures we never return a null-job.  Instead we timeout
and repeat with a stalling-sleep in the way.
This closes #9553.
Diffstat (limited to 'lib/custodian')
| -rw-r--r-- | lib/custodian/queue.rb | 22 | 
1 files changed, 7 insertions, 15 deletions
| diff --git a/lib/custodian/queue.rb b/lib/custodian/queue.rb index 9a7d90f..c48bba3 100644 --- a/lib/custodian/queue.rb +++ b/lib/custodian/queue.rb @@ -87,27 +87,19 @@ end      #      #  Fetch a job from the queue.      # -    #  The timeout is used to specify the period we wait for a new job. +    #  The timeout is used to specify the period we wait for a new job, and +    # we pause that same period between fetches.      # -    def fetch(timeout) +    def fetch(timeout = 1)        job = nil -      timeout ||= 0 -      #  -      # Don't melt the CPU. -      # -      sleep_interval = 0.5 +      while( 1 ) -      loop do -        job = @redis.lpop( "queue" ) -        break if job or timeout < 0 +        foo, job = @redis.blpop( "queue", :timeout => timeout ) +        return job if ( job ) -        sleep( sleep_interval ) - -        timeout -= sleep_interval +        sleep( timeout )        end - -      return( job )      end      # | 
