From a9063becb31ffd23aa3c1e759565217e0755bc9b Mon Sep 17 00:00:00 2001 From: Steve Kemp Date: Tue, 17 Feb 2015 19:48:25 +0000 Subject: Changed the way that we process a single job. We now work on the assumption that a single "job", pulled from the queue, might contain multiple "test" objects. These are the instances of the protocol-testers which we actually execute. This is part of #9558. --- lib/custodian/worker.rb | 77 ++++++++++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 29 deletions(-) diff --git a/lib/custodian/worker.rb b/lib/custodian/worker.rb index 78e7cf0..067f98c 100644 --- a/lib/custodian/worker.rb +++ b/lib/custodian/worker.rb @@ -128,46 +128,62 @@ module Custodian - # - # Fetch a single job from the queue, and process it. + # Fetch a single job from the queue, and dispatch it for + # processing. # def process_single_job - result = false - - begin - - # - # Acquire a job. - # - job = @queue.fetch(1) - log_message( "Job aquired: #{job}" ) + # + # Acquire a job from our queue. + # + job = @queue.fetch(1) + + # + # Ensure that the job is sane. + # + raise ArgumentError, "Job was empty" if (job.nil?) + raise ArgumentError, "Job was not a string" unless job.kind_of?(String) + + + # + # Create the test-object from our class-factory + # + # TODO: Here is where we'd handle multiple test-implementations + # instead of .create returning a single Test-object it would + # return an array of same. + # + test = Custodian::TestFactory.create( job ) + + # + # + # + # Now process it. + # + process_single_test( test ) + end - # - # Get the job body - # - raise ArgumentError, "Job was empty" if (job.nil?) - raise ArgumentError, "Job was not a string" unless job.kind_of?(String) + # + # Fetch a single job from the queue, and process it. + # + def process_single_test( test ) - # - # The count of times this test has run. - # - count = 1 + begin + log_message( "Received job: #{test.to_s}" ) # - # Create the test-object. + # The count of times this test has run, the result, and the start-time # - test = Custodian::TestFactory.create( job ) - + count = 1 + result = false start_time = Time.now # - # We'll run no more than MAX times. + # If a job fails we'll repeat it, but no more than MAX times. # - # We stop the execution on a single success. + # We exit here if we receive a single success. # while ( ( count < ( @retry_count + 1 ) ) && ( result == false ) ) @@ -182,11 +198,10 @@ module Custodian if ( result ) log_message( "Test succeeed - clearing alert" ) do_clear( test ) - success = true end # - # Some of our routers don't like being hammered. + # Some of our routers/hosts don't like being hammered. # # We delay before re-testing, but we only do this if # we're not on the last count. @@ -200,7 +215,7 @@ module Custodian end # - # Increase count. + # Increase the log of times we've repeated the test. # count += 1 end @@ -210,12 +225,16 @@ module Custodian # end_time = Time.now - # # Duration of the test-run, in milliseconds # duration = (( end_time - start_time ) * 1000.0).to_i + + # + # Record that, if we have any alerters that are interested + # in run-times. + # do_duration( test, duration ) -- cgit v1.2.1