class CommonJob
attr_accessor :id, :server, :log, :status, :priority
- attr_accessor :os, :type, :pre_jobs, :user_id, :event
+ attr_accessor :os, :type, :pre_jobs, :user_id, :event, :sub_jobs
USER_JOB_PRIORITY = 100
AUTO_JOB_PRIORITY = 0
#cancel
public
def cancel()
- # kill sub process if exist?
- kill_sub_process()
-
- @sub_jobs.select{|x| x.event == "NONE"}.each do |sub|
- sub.event = "CANCEL"
- end
if not @log.nil? then
@log.info( "JOB is canceled by cancel operation !!", Log::LV_USER)
end
def lock_event(&block)
@event_lock.synchronize do
if not @locked then
- @locked = true
yield if block_given?
+ @locked = true
else
raise BuildServerException.new("ERR901"),"JOB ##{@id} alreay in Upload status\n - cancel failed"
end
end
+ def kill_sub_process()
+ if @sub_pid != 0 then
+ if not @log.nil? then
+ @log.info("Killing sub process! id = #{@sub_pid}")
+ end
+ Utils.kill_process(@sub_pid)
+ end
+ end
+
+
#
# PROTECTED METHODS
#
def job_main
# do nothing
end
-
-
- protected
- def kill_sub_process()
- if @sub_pid != 0 then
- if not @log.nil? then
- @log.info("Killing sub process! id = #{@sub_pid}")
- end
- Utils.kill_process(@sub_pid)
- end
- end
end
save_job_status(job)
Thread.current.exit
end
+ job.check_event
if job.status == "INITIALIZING" then
job.status = "WAITING"
save_job_status(job)
@server.log.info "Creating thread for canceling the job \"#{job.id}\""
Thread.new do
begin
+ job.kill_sub_process
+
+ job.sub_jobs.select{|x| x.event == "NONE" and x.status != "FINISHED" and x.status != "ERROR" and x.status != "CANCELED" }.each do |sub|
+ sub.event = "CANCEL"
+ end
+ job.thread.join if not job.thread.nil?
+
# job cacncel
job.cancel