require "packageServer.rb"
class PackageDistribution
- attr_accessor :name, :pkgsvr_url, :pkgsvr_ip, :pkgsvr_port
+ attr_accessor :name, :pkgsvr_url, :pkgsvr_ip, :pkgsvr_port, :status
def initialize( name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, server )
@server = server
@pkgsvr_url = pkgsvr_url
@pkgsvr_ip = pkgsvr_ip
@pkgsvr_port = pkgsvr_port
+ @status = "OPEN"
end
end
return false
end
- add_distribution_internal(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port)
+ add_distribution_internal(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, "OPEN")
save_db()
@server.log.info "Added a new distribution \"#{name}\""
return true
db.do "DELETE FROM distributions"
@distributions.each do |dist|
dist_addr = dist.pkgsvr_ip + ":" + dist.pkgsvr_port.to_s
- db.do "INSERT INTO distributions VALUES('#{dist.name}','#{dist.pkgsvr_url}','#{dist_addr}')"
- end
- rescue DBI::DatabaseError => 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
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 )
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
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)
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)
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
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)