[Title] Changed DB schema for JOB
authordonghee yang <donghee.yang@samsung.com>
Mon, 26 Nov 2012 07:54:23 +0000 (16:54 +0900)
committerdonghee yang <donghee.yang@samsung.com>
Mon, 26 Nov 2012 07:54:23 +0000 (16:54 +0900)
src/build_server/BuildJob.rb
src/build_server/BuildServer.rb
src/build_server/CommonJob.rb
src/build_server/CommonProject.rb
src/build_server/DistributionManager.rb
src/build_server/RemoteBuildServer.rb
src/build_server/ReverseBuildChecker.rb

index dd90a845c0945f23f69c93736aae9a40e1d47159..c94f4ff4913e06868a98352062e1902f85a6bb33 100644 (file)
@@ -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
index a3ab91c4eb13b284975df7097732e25bf4af4561..72fe4f52d598d1421aa82928dc6672227959f665 100644 (file)
@@ -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
index b46b40696cdcd15f6ecacb5c86c1e86182fc6e87..23b8ba376a741e29be6b2c1698b35f059a3997c2 100644 (file)
@@ -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
index 062975c0b6844d9961ad2f2f56425086a26b7dd1..61eb39fba042e5bbf2ad2896f4861741dea2ec20 100644 (file)
@@ -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}'")
index d758d8810fb96c9a9835f824db882339fdde24d2..2ca7177ba241b3e21140bbf166e536569c3713df 100644 (file)
@@ -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
 
 
index a244d2af58539ac7cd8c0b61d14d43ef5dc8acf4..e4089e66cdbbb6530bb1ef9b07c5b7759c6269ac 100644 (file)
@@ -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
 
index ce8edc6a049997b08e143ea1e2fe9e1ba643b638..49dde687d1668b3a113d7e2ea467175ecc91def9 100644 (file)
@@ -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