@pkgsvr_ip = ""
@pkgsvr_port = ""
end
- @job_root = "#{@server.path}/jobs/#{@id}"
- @source_path = @job_root+"/temp"
- @job_working_dir=@job_root+"/works"
- @buildroot_dir = "#{@job_root}/buildroot"
# this item will be initialized on pre-verify
@pkginfo = nil
@db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
@db_user = nil
@db_passwd = nil
- @db_version = 1
+ @db_version = 2
@sqlite3_db_mutex = Mutex.new
#DB upgrade SQL command
@db_migrate = []
- #@db_migrate[0]= ["CREATE TABLE test(value INTEGER)", "INSERT INTO test (value) VALUES('3')"]
end
def send_mail
def db_now
return (@db_dsn =~ /^Mysql/i) ? "NOW()" : "datetime('now')"
end
+
+ def db_insert_id(db)
+ return (@db_dsn =~ /^Mysql/i) ? db.func(:insert_id) : db.select_one("SELECT last_insert_rowid()")[0]
+ end
+
# start server daemon
def start
# set build cache dir
def db_upgrade
result = true
create = false
+ load_migrate_list
begin
db = DBI.connect("DBI:#{@db_dsn}", @db_user, @db_passwd)
db_version = db.select_one("SELECT (value) FROM server_configs WHERE property = 'db_version'")[0].to_i
return result
end
+ def load_migrate_list
+ if @db_dsn =~ /^Mysql/i then
+ @db_migrate[2]=["ALTER TABLE jobs CHANGE COLUMN id id INTEGER AUTO_INCREMENT NOT NULL"]
+ end
+ end
+
def gen_db()
hash = DBUtils.dsn_parser @db_dsn
case hash[:database]
CONSTRAINT fk_groups_has_projects_projects1 FOREIGN KEY ( project_id ) REFERENCES projects ( id ) )#{post_fix}"
# JOBS
- CommonJob.create_table(db, post_fix)
+ CommonJob.create_table(db, inc, post_fix)
end
return result
# initialize
public
def initialize(server, id=nil)
+ @id = nil
@server = server
- if not server.jobmgr.nil? then
- @id = server.jobmgr.get_new_job_id()
- else
- @id = 0
- end
-
@parent = nil
@sub_jobs = []
@priority = USER_JOB_PRIORITY # higher numbered job get priority
@start_time = Time.now
@end_time = nil
-
@sub_pid = 0
end
end
public
- def self.create_table(db, post_fix)
+ def self.create_table(db, inc, post_fix)
db.do "CREATE TABLE jobs (
- id INTEGER PRIMARY KEY,
+ id INTEGER PRIMARY KEY #{inc},
project_id INTEGER,
user_id INTEGER NOT NULL,
supported_os_id INTEGER,
def save(db, now)
prj_id = @project.nil? ? "NULL" : @project.get_project_id()
- row=db.select_one("SELECT * FROM jobs WHERE id=#{@id}")
- if row.nil? then
+ if @id.nil? then
start_time = @start_time.strftime("%F %T")
os_id = BuildServer.get_supported_os_id(db, @os)
dist_id = PackageDistribution.get_distribution_id(db, get_distribution_name())
parent_id = @parent.nil? ? "NULL" : @parent.id
- db.do "INSERT INTO jobs(id,project_id,user_id,supported_os_id, distribution_id, parent_job_id,jtype,status,start_time)
- VALUES (#{@id},#{prj_id},#{@user_id},#{os_id},#{dist_id},#{parent_id},'#{@type}','#{@status}',#{now})"
+ db.do "INSERT INTO jobs(project_id,user_id,supported_os_id, distribution_id, parent_job_id,jtype,status,start_time)
+ VALUES (#{prj_id},#{@user_id},#{os_id},#{dist_id},#{parent_id},'#{@type}','#{@status}',#{now})"
+ @id = @server.db_insert_id(db)
else
remote_bs_id = (@type == "BUILD" and not get_remote_server().nil?) ?
get_remote_server().id : "NULL"
# verify
def init
+ @job_root = "#{@server.path}/jobs/#{@id}"
+ @source_path = @job_root+"/temp"
+ @job_working_dir=@job_root+"/works"
+ @buildroot_dir = "#{@job_root}/buildroot"
+
# mkdir job root
if not File.exist? @job_root then FileUtils.mkdir_p @job_root end
end
- # get new id
- def get_new_job_id
- new_idx = 0
- @latest_job_touch.synchronize do
- new_idx = @new_job_index
-
- file_path = "#{BuildServer::CONFIG_ROOT}/#{@server.id}/latest_job"
- File.open( file_path, "w" ) do |f|
- f.puts "#{@new_job_index}"
- end
-
- @new_job_index += 1
- end
-
- return new_idx
- end
-
def is_user_accessable(job,user_id)
if job.type == "MULTIBUILD" then
job.get_sub_jobs().each do |subjob|
# return result
#end
+ def commit_job(job)
+ result = save_job_status(job)
+ job.sub_jobs.each do |j|
+ save_job_status(j)
+ end
+ return result
+ end
+
def save_job_status(job)
now = @server.db_now
result = @server.get_db_connection() do |db|
@pkgsvr_url = nil
@pkgsvr_ip = nil
@pkgsvr_port = nil
- @job_root = "#{@server.path}/jobs/#{@id}"
- @source_path = @job_root+"/temp"
- @job_working_dir=@job_root+"/works"
- @buildroot_dir = "#{@job_root}/buildroot"
-
end
#
def init
+ @job_root = "#{@server.path}/jobs/#{@id}"
+ @source_path = @job_root+"/temp"
+ @job_working_dir=@job_root+"/works"
+ @buildroot_dir = "#{@job_root}/buildroot"
+
# mkdir
if not File.exist? @job_root then
FileUtils.mkdir_p @job_root
@pkgsvr_ip = @server.distmgr.get_distribution(dist_name).pkgsvr_ip
@pkgsvr_port = @server.distmgr.get_distribution(dist_name).pkgsvr_port
end
- @job_root = "#{@server.path}/jobs/#{@id}"
- @source_path = @job_root+"/temp"
- @job_working_dir=@job_root+"/works"
- @buildroot_dir = "#{@job_root}/buildroot"
@local_path=local_path
@file_path = nil
#
def init
+ @job_root = "#{@server.path}/jobs/#{@id}"
+ @source_path = @job_root+"/temp"
+ @job_working_dir=@job_root+"/works"
+ @buildroot_dir = "#{@job_root}/buildroot"
# mkdir
if not File.exist? @job_root then
FileUtils.mkdir_p @job_root
# check reverse build
if no_reverse then new_job.set_no_reverse end
+ @parent_server.jobmgr.commit_job(new_job)
+
# create logger and set
if async then
new_job.create_logger( nil, verbose)
# create full build job
new_job = @parent_server.prjmgr.create_new_full_build_job(dist_name)
+ @parent_server.jobmgr.commit_job(new_job)
+
# set logger
new_job.create_logger( req )
# check reverse build
if no_reverse then new_job.set_no_reverse end
+ @parent_server.jobmgr.commit_job(new_job)
+
# create logger and set
logger = new_job.create_logger(req)
def DBUtils.dsn_parser (db_dsn)
dsn_hash={}
case db_dsn
- when /^SQLite3:/ then puts "SQLite3 DB#{db_dsn.split(':')[1]} generating"
+ when /^SQLite3:/ then
dsn_hash[:database] = "SQLite3"
+ dsn = db_dsn.split(':')
+ dsn_hash[:name] = dsn[1].strip
when /^Mysql:/ then
dsn_hash[:database] = "Mysql"
dsn = db_dsn.split(':')