From: donghee yang Date: Mon, 26 Nov 2012 07:54:23 +0000 (+0900) Subject: [Title] Changed DB schema for JOB X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8504699388c2a13a63a2d42ee7917ae2fb8b2cd9;p=sdk%2Ftools%2Fsdk-build.git [Title] Changed DB schema for JOB --- diff --git a/src/build_server/BuildJob.rb b/src/build_server/BuildJob.rb index dd90a84..c94f4ff 100644 --- a/src/build_server/BuildJob.rb +++ b/src/build_server/BuildJob.rb @@ -140,6 +140,12 @@ class BuildJob < CommonJob @remote_server=server end + + def get_remote_server() + return @remote_server + end + + def set_no_reverse() @no_reverse = true end diff --git a/src/build_server/BuildServer.rb b/src/build_server/BuildServer.rb index a3ab91c..72fe4f5 100644 --- a/src/build_server/BuildServer.rb +++ b/src/build_server/BuildServer.rb @@ -282,31 +282,19 @@ class BuildServer def get_remote_servers() - result = [] - rows = nil get_db_connection() do |db| - rows = db.select_all("SELECT * FROM remote_build_servers") - end - - if not rows.nil? then - rows.each do |row| - svr_ip,svr_port=row['svr_addr'].strip.split(":") - result.push RemoteBuildServer.new( svr_ip, svr_port, self ) - end + return RemoteBuildServer.load_all(db) end - - return result end # add new remote friend server def add_remote_server( ip, port ) - saddr="#{ip}:#{port}" get_db_connection() do |db| - row = db.select_one("SELECT * FROM remote_build_servers WHERE svr_addr='#{saddr}'") - if not row.nil? then return false end - db.do "INSERT INTO remote_build_servers (svr_addr) VALUES ('#{saddr}')" + rs = RemoteBuildServer.load(ip, port, db) + if not rs.nil? then return false end + RemoteBuildServer.new(ip, port, "").save(db) end return true @@ -315,11 +303,10 @@ class BuildServer # remove remote friend server def remove_remote_server( ip, port ) - saddr="#{ip}:#{port}" get_db_connection() do |db| - row = db.select_one("SELECT * FROM remote_build_servers WHERE svr_addr='#{svr_addr}'") - if row.nil? then return false end - db.do("DELETE FROM remote_build_servers WHERE svr_addr='#{svr_addr}'") + rs = RemoteBuildServer.load(ip, port, db) + if rs.nil? then return false end + rs.unload(db) end return true @@ -408,6 +395,16 @@ class BuildServer end + def self.get_supported_os_id(db, os_name) + row = db.select_one("SELECT * FROM supported_os WHERE name='#{os_name}'") + if not row.nil? then + return row['id'] + else + return "NULL" + end + end + + # get remote server def get_available_server ( job ) candidates = [] @@ -624,9 +621,13 @@ class BuildServer description VARCHAR(255), CONSTRAINT fk_sync_pkg_servers_distributions1 FOREIGN KEY ( distribution_id ) REFERENCES distributions ( id ) ) #{post_fix}" - db.do "CREATE TABLE remote_build_servers ( id INTEGER PRIMARY KEY #{inc}, svr_addr VARCHAR(64) NOT NULL UNIQUE, description VARCHAR(256) )#{post_fix}" - db.do "CREATE TABLE supported_os ( id INTEGER PRIMARY KEY #{inc}, os_category_id INTEGER NOT NULL, name VARCHAR(32) NOT NULL UNIQUE, - CONSTRAINT fk_supported_os_os_category1 FOREIGN KEY ( os_category_id ) REFERENCES os_category ( id ) ) #{post_fix}" + RemoteBuildServer.create_table(db, inc, post_fix) + + db.do "CREATE TABLE supported_os ( + id INTEGER PRIMARY KEY #{inc}, + os_category_id INTEGER NOT NULL, + name VARCHAR(32) NOT NULL UNIQUE, + CONSTRAINT fk_supported_os_os_category1 FOREIGN KEY ( os_category_id ) REFERENCES os_category ( id ) ) #{post_fix}" # USERS/GROUPS # users @@ -655,7 +656,7 @@ class BuildServer CONSTRAINT fk_groups_has_projects_projects1 FOREIGN KEY ( project_id ) REFERENCES projects ( id ) )#{post_fix}" # JOBS - db.do "CREATE TABLE jobs(id INTEGER PRIMARY KEY, jtype VARCHAR(32), os_name VARCHAR(32), user_id INTEGER, parent_job_id INTEGER, status VARCHAR(32), prj_id INTEGER, dist_name VARCHAR(32), start_time VARCHAR(32), end_time VARCHAR(32) )" + CommonJob.create_table(db, post_fix) end return result diff --git a/src/build_server/CommonJob.rb b/src/build_server/CommonJob.rb index b46b406..23b8ba3 100644 --- a/src/build_server/CommonJob.rb +++ b/src/build_server/CommonJob.rb @@ -52,7 +52,7 @@ class CommonJob @type = "Unknown" @pre_jobs = [] #pre-requisite jobs @project = nil - @user_id = 0 + @user_id = 1 @status = "JUST_CREATED" @log = nil @@ -189,25 +189,57 @@ class CommonJob end + public + def self.create_table(db, post_fix) + db.do "CREATE TABLE jobs ( + id INTEGER PRIMARY KEY, + project_id INTEGER, + user_id INTEGER NOT NULL, + supported_os_id INTEGER, + distribution_id INTEGER, + parent_job_id INTEGER, + remote_build_server_id INTEGER, + source_id INTEGER, + jtype VARCHAR(32) NOT NULL, + status VARCHAR(32) NOT NULL DEFAULT 'JUST_CREATED', + start_time DATETIME, + end_time DATETIME, + 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 ), + CONSTRAINT fk_jobs_distributions1 FOREIGN KEY ( distribution_id ) REFERENCES distributions ( id ), + CONSTRAINT fk_jobs_jobs1 FOREIGN KEY ( parent_job_id ) REFERENCES jobs ( id ), + CONSTRAINT fk_jobs_sources1 FOREIGN KEY ( source_id ) REFERENCES sources ( id ), + CONSTRAINT fk_jobs_remote_build_servers1 FOREIGN KEY ( remote_build_server_id ) REFERENCES remote_build_servers ( id ) )#{post_fix}" + end + + # save to db + public def save(db) - if @project.nil? then - prj_id = -1 - else - prj_id = @project.get_project_id() - end - dist_name = get_distribution_name() - parent_id = @parent.nil? ? -1 : @parent.id + prj_id = @project.nil? ? "NULL" : @project.get_project_id() row=db.select_one("SELECT * FROM jobs WHERE id=#{@id}") if row.nil? then start_time = @start_time.strftime("%F %T") - db.do "INSERT INTO jobs VALUES (#{@id},'#{@type}','#{@os}', #{@user_id}, #{parent_id}, '#{@status}', #{prj_id}, '#{dist_name}', '#{start_time}', '')" + 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())" else - db.do "UPDATE jobs SET status='#{@status}' WHERE id=#{@id}" + remote_bs_id = (@type == "BUILD" and not get_remote_server().nil?) ? + get_remote_server().id : "NULL" + if @status == "FINISHED" and not @project.nil? and + (@type == "BUILD" or @type == "REGISTER") then + source_id = @project.get_source_id_from_ver(pkginfo.get_version(),db) + db.do "UPDATE jobs SET source_id=#{source_id} WHERE id=#{@id}" + end + db.do "UPDATE jobs SET status='#{@status}',remote_build_server_id=#{remote_bs_id} + WHERE id=#{@id}" if @status == "FINISHED" or @status == "ERROR" or @status == "CANCELED" then @end_time = Time.now.strftime("%F %T") - db.do "UPDATE jobs SET end_time='#{@end_time}' WHERE id=#{@id}" + db.do "UPDATE jobs SET end_time=NOW() WHERE id=#{@id}" end end end diff --git a/src/build_server/CommonProject.rb b/src/build_server/CommonProject.rb index 062975c..61eb39f 100644 --- a/src/build_server/CommonProject.rb +++ b/src/build_server/CommonProject.rb @@ -283,6 +283,17 @@ class CommonProject end + public + def get_source_id_from_ver( src_ver, db ) + row=db.select_one("SELECT * FROM sources WHERE project_id=#{@prj_id} and pkg_ver='#{src_ver}'") + if row.nil? then + return "NULL" + else + return row['id'] + end + end + + protected def save_source_info_internal(src_ver, info, db) row1=db.select_one("SELECT * FROM sources WHERE project_id=#{@prj_id} and pkg_ver='#{src_ver}'") diff --git a/src/build_server/DistributionManager.rb b/src/build_server/DistributionManager.rb index d758d88..2ca7177 100644 --- a/src/build_server/DistributionManager.rb +++ b/src/build_server/DistributionManager.rb @@ -114,6 +114,16 @@ class PackageDistribution db.do "UPDATE distributions SET pkgsvr_url='#{@pkgsvr_url}', pkgsvr_addr='#{dist_addr}', status='#{@status}', description='#{@description}' WHERE name='#{@name}'" end end + + + def self.get_distribution_id(db, dist_name) + row = db.select_one("SELECT * FROM distributions WHERE name='#{dist_name}'") + if row.nil? then + return "NULL" + else + return row['id'] + end + end end diff --git a/src/build_server/RemoteBuildServer.rb b/src/build_server/RemoteBuildServer.rb index a244d2a..e4089e6 100644 --- a/src/build_server/RemoteBuildServer.rb +++ b/src/build_server/RemoteBuildServer.rb @@ -33,15 +33,17 @@ require "BuildComm.rb" require 'thread' class RemoteBuildServer - attr_accessor :ip, :port, :status, :host_os + attr_accessor :id, :ip, :port, :description, :status, :host_os attr_accessor :max_working_jobs, :working_jobs, :waiting_jobs attr_accessor :path attr_accessor :jobmgr, :distmgr # initialize - def initialize(ip, port, parent) + def initialize(ip, port, desc) + @id = -1 @ip = ip @port = port + @description = desc @status = "DISCONNECTED" @host_os = Utils::HOST_OS @max_working_jobs = 2 @@ -150,5 +152,59 @@ class RemoteBuildServer def get_file_transfer_cnt() return @file_transfer_cnt end + + + def set_id(id) + @id = id + end + + + def self.create_table(db, inc, post_fix) + db.do "CREATE TABLE remote_build_servers ( + id INTEGER PRIMARY KEY #{inc}, + svr_addr VARCHAR(64) NOT NULL UNIQUE, + description VARCHAR(256) )#{post_fix}" + end + + + def self.load(ip, port, db) + saddr="#{ip}:#{port}" + row = db.select_one("SELECT * FROM remote_build_servers WHERE svr_addr='#{saddr}'") + if not row.nil? then + return load_row(row) + end + + return nil + end + + + def self.load_all(db) + result = [] + rows = db.select_all("SELECT * FROM remote_build_servers") + rows.each do |row| + result.push load_row(row) + end + + return result + end + + + def self.load_row(row) + svr_ip,svr_port=row['svr_addr'].strip.split(":") + new_obj = new(svr_ip, svr_port, row['description'] ) + new_obj.set_id( row['id'] ) + return new_obj + end + + + def unload(db) + db.do("DELETE FROM remote_build_servers WHERE id=#{@id}") + end + + + def save(db) + saddr="#{@ip}:#{@port}" + db.do "INSERT INTO remote_build_servers (svr_addr,description) VALUES ('#{saddr}','#{@description}')" + end end diff --git a/src/build_server/ReverseBuildChecker.rb b/src/build_server/ReverseBuildChecker.rb index ce8edc6..49dde68 100644 --- a/src/build_server/ReverseBuildChecker.rb +++ b/src/build_server/ReverseBuildChecker.rb @@ -115,6 +115,9 @@ class ReverseBuildChecker new_job = rev_prj.create_new_job_from_version( rev_os, rev_ver ) new_job.set_rev_build_check_job( job ) + # set user id + new_job.user_id = job.user_id + rev_build_jobs.push new_job end