https://bugzilla.redhat.com/show_bug.cgi?id=643150
For any attempted build that throws an error, set the status
of that build to failed, empty the current build list, and
start fresh without the problematic build in queue.
---
src/image_builder_service/image_builder_service | 29 +++++++++++++++++-----
1 files changed, 22 insertions(+), 7 deletions(-)
diff --git a/src/image_builder_service/image_builder_service
b/src/image_builder_service/image_builder_service
index 0ffb74d..db1e888 100755
--- a/src/image_builder_service/image_builder_service
+++ b/src/image_builder_service/image_builder_service
@@ -199,13 +199,28 @@ class ImageBuilderService
loop do
check_for_queued
@activebuilds.delete_if do |ab|
- cur_status = @console.check_status(ab[:build])
- update_agg(ab, cur_status) unless cur_status.eql?(ab[:status])
- @log.debug "========================================"
- @log.debug "Status for target " + ab[:build].target + ": " +
cur_status
- @log.debug "Builds in array: " + check_build_num.to_s
- @log.debug "========================================"
- Image::INACTIVE_STATES.include?(cur_status)
+ begin
+ cur_status = @console.check_status(ab[:build])
+ update_agg(ab, cur_status) unless cur_status.eql?(ab[:status])
+ @log.debug "========================================"
+ @log.debug "Status for target " + ab[:build].target + ": "
+ cur_status
+ @log.debug "Builds in array: " + check_build_num.to_s
+ @log.debug "========================================"
+ Image::INACTIVE_STATES.include?(cur_status)
+ rescue => e
+ @log.fatal "#{e.backtrace.shift}: #{e.message}"
+ e.backtrace.each do |step|
+ @log.fatal "\tfrom #{step}"
+ end
+ @log.info "Something very bad happened. Setting image (id: #{ab[:ar_id]})
to failed"
+ image = Image.find(:first, :conditions => { :target =>
ab[:build].target.to_s,
+ :template_id => ab[:ar_id].to_i
})
+ unless image.nil?
+ image.status = "failed"
+ image.save!
+ end
+ @activebuilds = []
+ end
end
sleep @timeout
--
1.7.2.3