[Title] Fixed upgrade module for No DB server
authordonghee yang <donghee.yang@samsung.com>
Fri, 19 Apr 2013 09:28:42 +0000 (18:28 +0900)
committerdonghee yang <donghee.yang@samsung.com>
Fri, 19 Apr 2013 09:28:42 +0000 (18:28 +0900)
build-svr
src/build_server/BuildServerController.rb
src/build_server/BuildServerOptionParser.rb
src/build_server/SocketJobRequestListener.rb
upgrade

index 1d433f82a18049996eaec62f532c1c0b710bb340..5989dceaf76aa406f58eeb1fa72ade6662c1fa7b 100755 (executable)
--- a/build-svr
+++ b/build-svr
@@ -107,7 +107,7 @@ begin
                                                if File.exist? "#{BuildServer::CONFIG_ROOT}/#{option[:name]}/upgrade_dist" then
                                                        File.open("#{BuildServer::CONFIG_ROOT}/#{option[:name]}/upgrade_dist","r") do |f|
                                                                f.each_line do |l|
-                                                                       cmd += " -D #{l.strip}"
+                                                                       cmd += " -u #{l.strip}"
                                                                        break
                                                                end
                                                        end
@@ -135,19 +135,9 @@ begin
        when "upgrade"
                if not (option[:dist].nil? or option[:dist].empty?) then
                        build_server = BuildServerController.get_server(option[:name])
-                       # distribution check
-                       if not build_server.distmgr.get_distribution(option[:dist]).nil? then
-                               File.open("#{BuildServer::CONFIG_ROOT}/#{option[:name]}/upgrade_dist","w") do |f|
-                                       f.puts option[:dist]
-                               end
-                       else
-                               puts "Distribution \"#{option[:dist]}\" is not exits"
-                               puts "Upgrade Failed!!"
-                               exit 1
-                       end
                end
 
-               BuildServerController.upgrade_server( option[:name] )
+               BuildServerController.upgrade_server( option[:name], option[:url], option[:dist] )
 
        when "add-svr"
                svr_result = Utils.parse_server_addr(option[:domain])
index fe450a56952bc7303d73e891baeb149f572ca463..14021c95b8bac6b0c809d4330f27702c8244941c 100644 (file)
@@ -211,11 +211,35 @@ class BuildServerController
        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!"
@@ -224,7 +248,7 @@ class BuildServerController
 
                # 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|
index e051492645e611f657cc87db1a19610c9c09cb81..ac97fbd28da9c7eed54274ed27f16f7bb51ef2eb 100644 (file)
@@ -36,7 +36,7 @@ class BuildServerUsage
        MIGRATE="build-svr migrate -n <server name> [--dsn <db dsn> [--dbuser <db_user> --dbpassword <db_password>] ]"
        START="build-svr start -n <server name> [-p <port>]"
        STOP="build-svr stop -n <server name>"
-       UPGRADE="build-svr upgrade -n <server name> [-D <distribution name>]"
+       UPGRADE="build-svr upgrade -n <server name> [-D <distribution name>] [-u <package server url>]"
        ADD_SVR="build-svr add-svr -n <server name> -d <friend server address>"
        REMOVE_SVR= "build-svr remove-svr -n <server name> -d <friend server address>"
        ADD_OS= "build-svr add-os -n <server name> -o <os>"
index 0ec2cb26222eef5e053b30428d0fafa1c7f237c7..77321f3337723a6efc2425227d3f59ddfc46b7bb 100644 (file)
@@ -614,21 +614,28 @@ class SocketJobRequestListener
 
        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
 
 
diff --git a/upgrade b/upgrade
index 26120adcbd9f796db83f3f562da3e7aa18d936c1..a9eed0bbe2e02ec44eb4a1acd2605c4c5ea3d8db 100755 (executable)
--- a/upgrade
+++ b/upgrade
@@ -135,15 +135,20 @@ begin
        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
@@ -164,17 +169,15 @@ begin
                # 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)
@@ -182,22 +185,7 @@ begin
 
        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)
@@ -207,56 +195,59 @@ begin
        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