From: jiil.hyoun Date: Thu, 7 Mar 2013 05:50:21 +0000 (+0900) Subject: [Title] set job id using DB Function X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6d8e270a6ffcabf88bf732c77b9f06bad862ae1a;p=sdk%2Ftools%2Fsdk-build.git [Title] set job id using DB Function [Type] Enhancement [Module] Toolchain / [Priority] Major [Jira#] [Redmine#] 7955 [Problem] [Cause] [Solution] [TestCase] Change-Id: I5c58746205500191a546ba9e2825639c7ae0edea --- diff --git a/src/build_server/BuildJob.rb b/src/build_server/BuildJob.rb index a762b8c..18a98cc 100644 --- a/src/build_server/BuildJob.rb +++ b/src/build_server/BuildJob.rb @@ -69,10 +69,6 @@ class BuildJob < CommonJob @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 diff --git a/src/build_server/BuildServer.rb b/src/build_server/BuildServer.rb index 4bbd5d7..041f7ce 100644 --- a/src/build_server/BuildServer.rb +++ b/src/build_server/BuildServer.rb @@ -105,12 +105,11 @@ class BuildServer @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 @@ -209,6 +208,11 @@ class BuildServer 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 @@ -537,6 +541,7 @@ class BuildServer 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 @@ -562,6 +567,12 @@ class BuildServer 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] @@ -663,7 +674,7 @@ class BuildServer 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 diff --git a/src/build_server/CommonJob.rb b/src/build_server/CommonJob.rb index 92aea5a..c6409e7 100644 --- a/src/build_server/CommonJob.rb +++ b/src/build_server/CommonJob.rb @@ -42,13 +42,8 @@ class CommonJob # 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 @@ -66,7 +61,6 @@ class CommonJob @start_time = Time.now @end_time = nil - @sub_pid = 0 end @@ -223,9 +217,9 @@ class CommonJob 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, @@ -252,14 +246,14 @@ class CommonJob 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" diff --git a/src/build_server/GitBuildJob.rb b/src/build_server/GitBuildJob.rb index 301d810..34e0dde 100644 --- a/src/build_server/GitBuildJob.rb +++ b/src/build_server/GitBuildJob.rb @@ -111,6 +111,11 @@ class GitBuildJob < BuildJob # 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 diff --git a/src/build_server/JobManager.rb b/src/build_server/JobManager.rb index e5afdd5..2e4d2fb 100644 --- a/src/build_server/JobManager.rb +++ b/src/build_server/JobManager.rb @@ -91,23 +91,6 @@ class JobManager 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| @@ -506,6 +489,14 @@ class JobManager # 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| diff --git a/src/build_server/MultiBuildJob.rb b/src/build_server/MultiBuildJob.rb index b4d899b..7eca967 100644 --- a/src/build_server/MultiBuildJob.rb +++ b/src/build_server/MultiBuildJob.rb @@ -55,11 +55,6 @@ class MultiBuildJob < CommonJob @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 @@ -86,6 +81,11 @@ class MultiBuildJob < CommonJob # 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 diff --git a/src/build_server/RegisterPackageJob.rb b/src/build_server/RegisterPackageJob.rb index 839ce47..97efea1 100644 --- a/src/build_server/RegisterPackageJob.rb +++ b/src/build_server/RegisterPackageJob.rb @@ -65,10 +65,6 @@ class RegisterPackageJob < CommonJob @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 @@ -129,6 +125,10 @@ class RegisterPackageJob < CommonJob # 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 diff --git a/src/build_server/SocketJobRequestListener.rb b/src/build_server/SocketJobRequestListener.rb index bb1ecd6..a6dbba1 100644 --- a/src/build_server/SocketJobRequestListener.rb +++ b/src/build_server/SocketJobRequestListener.rb @@ -309,6 +309,8 @@ class SocketJobRequestListener # 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) @@ -759,6 +761,8 @@ class SocketJobRequestListener # 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 ) @@ -872,6 +876,8 @@ class SocketJobRequestListener # 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) diff --git a/src/common/db_utils.rb b/src/common/db_utils.rb index 159b95f..7606420 100644 --- a/src/common/db_utils.rb +++ b/src/common/db_utils.rb @@ -30,8 +30,10 @@ class DBUtils 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(':')