Method: OpenTox::Task#wait_for_completion

Defined in:
lib/task.rb

#wait_for_completion(waiting_task = nil) ⇒ Object

waits for a task, unless time exceeds or state is no longer running

Parameters:

  • waiting_task (optional, OpenTox::Task) (defaults to: nil)

    (can be a OpenTox::Subtask as well), progress is updated accordingly

  • dur (optional, Numeric)

    seconds pausing before cheking again for completion



245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
# File 'lib/task.rb', line 245

def wait_for_completion( waiting_task=nil)
  
  waiting_task.waiting_for(self.uri) if waiting_task
  due_to_time = Time.new + DEFAULT_TASK_MAX_DURATION
  start_time = Time.new
  dur = 0
  LOGGER.debug "start waiting for task "+@uri.to_s+" at: "+Time.new.to_s+", waiting at least until "+due_to_time.to_s
  
   # for extremely fast tasks
  check_state
  while self.running? or self.queued?
    sleep dur
    dur = [[(Time.new - start_time)/20.0,0.3].max,300.0].min
    #LOGGER.debug "task-object-id: #{self.object_id} - wait: #{"%.2f"%(Time.new - start_time)} - dur: #{"%.2f"%dur}"
     
    # if another (sub)task is waiting for self, set progress accordingly 
    waiting_task.progress([OT.percentageCompleted].to_f) if waiting_task
    check_state
    if (Time.new > due_to_time)
      raise "max wait time exceeded ("+DEFAULT_TASK_MAX_DURATION.to_s+"sec), task: '"+@uri.to_s+"'"
    end
  end
  waiting_task.waiting_for(nil) if waiting_task
  LOGGER.debug "Task '"+[OT.hasStatus].to_s+"': "+@uri.to_s+", Result: "+[OT.resultURI].to_s
end