@db_migrate[1]=["ALTER TABLE jobs CHANGE COLUMN id id INTEGER AUTO_INCREMENT NOT NULL",
"ALTER TABLE distributions ADD pkgsvr_password VARCHAR(64)"]
@db_migrate[2]=["ALTER TABLE projects ADD COLUMN status VARCHAR(32) NOT NULL DEFAULT 'OPEN'"]
- @db_migrate[3]=[ "CREATE TABLE job_timestamps (id INTEGER PRIMARY KEY #{db_inc()}, job_id INTEGER, stamp_name VARCHAR(64), stamp_time DATETIME)#{db_post_fix()}"]
+ @db_migrate[3]=["CREATE TABLE job_timestamps (id INTEGER PRIMARY KEY #{db_inc()}, job_id INTEGER, stamp_name VARCHAR(64), stamp_time DATETIME)#{db_post_fix()}",
+ "ALTER TABLE jobs ADD COLUMN error_code VARCHAR(32)"]
else
@db_migrate[1]=["ALTER TABLE distributions ADD pkgsvr_password VARCHAR(64)"]
@db_migrate[2]=["ALTER TABLE projects ADD COLUMN status VARCHAR(32) NOT NULL DEFAULT 'OPEN'"]
- @db_migrate[3]=[ "CREATE TABLE job_timestamps (id INTEGER PRIMARY KEY #{db_inc()}, job_id INTEGER, stamp_name VARCHAR(64), stamp_time DATETIME)#{db_post_fix()}"]
+ @db_migrate[3]=["CREATE TABLE job_timestamps (id INTEGER PRIMARY KEY #{db_inc()}, job_id INTEGER, stamp_name VARCHAR(64), stamp_time DATETIME)#{db_post_fix()}",
+ "ALTER TABLE jobs ADD COLUMN error_code VARCHAR(32)"]
end
end
class CommonJob
attr_accessor :id, :server, :log, :status, :priority
- attr_accessor :os, :type, :pre_jobs, :user_id, :event, :sub_jobs, :thread
+ attr_accessor :os, :type, :pre_jobs, :user_id, :event, :sub_jobs, :thread, :error
USER_JOB_PRIORITY = 100
AUTO_JOB_PRIORITY = 0
@end_time = nil
@thread = nil
@sub_pid = 0
+
+ @error = nil
end
# event check
rescue BuildServerException => e
@log.error( e.err_message, Log::LV_USER )
# "CANCEL" operation(ERR900) must be excluded
- if @status == "WORKING" and e.err_code != "ERR900" then @status = "ERROR" end
+ if @status == "WORKING" and e.err_code != "ERR900" then
+ @status = "ERROR"
+ @error = e
+ end
rescue => e
@log.error e.message
@log.error e.backtrace.inspect
status VARCHAR(32) NOT NULL DEFAULT 'JUST_CREATED',
start_time DATETIME,
end_time DATETIME,
+ error_code VARCHAR(32),
CONSTRAINT fk_jobs_projects1 FOREIGN KEY ( project_id ) REFERENCES projects ( id ),
CONSTRAINT fk_jobs_users1 FOREIGN KEY ( user_id ) REFERENCES users ( id ),
CONSTRAINT fk_jobs_supported_os1 FOREIGN KEY ( supported_os_id ) REFERENCES supported_os ( id ),
@end_time = Time.now
db.do "UPDATE jobs SET end_time=#{now} WHERE id=#{@id}"
+ if @status == "ERROR" and not @error.nil? then
+ db.do "UPDATE jobs SET error_code='#{@error.err_code}' WHERE id=#{@id}"
+ end
end
end
end
@server.log.info "Checking the job \"#{job.id}\" was finished!"
rescue BuildServerException => e
@server.log.info "Initializig the job \"#{job.id}\" failed!"
- if e.err_code != "ERR900" then job.status = "ERROR" end
+ if e.err_code != "ERR900" then
+ job.status = "ERROR"
+ end
if not job.log.nil? then
job.log.error(e.err_message(""), Log::LV_USER)
else
@server.log.error e.message
end
if job.status == "ERROR" then
+ job.error = e
job.terminate()
save_job_status(job)
end
job.add_timestamp("INIT_END")
end
rescue BuildServerException => e
- if e.err_code != "ERR900" then job.status = "ERROR" end
+ if e.err_code != "ERR900" then
+ job.error = e
+ job.status = "ERROR"
+ end
@log.error( "Failed to initialize sub-job \"#{job.get_project().name}\" for #{job.os}. (#{job.id})", Log::LV_USER)
@log.error( " * #{e.err_message("")}", Log::LV_USER)
tstatus = "ERROR"