X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c685ee1c4445712da0b135206b4e032b3af21b9b..9e2357191ca21631bcb6d8cf7a640d456a1a6cfa:/services/api/script/crunch-dispatch.rb diff --git a/services/api/script/crunch-dispatch.rb b/services/api/script/crunch-dispatch.rb index bfb0dc16ed..d316d92d60 100755 --- a/services/api/script/crunch-dispatch.rb +++ b/services/api/script/crunch-dispatch.rb @@ -17,6 +17,8 @@ if not ($options[:jobs] or $options[:pipelines]) abort "Nothing to do. Please specify at least one of: --jobs, --pipelines." end +ARGV.reject! { |a| a =~ /--jobs|--pipelines/ } + $warned = {} $signal = {} %w{TERM INT}.each do |sig| @@ -51,7 +53,7 @@ class Dispatcher def refresh_todo @todo = [] if $options[:jobs] - @todo = Job.queue.select(&:repository) end + @todo = Job.queue.select(&:repository) end @todo_pipelines = [] if $options[:pipelines] @@ -340,12 +342,16 @@ class Dispatcher $stderr.print "#{job_uuid} ! " unless line.index(job_uuid) $stderr.puts line pub_msg = "#{Time.now.ctime.to_s} #{line.strip} \n" - j[:stderr_buf_to_flush] << pub_msg + if not j[:log_truncated] + j[:stderr_buf_to_flush] << pub_msg + end end - if (Rails.configuration.crunch_log_bytes_per_event < j[:stderr_buf_to_flush].size or - (j[:stderr_flushed_at] + Rails.configuration.crunch_log_seconds_between_events < Time.now.to_i)) - write_log j + if not j[:log_truncated] + if (Rails.configuration.crunch_log_bytes_per_event < j[:stderr_buf_to_flush].size or + (j[:stderr_flushed_at] + Rails.configuration.crunch_log_seconds_between_events < Time.now.to_i)) + write_log j + end end end end @@ -510,36 +516,32 @@ class Dispatcher # send message to log table. we want these records to be transient def write_log running_job + return if running_job[:log_truncated] + return if running_job[:stderr_buf_to_flush] == '' begin - if (running_job && running_job[:stderr_buf_to_flush] != '') - # Truncate logs if they exceed crunch_limit_log_event_bytes_per_job - # or crunch_limit_log_events_per_job. - if (too_many_bytes_logged_for_job(running_job)) - return if running_job[:log_truncated] - running_job[:log_truncated] = true - running_job[:stderr_buf_to_flush] = - "Server configured limit reached (crunch_limit_log_event_bytes_per_job: #{Rails.configuration.crunch_limit_log_event_bytes_per_job}). Subsequent logs truncated" - elsif (too_many_events_logged_for_job(running_job)) - return if running_job[:log_truncated] - running_job[:log_truncated] = true - running_job[:stderr_buf_to_flush] = - "Server configured limit reached (crunch_limit_log_events_per_job: #{Rails.configuration.crunch_limit_log_events_per_job}). Subsequent logs truncated" - end - log = Log.new(object_uuid: running_job[:job].uuid, - event_type: 'stderr', - owner_uuid: running_job[:job].owner_uuid, - properties: {"text" => running_job[:stderr_buf_to_flush]}) - log.save! - running_job[:bytes_logged] += running_job[:stderr_buf_to_flush].size - running_job[:events_logged] += 1 - running_job[:stderr_buf_to_flush] = '' - running_job[:stderr_flushed_at] = Time.now.to_i + # Truncate logs if they exceed crunch_limit_log_event_bytes_per_job + # or crunch_limit_log_events_per_job. + if (too_many_bytes_logged_for_job(running_job)) + running_job[:log_truncated] = true + running_job[:stderr_buf_to_flush] = + "Server configured limit reached (crunch_limit_log_event_bytes_per_job: #{Rails.configuration.crunch_limit_log_event_bytes_per_job}). Subsequent logs truncated" + elsif (too_many_events_logged_for_job(running_job)) + running_job[:log_truncated] = true + running_job[:stderr_buf_to_flush] = + "Server configured limit reached (crunch_limit_log_events_per_job: #{Rails.configuration.crunch_limit_log_events_per_job}). Subsequent logs truncated" end + log = Log.new(object_uuid: running_job[:job].uuid, + event_type: 'stderr', + owner_uuid: running_job[:job].owner_uuid, + properties: {"text" => running_job[:stderr_buf_to_flush]}) + log.save! + running_job[:bytes_logged] += running_job[:stderr_buf_to_flush].size + running_job[:events_logged] += 1 rescue - running_job[:stderr_buf] = "Failed to write logs \n" - running_job[:stderr_buf_to_flush] = '' - running_job[:stderr_flushed_at] = Time.now.to_i + running_job[:stderr_buf] = "Failed to write logs\n" + running_job[:stderr_buf] end + running_job[:stderr_buf_to_flush] = '' + running_job[:stderr_flushed_at] = Time.now.to_i end end