From 146a885c57427c9eda5c4ab4dfbe02f9b502b2b5 Mon Sep 17 00:00:00 2001 From: hataejun Date: Tue, 26 Mar 2013 20:09:12 +0900 Subject: [PATCH] [Title] Build server project lock [Type] [Module] [Priority] [Jira#] [Redmine#] 8869 [Problem] [Cause] [Solution] [TestCase] --- src/build_server/BinaryUploadProject.rb | 4 +++- src/build_server/BuildServer.rb | 4 +++- src/build_server/BuildServerException.rb | 1 + src/build_server/CommonProject.rb | 20 +++++++++++++++----- src/build_server/GitBuildProject.rb | 4 +++- src/build_server/SocketJobRequestListener.rb | 19 ++++++++++++++++++- 6 files changed, 43 insertions(+), 9 deletions(-) diff --git a/src/build_server/BinaryUploadProject.rb b/src/build_server/BinaryUploadProject.rb index f653b80..44d1239 100644 --- a/src/build_server/BinaryUploadProject.rb +++ b/src/build_server/BinaryUploadProject.rb @@ -40,7 +40,7 @@ class BinaryUploadProject < CommonProject # initialize def initialize( name, server, os_list, dist_name, pkg_name = nil ) - super(name, "BINARY", server, os_list, dist_name) + super(name, "BINARY", server, os_list, dist_name, "OPEN") @pkg_name = pkg_name end @@ -140,12 +140,14 @@ class BinaryUploadProject < CommonProject prj_id = row['id'] prj_name = row['name'] prj_passwd = row['password'] + prj_status = row['status'] new_project = BinaryUploadProject.new(prj_name, server, prj_os_list, dist_name) if not prj_passwd.empty? then new_project.passwd = prj_passwd end new_project.set_project_id( prj_id ) new_project.set_source_info( source_info ) new_project.set_package_info( package_info ) + new_project.set_project_status( prj_status ) row=db.select_one("SELECT * FROM project_bins WHERE project_id=#{prj_id}") if row.nil? then return nil end diff --git a/src/build_server/BuildServer.rb b/src/build_server/BuildServer.rb index 56e926f..3d3235a 100644 --- a/src/build_server/BuildServer.rb +++ b/src/build_server/BuildServer.rb @@ -106,7 +106,7 @@ class BuildServer @db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" @db_user = nil @db_passwd = nil - @db_version = 2 + @db_version = 3 @sqlite3_db_mutex = Mutex.new #DB upgrade SQL command @@ -585,8 +585,10 @@ class BuildServer if @db_dsn =~ /^Mysql/i then @db_migrate[1]=["ALTER TABLE jobs CHANGE COLUMN id id INTEGER AUTO_INCREMENT NOT NULL", "ALTER TABLE distributions ADD pkgsvr_password VARCHAR(64)"] + @db_migrate[2]=["ALTER TABLE projects ADD COLUMN status VARCHAR(32) NOT NULL DEFAULT 'OPEN'"] else @db_migrate[1]=["ALTER TABLE distributions ADD pkgsvr_password VARCHAR(64)"] + @db_migrate[2]=["ALTER TABLE projects ADD COLUMN status VARCHAR(32) NOT NULL DEFAULT 'OPEN'"] end end diff --git a/src/build_server/BuildServerException.rb b/src/build_server/BuildServerException.rb index 03d2548..8ab47e4 100644 --- a/src/build_server/BuildServerException.rb +++ b/src/build_server/BuildServerException.rb @@ -18,6 +18,7 @@ class BuildServerException < Exception "ERR014" => "Job cancel failed!", "ERR015" => "Server password not matched!", "ERR016" => "Can't received register file!", + "ERR017" => "Project locked!", "ERR900" => "Cancel event received!", "ERR901" => "Job already upload status. Cancel failed!" diff --git a/src/build_server/CommonProject.rb b/src/build_server/CommonProject.rb index 9d89645..b6a2841 100644 --- a/src/build_server/CommonProject.rb +++ b/src/build_server/CommonProject.rb @@ -31,10 +31,10 @@ $LOAD_PATH.unshift File.dirname(__FILE__) $LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" class CommonProject - attr_accessor :name, :type, :passwd, :os_list, :dist_name, :path + attr_accessor :name, :type, :passwd, :os_list, :dist_name, :path, :status # initialize - def initialize( name, type, server, os_list, dist_name="BASE" ) + def initialize( name, type, server, os_list, dist_name="BASE", status="OPEN" ) @prj_id = -1 @name = name @type = type @@ -42,6 +42,7 @@ class CommonProject @os_list = os_list @server = server @dist_name = dist_name + @status = status @source_info = {} @package_info = {} if @dist_name == "BASE" then @@ -165,6 +166,14 @@ class CommonProject return @prj_id end + def set_project_status(status) + @status = status + end + + def get_project_status() + return @status + end + def self.create_table(db, inc, post_fix) db.do "CREATE TABLE projects ( id INTEGER PRIMARY KEY #{inc}, @@ -173,6 +182,7 @@ class CommonProject name VARCHAR(32) NOT NULL, ptype VARCHAR(32) NOT NULL, password VARCHAR(32), + status VARCHAR(32) NOT NULL DEFAULT 'OPEN', CONSTRAINT fk_projects_users1 FOREIGN KEY ( user_id ) REFERENCES users ( id ), CONSTRAINT fk_projects_distributions1 FOREIGN KEY ( distribution_id ) REFERENCES distributions ( id ) )#{post_fix}" @@ -242,8 +252,8 @@ class CommonProject if @prj_id == -1 then row = db.select_one("SELECT * FROM distributions WHERE name='#{@dist_name}'") dist_id = row['id'] - db.do "INSERT INTO projects (distribution_id,name,ptype,password) - VALUES (#{dist_id},'#{@name}','#{@type}','#{@passwd}')" + db.do "INSERT INTO projects (distribution_id,name,ptype,password,status) + VALUES (#{dist_id},'#{@name}','#{@type}','#{@passwd}','#{@status}')" case @server.db_dsn when /^SQLite3:/ then @prj_id = db.select_one("select last_insert_rowid()")[0] when /^Mysql:/ then @prj_id = db.func(:insert_id) @@ -259,7 +269,7 @@ class CommonProject else row = db.select_one("SELECT * FROM distributions WHERE name='#{@dist_name}'") dist_id = row['id'] - db.do "UPDATE projects SET ptype='#{@type}',password='#{@passwd}' WHERE name='#{@name}' and distribution_id=#{dist_id})" + db.do "UPDATE projects SET ptype='#{@type}',password='#{@passwd}',status='#{@status}' WHERE name='#{@name}' and distribution_id=#{dist_id})" db.do "DELETE FROM project_os WHERE project_id=#{@prj_id}" @os_list.each do |os| row = db.select_one("SELECT * FROM supported_os WHERE name='#{os}'") diff --git a/src/build_server/GitBuildProject.rb b/src/build_server/GitBuildProject.rb index 589651b..dffd40d 100644 --- a/src/build_server/GitBuildProject.rb +++ b/src/build_server/GitBuildProject.rb @@ -42,7 +42,7 @@ class GitBuildProject < CommonProject # initialize def initialize( name, server, os_list, dist_name, repos = nil, branch = nil ) - super(name, "GIT", server, os_list, dist_name) + super(name, "GIT", server, os_list, dist_name, "OPEN") @repository = repos @branch = branch end @@ -115,12 +115,14 @@ class GitBuildProject < CommonProject prj_id = row['id'] prj_name = row['name'] prj_passwd = row['password'] + prj_status = row['status'] new_project = GitBuildProject.new(prj_name, server, prj_os_list, dist_name) if not prj_passwd.empty? then new_project.passwd = prj_passwd end new_project.set_project_id( prj_id ) new_project.set_source_info( source_info ) new_project.set_package_info( package_info ) + new_project.set_project_status( prj_status ) row=db.select_one("SELECT * FROM project_gits WHERE project_id=#{prj_id}") if row.nil? then return nil end diff --git a/src/build_server/SocketJobRequestListener.rb b/src/build_server/SocketJobRequestListener.rb index 4dac6f1..767d819 100644 --- a/src/build_server/SocketJobRequestListener.rb +++ b/src/build_server/SocketJobRequestListener.rb @@ -347,6 +347,11 @@ class SocketJobRequestListener # check project prj = check_project_exist(prj_name, dist_name, req) + # check project status + if prj.status != "OPEN" then + raise BuildServerException.new("ERR017"), "#{project_name} on #{dist_name}. project is [[#{project.status}]]" + end + # check passwd check_project_password(prj, passwd, req) @@ -720,6 +725,14 @@ class SocketJobRequestListener # check distribution check_distribution(dist_name, req) + # check project + prj = check_project_for_package_file_name(filename, dist_name, req) + + # check project status + if prj.status != "OPEN" then + raise BuildServerException.new("ERR017"), "#{prj.name} on #{dist_name}. project is [[#{prj.status}]]" + end + new_job = @parent_server.jobmgr.create_new_register_job( file_path, dist_name ) new_job.create_logger( req ) @@ -746,6 +759,11 @@ class SocketJobRequestListener # check project prj = check_project_for_package_file_name(filename, dist_name, req) + # check project status + if prj.status != "OPEN" then + raise BuildServerException.new("ERR017"), "#{prj.name} on #{dist_name}. project is [[#{prj.status}]]" + end + # check user email user_id = @parent_server.check_user_id_from_email( user_email ) if user_id == -1 then @@ -978,7 +996,6 @@ class SocketJobRequestListener end end - private def check_supported_os(os_list, req) -- 2.34.1