[Title] Add distribution when upgrade
authorjiil.hyoun <jiil.hyoun@samsung.com>
Fri, 28 Dec 2012 01:49:30 +0000 (10:49 +0900)
committerjiil.hyoun <jiil.hyoun@samsung.com>
Fri, 28 Dec 2012 01:49:30 +0000 (10:49 +0900)
[Type] Feature
[Module] Toolchain /
[Priority] Major
[Jira#]
[Redmine#] 7863
[Problem]
[Cause]
[Solution]
[TestCase]

Change-Id: Icde038f20f26bd242a623d9b0dc610dba360855f

build-svr
src/build_server/BuildServerOptionParser.rb
src/common/log.rb
test/upgrade/01.testcase
upgrade

index 06cef662df6028fa5dbb19790368e72f3bb389d3..fc9a98f10e5e8de1d0ebd58a346283d32b0031e9 100755 (executable)
--- a/build-svr
+++ b/build-svr
@@ -97,6 +97,16 @@ begin
                                                break
                                        elsif ($?.exitstatus == 99) then # DIBS UPGRADE
                                                cmd = "#{File.dirname(__FILE__)}/upgrade -l #{File.dirname(__FILE__)} -S -t BUILDSERVER -n #{option[:name]} -p #{option[:port]}"
+                                               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}"
+                                                                       break
+                                                               end
+                                                       end
+                                                       File.delete "#{BuildServer::CONFIG_ROOT}/#{option[:name]}/upgrade_dist"
+                                               end
+
                                                cmd = Utils.generate_shell_command(cmd)
                                                puts cmd
                                                Utils.spawn(cmd)
@@ -115,6 +125,20 @@ begin
                BuildServerController.stop_server( option[:name] )
 
        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] )
 
        when "add-svr"
index bcfb5d963ae4789837aa45c15a5e1f8033bc4341..455a48b289855ab6d38c7dd6e75c658fe4738d80 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>"
+       UPGRADE="build-svr upgrade -n <server name> [-D <distribution name>]"
        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 d1e090a665b2a4c80e977525388b28ca887d2cf8..893885fb3015f9fd9b9fd24ca8af65bfc92c5d21 100644 (file)
@@ -133,3 +133,15 @@ class DummyLog
        end
 end
 
+class StandardOutLog < Log
+
+       def initialize(path)
+               super(path)
+               @second_out = $stdout
+       end
+
+       protected
+       def output_extra(msg)
+               @second_out.puts msg
+       end
+end
index 308aa9b2f88efaaa21ab4511644880fdb84d4c7a..af117a1c7eb8c56cb62001648e8a3e82da4534b4 100644 (file)
@@ -1,6 +1,7 @@
 #PRE-EXEC
-./dibs1/build-svr upgrade -n testserver3
+./dibs1/build-svr upgrade -n testserver3 -D unstable
 #EXEC
+sleep 3
 ls dibs1/VERSION dibs2/VERSION
 #POST-EXEC
 #EXPECT
diff --git a/upgrade b/upgrade
index c26eb7aa39803f7b36d340e1333b70b024030226..26120adcbd9f796db83f3f562da3e7aa18d936c1 100755 (executable)
--- a/upgrade
+++ b/upgrade
@@ -33,15 +33,15 @@ require 'optparse'
 $LOAD_PATH.unshift File.dirname(__FILE__)+"/src/common"
 $LOAD_PATH.unshift File.dirname(__FILE__)+"/src/build_server"
 $LOAD_PATH.unshift File.dirname(__FILE__)+"/src/pkg_server"
+require "BuildServerController"
 require "utils.rb"
 require "log.rb"
-require "packageServerLog"
 require "client"
 
 def option_error_check( options )
        if options[:start] then
        if options[:locate].nil? or options[:type].nil? or options[:name].nil? then
-                       raise ArgumentError, "upgrade -l <dibs path> -S -t <server type> -n <server name> -p <server port>" + "\n"
+                       raise ArgumentError, "upgrade -l <dibs path> -S -t <server type> -n <server name> -p <server port> -D <distribution name>" + "\n"
                end
        else
        if options[:locate].nil? or options[:url].nil? then
@@ -84,6 +84,10 @@ def option_parse
             options[:name] = name
         end
 
+        opts.on( '-D', '--distribution <distribution name>', 'build server distribution name' ) do|dist|
+            options[:dist] = dist
+        end
+
         options[:port] = 2222
                opts.on( '-p', '--port <port>', 'server port number: 2224' ) do|port|
             options[:port] = port.strip.to_i
@@ -122,6 +126,7 @@ begin
        svr_type = option[:type]
        svr_name = option[:name]
        svr_port = option[:port]
+       svr_dist = option[:dist]
 
        DIBS_PKG_NAME = "dibs"
        BACKUP_ROOT = Utils::HOME + "/.build_tools/backup"
@@ -130,8 +135,19 @@ begin
        UPGRADE_CMD = "#{PREV_VER_PATH}/upgrade"
        BUILD_CONFIG_ROOT = "#{Utils::HOME}/.build_tools/build_server/#{svr_name}"
 
+       if not svr_dist.nil? then
+               build_server = BuildServerController.get_server(svr_name)
+               dist = build_server.distmgr.get_distribution(svr_dist)
+               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
+       end
+
        if not File.exist? BACKUP_ROOT then FileUtils.mkdir_p(BACKUP_ROOT) end
-       log = PackageServerLog.new( "#{BACKUP_ROOT}/log" )
+       log = StandardOutLog.new( "#{BUILD_CONFIG_ROOT}/log" )
 
        if not install_opt then
                puts ""
@@ -147,11 +163,16 @@ begin
 
                # Run Upgrade
                if start_opt and svr_type.eql? "BUILDSERVER"  then
-                       if pkg_svr_url.nil? or pkg_svr_url.empty? 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} -S -t #{svr_type} -n #{svr_name} -p #{svr_port} -u #{pkg_svr_url}"
+                       cmd = "#{UPGRADE_CMD} -I -l #{dibs_path} -S -t #{svr_type} -n #{svr_name} -p #{svr_port}"
+
+                       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
+
                else
                        cmd = "#{UPGRADE_CMD} -I -l #{dibs_path} -u #{pkg_svr_url}"
                end
@@ -163,10 +184,19 @@ begin
                # Get SERVER INFORMATION
                if start_opt and svr_type.eql? "BUILDSERVER" then
                        # only when acesss build server controller
-                       require "BuildServerController"
                        build_server = BuildServerController.get_server(svr_name)
                        if pkg_svr_url.nil? or pkg_svr_url.empty? then
-                               pkg_svr_url = build_server.distmgr.get_default_pkgsvr_url()
+                               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
                        log.info("Build server : [#{svr_name}][#{svr_port}]", Log::LV_USER)
                end
@@ -210,7 +240,7 @@ begin
                                                # recevie & print
                                                mismatched = false
                                                result = build_client.read_lines do |l|
-                                                       log.error(l, Log::LV_USER)
+                                                       log.info(l, Log::LV_USER)
                                                        if l.include? "Password mismatched!" then
                                                                mismatched = true
                                                        end