From: donghee yang Date: Thu, 18 Oct 2012 09:05:39 +0000 (+0900) Subject: [Title] Added distribution lock concept X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3daab01dc06d8e5940d465012c3a70c09d20b6ee;p=sdk%2Ftools%2Fsdk-build.git [Title] Added distribution lock concept --- diff --git a/package/changelog b/package/changelog index 8238a43..567718d 100644 --- a/package/changelog +++ b/package/changelog @@ -1,3 +1,6 @@ +* 1.2.9 +- Added distribution lock +== hyoun jiil 2011-10-18 * 1.2.8 - Fixed "cancel" bug - Changed to remain logss about communication errors diff --git a/package/pkginfo.manifest b/package/pkginfo.manifest index f3adf10..ae55c99 100644 --- a/package/pkginfo.manifest +++ b/package/pkginfo.manifest @@ -1,5 +1,5 @@ Source : dibs -Version :1.2.8 +Version :1.2.9 Maintainer : taejun ha, jiil hyoun , donghyuk yang , donghee yang , sungmin kim e - puts "DB update failed!" - puts e.errstr - result = false - ensure - db.disconnect if db - end - return result + db.do "INSERT INTO distributions VALUES('#{dist.name}','#{dist.pkgsvr_url}','#{dist_addr}','#{dist.status}')" end + rescue DBI::DatabaseError => e + puts "DB update failed!" + puts e.errstr + result = false + ensure + db.disconnect if db + end + return result + end - # load - def load_db() - result = true - @distributions = [] - - sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" - begin - # open DB - db = DBI.connect(sqlite_db_file) - - # distributions - rs = db.execute "SELECT * FROM distributions" - rs.fetch_hash do |row| - pkgsvr_ip = row['pkgsvr_addr'].split(":")[0] - pkgsvr_port = row['pkgsvr_addr'].split(":")[1].to_i - add_distribution_internal(row['name'], row['pkgsvr_url'], pkgsvr_ip, pkgsvr_port) - end - rs.finish - rescue DBI::DatabaseError => e - puts "DB loading failed!" - puts e.errstr - result = false - ensure - rs.finish if not rs.finished? - db.disconnect if db - end - return result - end + # load + def load_db() + result = true + @distributions = [] + sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" + begin + # open DB + db = DBI.connect(sqlite_db_file) - def add_distribution_internal(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port) - @distributions.push PackageDistribution.new(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, @server) + begin + db.do('ALTER TABLE distributions ADD COLUMN status VARCHAR(32) DEFAULT "OPEN"') + rescue DBI::DatabaseError => e + # do nothing end + + # distributions + rs = db.execute "SELECT * FROM distributions" + rs.fetch_hash do |row| + pkgsvr_ip = row['pkgsvr_addr'].split(":")[0] + pkgsvr_port = row['pkgsvr_addr'].split(":")[1].to_i + add_distribution_internal(row['name'], row['pkgsvr_url'], pkgsvr_ip, pkgsvr_port,row['status']) + end + rs.finish + rescue DBI::DatabaseError => e + puts "DB loading failed!" + puts e.errstr + result = false + ensure + rs.finish if not rs.finished? + db.disconnect if db + end + return result + end - def remove_distribution_internal(name) - @distributions.delete get_distribution(name) - end + def add_distribution_internal(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, status) + dist = PackageDistribution.new(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, @server) + dist.status = status + @distributions.push dist + end - def get_all_distributions() - return @distributions - end + def remove_distribution_internal(name) + @distributions.delete get_distribution(name) + end - #END - end + + def get_all_distributions() + return @distributions + end + + #END +end diff --git a/src/build_server/SocketJobRequestListener.rb b/src/build_server/SocketJobRequestListener.rb index c5cbc63..9de8ed0 100644 --- a/src/build_server/SocketJobRequestListener.rb +++ b/src/build_server/SocketJobRequestListener.rb @@ -210,6 +210,11 @@ class SocketJobRequestListener dist_name = @parent_server.distmgr.get_default_distribution_name() end + # check distribution + if not check_distribution(dist_name, req) then + raise "The distribution error!!" + end + # check supported os if not internal job if not is_internal then os_list = check_supported_os( os_list , req ) @@ -338,6 +343,11 @@ class SocketJobRequestListener dist_name = @parent_server.distmgr.get_default_distribution_name() end + # check distribution + if not check_distribution(dist_name, req) then + raise "The distribution error!!" + end + # check project prj = check_project_exist(project_name, dist_name, req) if prj.nil? then @@ -617,6 +627,11 @@ class SocketJobRequestListener dist_name = @parent_server.distmgr.get_default_distribution_name() end + # check distribution + if not check_distribution(dist_name, req) then + raise "The distribution error!!" + end + # check server password if server_passwd != @parent_server.password then BuildCommServer.send_begin(req) @@ -664,6 +679,12 @@ class SocketJobRequestListener if (dist_name.nil? or dist_name.empty?) then dist_name = @parent_server.distmgr.get_default_distribution_name() end + + # check distribution + if not check_distribution(dist_name, req) then + raise "The distribution error!!" + end + new_job = @parent_server.jobmgr.create_new_register_job( file_path, dist_name ) logger = JobLog.new( new_job, req ) new_job.set_logger(logger) @@ -683,6 +704,11 @@ class SocketJobRequestListener dist_name = @parent_server.distmgr.get_default_distribution_name() end + # check distribution + if not check_distribution(dist_name, req) then + raise "The distribution error!!" + end + # check project prj = check_project_for_package_file_name(filename, dist_name, req) if prj.nil? then @@ -822,6 +848,25 @@ class SocketJobRequestListener end + private + def check_distribution(dist_name, req) + dist = @parent_server.distmgr.get_distribution(dist_name) + if dist.nil? then + BuildCommServer.send_begin(req) + req.puts "Error: The distribution \"#{dist_name}\" does not exist!" + BuildCommServer.send_end(req) + return false + elsif dist.status != "OPEN" then + BuildCommServer.send_begin(req) + req.puts "Error: The distribution \"#{dist_name}\" is locked!" + BuildCommServer.send_end(req) + return false + end + + return true + end + + private def check_supported_os(os_list, req)