[Title] set job id using DB Function
authorjiil.hyoun <jiil.hyoun@samsung.com>
Thu, 7 Mar 2013 05:50:21 +0000 (14:50 +0900)
committerjiil.hyoun <jiil.hyoun@samsung.com>
Thu, 7 Mar 2013 05:50:21 +0000 (14:50 +0900)
[Type] Enhancement
[Module] Toolchain /
[Priority] Major
[Jira#]
[Redmine#] 7955
[Problem]
[Cause]
[Solution]
[TestCase]

Change-Id: I5c58746205500191a546ba9e2825639c7ae0edea

src/build_server/BuildJob.rb
src/build_server/BuildServer.rb
src/build_server/CommonJob.rb
src/build_server/GitBuildJob.rb
src/build_server/JobManager.rb
src/build_server/MultiBuildJob.rb
src/build_server/RegisterPackageJob.rb
src/build_server/SocketJobRequestListener.rb
src/common/db_utils.rb

index a762b8c5aafa17a52e2d3e0f4955d833a5fc2fee..18a98cc23ce51f908d4fa3ed53f03712e484a5b6 100644 (file)
@@ -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
index 4bbd5d766a333b4b773621d6ef0d7c7925a2ef7a..041f7ce9aece828f62393f142ed4022e5f262391 100644 (file)
@@ -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
index 92aea5a131381d7c122a0a92ad8cb727c75d4de1..c6409e756a0d1b2a16246cc2eb2540a81cbb0bb0 100644 (file)
@@ -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"
index 301d810ac455242ad7b51c50d0964ea6e751349f..34e0dded94be442c583fb4605e1c43648f58a101 100644 (file)
@@ -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
 
index e5afdd5a298ebaef29261869c6b7ed2f3efd51d1..2e4d2fb37b2c09c700371623121782be3b021824 100644 (file)
@@ -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|
index b4d899b65f2783c00838378298941db9679a3108..7eca96791f3a3ad606395814ee8730665013fbf7 100644 (file)
@@ -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
index 839ce477a3a4a7b50c4d7b97c730ee8a449cd344..97efea1a174a77430d01093a3687ebd42e38dd83 100644 (file)
@@ -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
index bb1ecd696af6b9f25c1a3860fe8ff565f47a434d..a6dbba16dea914a64dbc031d7ff8fc8730b429a5 100644 (file)
@@ -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)
 
index 159b95ff13c44185e29610dd977d2bd4f8d5fa0b..76064207535271b1c476ece31bb0083428594360 100644 (file)
@@ -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(':')