end
# upgrade server
- def self.upgrade_server( id )
+ def self.upgrade_server( id, pkgsvr_url, dist_name )
- # server
server = get_server(id)
+ # distribution check
+ if pkgsvr_url.nil? then
+ if not server.has_db? then
+ puts BuildServerException.get_message("ERR021")
+ return false
+ end
+
+ if dist_name.nil? then
+ dist = server.distmgr.get_first_distribution()
+ if dist.nil? then
+ puts "No distribution exits!"
+ puts "Upgrade Failed!!"
+ return false
+ end
+ else
+ dist = server.distmgr.get_distribution( dist_name )
+ if dist.nil? then
+ puts "Distribution \"#{dist_name}\" is not exits"
+ puts "Upgrade Failed!!"
+ return false
+ end
+ end
+ pkgsvr_url = dist.pkgsvr_url
+ end
+
client = BuildCommClient.create( "127.0.0.1", server.port )
if client.nil? then
puts "Server is not running!"
# send request
upgrade_ok = false
- if client.send "UPGRADE|#{server.password}" then
+ if client.send "UPGRADE|#{server.password}|#{pkgsvr_url}" then
# recevie & print
mismatched = false
result = client.read_lines do |l|
def handle_cmd_upgrade_internal( line, req )
tok = line.split("|").map { |x| x.strip }
- if tok.count < 2 then
+ if tok.count < 3 then
raise BuildServerException.new("ERR001"), line
end
+ password = tok[1]
+ pkgsvr_url = tok[2]
- if tok[1] != @parent_server.password then
+ # write package server url
+ File.open("#{BuildServer::CONFIG_ROOT}/#{@parent_server.id}/upgrade_dist","w") do |f|
+ f.puts pkgsvr_url
+ end
+
+ if password != @parent_server.password then
raise BuildServerException.new("ERR015"), ""
else
BuildCommServer.send(req,"Server will be upgraded!")
BuildCommServer.send_end(req)
BuildCommServer.disconnect(req)
end
- if tok[1] == @parent_server.password then
- @parent_server.finish = true
- @parent_server.upgrade = true
- end
+
+ # set flag for quit message loop
+ @parent_server.finish = true
+ @parent_server.upgrade = true
end
UPGRADE_CMD = "#{PREV_VER_PATH}/upgrade"
BUILD_CONFIG_ROOT = "#{Utils::HOME}/.build_tools/build_server/#{svr_name}"
- if not svr_dist.nil? then
+ if pkg_svr_url.nil? and not svr_dist.nil? then
build_server = BuildServerController.get_server(svr_name)
- dist = build_server.distmgr.get_distribution(svr_dist)
+ if build_server.has_db? then
+ dist = build_server.distmgr.get_distribution(svr_dist)
+ else
+ dist = nil
+ end
if dist.nil? then
log.error "Upgrade failed : No distribution name \"#{svr_dist}\" exist!", Log::LV_USER
cmd = Utils.generate_shell_command("#{dibs_path}/build-svr start -n #{svr_name} -p #{svr_port}")
Utils.spawn(cmd)
exit 1
end
+ pkg_svr_url = dist.pkgsvr_url
end
if not File.exist? BACKUP_ROOT then FileUtils.mkdir_p(BACKUP_ROOT) end
# Run Upgrade
if start_opt and svr_type.eql? "BUILDSERVER" then
cmd = "#{UPGRADE_CMD} -I -l #{dibs_path} -S -t #{svr_type} -n #{svr_name} -p #{svr_port}"
+ else
+ cmd = "#{UPGRADE_CMD} -I -l #{dibs_path}"
+ end
- if not (pkg_svr_url.nil? or pkg_svr_url.empty?) then
- cmd += " -u #{pkg_svr_url}"
- end
-
- if not (svr_dist.nil? or svr_dist.empty?) then
- cmd += " -D #{svr_dist}"
- end
-
+ if not (pkg_svr_url.nil? or pkg_svr_url.empty?) then
+ cmd += " -u #{pkg_svr_url}"
else
- cmd = "#{UPGRADE_CMD} -I -l #{dibs_path} -u #{pkg_svr_url}"
+ log.error "Upgrade failed : No package server URL!", Log::LV_USER
+ exit 1
end
cmd = Utils.generate_shell_command(cmd)
else
# Get SERVER INFORMATION
- if start_opt and svr_type.eql? "BUILDSERVER" then
- # only when acesss build server controller
- build_server = BuildServerController.get_server(svr_name)
- if pkg_svr_url.nil? or pkg_svr_url.empty? then
- if svr_dist.nil? or svr_dist.empty? then
- pkg_svr_url = build_server.distmgr.get_default_pkgsvr_url()
- else
- dist = build_server.distmgr.get_distribution(svr_dist)
- if not dist.nil? then
- pkg_svr_url = dist.pkgsvr_url
- else
- log.error "Upgrade failed : No distribution name \"#{svr_dist}\" exist!", Log::LV_USER
- exit 1
- end
- end
- end
+ if svr_type.eql? "BUILDSERVER" then
log.info("Build server : [#{svr_name}][#{svr_port}]", Log::LV_USER)
end
log.info("Package Server : [#{pkg_svr_url}]", Log::LV_USER)
client = Client.new( pkg_svr_url, NEW_VER_PATH, log)
client.update()
client.install( DIBS_PKG_NAME, Utils::HOST_OS, true, true)
+ if not File.exist? "#{NEW_VER_PATH}/tools/dibs" then
+ log.error("Not installed package error.", Log::LV_USER)
+ exit(1)
+ end
# Copy Current path
if File.exist? "#{dibs_path}" then
FileUtils.rm_rf("#{dibs_path}")
#FileUtils.mkdir_p("#{dibs_path}")
end
- if File.exist? "#{NEW_VER_PATH}/tools/dibs" then
- FileUtils.cp_r("#{NEW_VER_PATH}/tools/dibs/.", "#{dibs_path}", :preserve => true)
- else
- log.error("Not installed package error.", Log::LV_USER)
- exit(1)
- end
+
+ FileUtils.cp_r("#{NEW_VER_PATH}/tools/dibs/.", "#{dibs_path}", :preserve => true)
# Execute start command
- if start_opt
- if not build_server.nil? and svr_type.eql? "BUILDSERVER" then
+ if start_opt then
+ if svr_type.eql? "BUILDSERVER" then
# get friends server information
- build_server.get_remote_servers().each do |svr|
- ip = svr.ip
- port = svr.port
-
- build_client = BuildCommClient.create( ip, port )
- if build_client.nil? then
- log.info("Friend Server #{ip}:#{port} is not running!", Log::LV_USER)
- next
- end
+ build_server = BuildServerController.get_server(svr_name)
+ if build_server.has_db? then
+ build_server.get_remote_servers().each do |svr|
+ ip = svr.ip
+ port = svr.port
+
+ build_client = BuildCommClient.create( ip, port )
+ if build_client.nil? then
+ log.info("Friend Server #{ip}:#{port} is not running!", Log::LV_USER)
+ next
+ end
- # send request
- log.info("Upgrading Friend Server #{ip}:#{port}...", Log::LV_USER)
- if build_client.send "UPGRADE|#{build_server.password}" then
- # recevie & print
- mismatched = false
- result = build_client.read_lines do |l|
- log.info(l, Log::LV_USER)
- if l.include? "Password mismatched!" then
- mismatched = true
+ # send request
+ log.info("Upgrading Friend Server #{ip}:#{port}...", Log::LV_USER)
+ if build_client.send "UPGRADE|#{build_server.password}|#{pkg_svr_url}" then
+ # recevie & print
+ mismatched = false
+ result = build_client.read_lines do |l|
+ log.info(l, Log::LV_USER)
+ if l.include? "Password mismatched!" then
+ mismatched = true
+ end
end
- end
- if not result then
+ if not result then
+ log.info("Upgrading failed! #{build_client.get_error_msg()}", Log::LV_USER)
+ elsif mismatched then
+ log.info("Upgrading failed! Password mismatched!", Log::LV_USER)
+ end
+ else
log.info("Upgrading failed! #{build_client.get_error_msg()}", Log::LV_USER)
- elsif mismatched then
- log.info("Upgrading failed! Password mismatched!", Log::LV_USER)
+ next
end
- else
- log.info("Upgrading failed! #{build_client.get_error_msg()}", Log::LV_USER)
- next
- end
- # terminate
- build_client.terminate
+ # terminate
+ build_client.terminate
+ end
end
# Start Build server