From: jiil.hyoun Date: Tue, 29 Jan 2013 02:04:11 +0000 (+0900) Subject: [Title] remove resolve X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c681f4c609b99685841e7df7e5715c324df5298e;p=sdk%2Ftools%2Fsdk-build.git [Title] remove resolve [Type] Feature [Module] Toolchain / [Priority] Major [Jira#] [Redmine#] [Problem] [Cause] [Solution] [TestCase] Change-Id: I27f98015a7bd063ba693737933f111b506ab372b --- diff --git a/build-cli b/build-cli index fb9758e..aae884d 100755 --- a/build-cli +++ b/build-cli @@ -171,22 +171,22 @@ begin puts "Connection to server failed!" exit 1 end - when "resolve" - result = Utils.parse_server_addr(option[:domain]) - if result.nil? then - puts "Server address is incorrect. (#{option[:domain]})" - puts "Tune as following format." - puts " :" - exit 1 - end - client = BuildCommClient.create( result[0], result[1], nil, 0 ) - if not client.nil? then - client.send "RESOLVE|GIT|#{option[:project]}|#{option[:passwd]}|#{option[:os]}|#{option[:async]}|#{option[:dist]}|#{option[:user]}|#{option[:verbose]}" - if not client.print_stream then - puts "ERROR: #{client.get_error_msg()}" - end - client.terminate - end +# when "resolve" +# result = Utils.parse_server_addr(option[:domain]) +# if result.nil? then +# puts "Server address is incorrect. (#{option[:domain]})" +# puts "Tune as following format." +# puts " :" +# exit 1 +# end +# client = BuildCommClient.create( result[0], result[1], nil, 0 ) +# if not client.nil? then +# client.send "RESOLVE|GIT|#{option[:project]}|#{option[:passwd]}|#{option[:os]}|#{option[:async]}|#{option[:dist]}|#{option[:user]}|#{option[:verbose]}" +# if not client.print_stream then +# puts "ERROR: #{client.get_error_msg()}" +# end +# client.terminate +# end when "query" result = Utils.parse_server_addr(option[:domain]) if result.nil? then diff --git a/src/build_server/BuildClientOptionParser.rb b/src/build_server/BuildClientOptionParser.rb index 63fb3da..81d58e9 100644 --- a/src/build_server/BuildClientOptionParser.rb +++ b/src/build_server/BuildClientOptionParser.rb @@ -32,7 +32,7 @@ require 'utils' class BuildClientUsage BUILD="build-cli build -N -d [-o ] [-w ] [--async] [-D ] [-U user-email] [-V]" - RESOLVE="build-cli resolve -N -d [-o ] [-w ] [--async] [-D ] [-U user-email] [-V]" + #RESOLVE="build-cli resolve -N -d [-o ] [-w ] [--async] [-D ] [-U user-email] [-V]" QUERY="build-cli query -d " QUERY_SYSTEM="build-cli query-system -d " QUERY_PROJECT="build-cli query-project -d " @@ -51,12 +51,12 @@ def option_error_check( options ) raise ArgumentError, "Usage: " + BuildClientUsage::BUILD end - when "resolve" then - if options[:project].nil? or options[:project].empty? or - options[:domain].nil? or options[:domain].empty? then - raise ArgumentError, "Usage: " + BuildClientUsage::RESOLVE - end - +# when "resolve" then +# if options[:project].nil? or options[:project].empty? or +# options[:domain].nil? or options[:domain].empty? then +# raise ArgumentError, "Usage: " + BuildClientUsage::RESOLVE +# end +# when "query" then if options[:domain].nil? or options[:domain].empty? then raise ArgumentError, "Usage: " + BuildClientUsage::QUERY @@ -103,7 +103,6 @@ def option_parse + "\n" + "Usage: build-cli [OPTS] or build-cli (-h|-v)" + "\n" \ + "\n" + "Subcommands:" + "\n" \ + "\t" + "build Build and create package." + "\n" \ - + "\t" + "resolve Request change to resolve-status for build-conflict." + "\n" \ + "\t" + "query Query information about build-server." + "\n" \ + "\t" + "query-system Query system information about build-server." + "\n" \ + "\t" + "query-project Query project information about build-server." + "\n" \ @@ -112,7 +111,6 @@ def option_parse + "\t" + "register Register the package to the build-server." + "\n" \ + "\n" + "Subcommand usage:" + "\n" \ + "\t" + BuildClientUsage::BUILD + "\n" \ - + "\t" + BuildClientUsage::RESOLVE + "\n" \ + "\t" + BuildClientUsage::QUERY + "\n" \ + "\t" + BuildClientUsage::QUERY_SYSTEM + "\n" \ + "\t" + BuildClientUsage::QUERY_PROJECT + "\n" \ @@ -120,6 +118,8 @@ def option_parse + "\t" + BuildClientUsage::CANCEL + "\n" \ + "\t" + BuildClientUsage::REGISTER + "\n" \ + "\n" + "Options:" + "\n" + #+ "\t" + "resolve Request change to resolve-status for build-conflict." + "\n" \ + #+ "\t" + BuildClientUsage::RESOLVE + "\n" \ optparse = OptionParser.new(nil, 32, ' '*8) do|opts| @@ -203,7 +203,7 @@ def option_parse cmd = ARGV[0] - if cmd.eql? "build" or cmd.eql? "resolve" or + if cmd.eql? "build" or #cmd.eql? "resolve" or cmd.eql? "query" or cmd.eql? "query-system" or cmd.eql? "query-project" or cmd.eql? "query-job" or cmd.eql? "cancel" or @@ -227,3 +227,7 @@ def option_parse return options end +I, [2013-01-29T10:51:55.734874 #22762] INFO -- : sh: build_server/BinaryUploadProject.rb: Permission denied + +I, [2013-01-29T10:52:30.442258 #22796] INFO -- : sh: src/build_server/BinaryUploadProject.rb: Permission denied + diff --git a/src/build_server/BuildJob.rb b/src/build_server/BuildJob.rb index 71c3485..ddb14e2 100644 --- a/src/build_server/BuildJob.rb +++ b/src/build_server/BuildJob.rb @@ -46,8 +46,9 @@ class BuildJob < CommonJob attr_accessor :pkginfo, :source_path attr_accessor :pkgsvr_client, :thread - attr_accessor :rev_fail_projects, :rev_success_jobs - attr_accessor :pending_ancestor, :cancel_state +# attr_accessor :rev_fail_projects, :rev_success_jobs + #attr_accessor :pending_ancestor, :cancel_state + attr_accessor :cancel_state attr_accessor :no_reverse attr_accessor :remote_id @@ -59,7 +60,7 @@ class BuildJob < CommonJob @type = "BUILD" @cancel_state = "NONE" - @resolve = false + #@resolve = false @host_os = Utils::HOST_OS if not @server.distmgr.nil? then @pkgsvr_url = @server.distmgr.get_distribution(project.dist_name).pkgsvr_url @@ -83,13 +84,13 @@ class BuildJob < CommonJob @parent = nil # for job hierachy #for cancel operation - @pending_ancestor = nil # for cancel pending job + #@pending_ancestor = nil # for cancel pending job @remote_id = nil # for cancel remote_working job @build_dep_prjs = nil # for cacnel pending job - # for resolving build-break - @rev_fail_projects = [] # list of [project,os] - @rev_success_jobs = [] # list of job + ## for resolving build-break + #@rev_fail_projects = [] # list of [project,os] + #@rev_success_jobs = [] # list of job # remote build @remote_server = nil @@ -157,10 +158,10 @@ class BuildJob < CommonJob end - # set option for waiting for resolve - def set_resolve_flag() - @resolve = true - end + ## set option for waiting for resolve + #def set_resolve_flag() + # @resolve = true + #end # set force rebuild @@ -215,36 +216,36 @@ class BuildJob < CommonJob end client.terminate end - when "PENDING" then - if @pending_ancestor.nil? then - #resolve pending job - pending_descendants = @server.jobmgr.jobs.select do |j| - (not j.pending_ancestor.nil?) and "#{j.pending_ancestor.id}" == "#{@id}" - end - pending_descendants.each do |pd| - pd.cancel_state = "INIT" - end - else - # remove myself from success job if exist - # and add myself into rev_fail_project list if not exist - @pending_ancestor.remove_rev_success_job(self) - @pending_ancestor.add_rev_fail_project( @project, @os ) - - # remove the project that depends on me if exist - # and add it into rev_fail_project list if not exist - p_sub_jobs = @server.jobmgr.jobs.select do |j| - ( not j.pending_ancestor.nil? and - "#{j.pending_ancestor.id}" == "#{@pending_ancestor.id}" and - j.is_build_dependent_project(@project, @os) ) - end - p_sub_jobs.each do |d| - @pending_ancestor.remove_rev_success_job(d) - @pending_ancestor.add_rev_fail_project( d.get_project, d.os ) - - if not d.thread.nil? then d.thread.terminate end - d.status = "WAITING" - end - end + #when "PENDING" then + # if @pending_ancestor.nil? then + # #resolve pending job + # pending_descendants = @server.jobmgr.jobs.select do |j| + # (not j.pending_ancestor.nil?) and "#{j.pending_ancestor.id}" == "#{@id}" + # end + # pending_descendants.each do |pd| + # pd.cancel_state = "INIT" + # end + # else + # # remove myself from success job if exist + # # and add myself into rev_fail_project list if not exist + # @pending_ancestor.remove_rev_success_job(self) + # @pending_ancestor.add_rev_fail_project( @project, @os ) + + # # remove the project that depends on me if exist + # # and add it into rev_fail_project list if not exist + # p_sub_jobs = @server.jobmgr.jobs.select do |j| + # ( not j.pending_ancestor.nil? and + # "#{j.pending_ancestor.id}" == "#{@pending_ancestor.id}" and + # j.is_build_dependent_project(@project, @os) ) + # end + # p_sub_jobs.each do |d| + # @pending_ancestor.remove_rev_success_job(d) + # @pending_ancestor.add_rev_fail_project( d.get_project, d.os ) + + # if not d.thread.nil? then d.thread.terminate end + # d.status = "WAITING" + # end + # end when "WORKING", "WAITING" , "INITIALIZING" , "JUST_CREATED" then #just log else # ERROR | FINISHED | RESOLVED @@ -413,54 +414,54 @@ class BuildJob < CommonJob end - # remove job from reverse success job - def remove_rev_success_job( job ) - @rev_success_jobs.delete job if @rev_success_jobs.include? job - end + ## remove job from reverse success job + #def remove_rev_success_job( job ) + # @rev_success_jobs.delete job if @rev_success_jobs.include? job + #end - # check [project,os] is in reverse fail project list - def is_rev_fail_project( prj, os ) - # check the project already exist - @rev_fail_projects.each do |p| - if p[0] == prj and p[1] == os then - return true - end - end + ## check [project,os] is in reverse fail project list + #def is_rev_fail_project( prj, os ) + # # check the project already exist + # @rev_fail_projects.each do |p| + # if p[0] == prj and p[1] == os then + # return true + # end + # end - return false - end + # return false + #end - # add [project,os] to reverse fail project list - def add_rev_fail_project( prj, os ) - # check the project already exist - @rev_fail_projects.each do |p| - if p[0] == prj and p[1] == os then - return - end - end - # if not, add it - @rev_fail_projects.push [prj,os] - end + ## add [project,os] to reverse fail project list + #def add_rev_fail_project( prj, os ) + # # check the project already exist + # @rev_fail_projects.each do |p| + # if p[0] == prj and p[1] == os then + # return + # end + # end + # # if not, add it + # @rev_fail_projects.push [prj,os] + #end - # remove [project,os] from reverse fail project list - def remove_rev_fail_project( prj, os ) - remove_list = [] + ## remove [project,os] from reverse fail project list + #def remove_rev_fail_project( prj, os ) + # remove_list = [] - # check project and os name - @rev_fail_projects.each do |p| - if p[0] == prj and p[1] == os then - remove_list.push p - end - end + # # check project and os name + # @rev_fail_projects.each do |p| + # if p[0] == prj and p[1] == os then + # remove_list.push p + # end + # end - # remove - remove_list.each do |r| - @rev_fail_projects.delete r - end - end + # # remove + # remove_list.each do |r| + # @rev_fail_projects.delete r + # end + #end # get project that my job is dependent on @@ -673,44 +674,47 @@ class BuildJob < CommonJob # build clean def build() - # check there are pending packages which wait for me - # it will return nil if not exist - # this process must be skip if it is sub-job - if not @is_rev_build_check_job and not @is_internal_job then - @server.cancel_lock.synchronize do - @pending_ancestor = get_pending_ancestor_job() - end - end + ## check there are pending packages which wait for me + ## it will return nil if not exist + ## this process must be skip if it is sub-job + #if not @is_rev_build_check_job and not @is_internal_job then + # @server.cancel_lock.synchronize do + # @pending_ancestor = get_pending_ancestor_job() + # end + #end + + #if not @pending_ancestor.nil? then + # # resolve other pending job + # resolve() + #elsif @resolve then + # # wait for being resolved by other jobs + # # this condition must be placed after checking pending status + # wait_resolve() + #else + # # build + # build_normal() + #end - if not @pending_ancestor.nil? then - # resolve other pending job - resolve() - elsif @resolve then - # wait for being resolved by other jobs - # this condition must be placed after checking pending status - wait_resolve() - else - # build - build_normal() - end + # build + build_normal() end - # return pending job that wait for me - def get_pending_ancestor_job() - @server.jobmgr.get_pending_jobs.each do |job| - # must have same distribution - if get_distribution_name() != job.get_distribution_name() then - next - end + ## return pending job that wait for me + #def get_pending_ancestor_job() + # @server.jobmgr.get_pending_jobs.each do |job| + # # must have same distribution + # if get_distribution_name() != job.get_distribution_name() then + # next + # end - if job.is_rev_fail_project(@project,@os) then - return job - end - end + # if job.is_rev_fail_project(@project,@os) then + # return job + # end + # end - return nil - end + # return nil + #end # check whether build this job or not @@ -854,172 +858,172 @@ class BuildJob < CommonJob end - # wait to be resolved by other jobs - def wait_resolve() - @log.info( "Started to build this job and wait for being resolved...", Log::LV_USER) - - # create builder - if @is_remote_job then - builder = RemoteBuilder.new("JB#{@id}", @remote_server, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd) - @log.info( "JobBuilder##{@id} is created", Log::LV_USER) - @log.info( " - Remote Server : #{@remote_server.ip}:#{@remote_server.port}" ) - if not @server.ftp_addr.nil? then - @log.info( " - FTP Server : #{@server.ftp_addr}" ) - end - else - builder = Builder.create( "JB#{@id}", @pkgsvr_url, nil, - "#{@buildroot_dir}/#{@os}", @server.build_cache_dir ) - if builder.nil? - @log.error( "Creating job builder failed", Log::LV_USER) - return false - end - @log.info( "JobBuilder##{@id} is created", Log::LV_USER) - @log.info( " - Package Server : #{@pkgsvr_url}" ) - @log.info( " - Build Cache Path : #{@server.build_cache_dir}" ) - end - @log.info( " - Log Path : #{@log.path}" ) - - # build - if @is_remote_job then - result = builder.build_job(self, []) - else - result = builder.build_job(self, true, [], false ) - end - if not result then - @log.error( "Building job failed", Log::LV_USER) - write_log_url() - return false - end - - # check reverse dependecy - @rev_fail_projects = ReverseBuildChecker.check(self, false) - if @rev_fail_projects.empty? then - # if no problem?, it OK - return true - end - - # pending - @status = "PENDING" - @log.info( "Entered the PENDING state ...", Log::LV_USER) - old_msg = "" - while @status == "PENDING" - new_msg = @rev_fail_projects.map {|p| "#{p[0].name}(#{p[1]})"}.join(", ") - if old_msg != new_msg then - @log.error( " * Waiting for building next projects: #{new_msg}", Log::LV_USER) - old_msg = new_msg - end - sleep 1 - end - - return true - end - - - # resolve other pending job - def resolve() - - # wait for other build-dependent projects are resolved - old_msg = "" - wait_prjs = @pending_ancestor.rev_fail_projects.select {|p| is_build_dependent_project(p[0], p[1])} - @log.info("Checking build dependency before RESOLVE", Log::LV_USER) - while not wait_prjs.empty? - @status = "PENDING" - new_msg = wait_prjs.map {|p| "#{p[0].name}(#{p[1]})"}.join(", ") - if new_msg != old_msg then - @log.info(" * Waiting for building next projects: #{new_msg}", Log::LV_USER) - old_msg = new_msg - end - sleep 1 - wait_prjs = @pending_ancestor.rev_fail_projects.select {|p| is_build_dependent_project(p[0], p[1])} - end - - # return back to "WORKING" - @status = "WORKING" - - @log.info( "Started to build this job and resolve other pending job...", Log::LV_USER) - - # create builder - if @is_remote_job then - builder = RemoteBuilder.new("JB#{@id}", @remote_server, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd) - @log.info( "JobBuilder##{@id} is created", Log::LV_USER) - @log.info( " - Remote Server : #{@remote_server.ip}:#{@remote_server.port}" ) - if not @server.ftp_addr.nil? then - @log.info( " - FTP Server : #{@server.ftp_addr}" ) - end - else - builder = Builder.create( "JB#{@id}", @pkgsvr_url, nil, - "#{@buildroot_dir}/#{@os}", @server.build_cache_dir ) - if builder.nil? - @log.error( "Creating job builder failed", Log::LV_USER) - return false - end - @log.info( "JobBuilder##{@id} is created", Log::LV_USER) - @log.info( " - Package Server : #{@pkgsvr_url}" ) - @log.info( " - Build Cache Path : #{@server.build_cache_dir}" ) - end - @log.info( " - Log Path : #{@log.path}" ) - - # get local packages to overwite - # they must be composed of packages of pending jobs and its success list - local_pkgs=[] - local_pkgs += @external_pkgs - src_path = @pending_ancestor.source_path - ver = @pending_ancestor.pkginfo.get_version() - @pending_ancestor.pkginfo.get_target_packages(@os).each do |pkg| - local_pkgs.push "#{src_path}/#{pkg.package_name}_#{ver}_#{@os}.zip" - end - @pending_ancestor.rev_success_jobs.each do |job| - src_path = job.source_path - ver = job.pkginfo.get_version() - job.pkginfo.get_target_packages(@os).each do |pkg| - local_pkgs.push "#{src_path}/#{pkg.package_name}_#{ver}_#{@os}.zip" - end - end - - # build - if @is_remote_job then - result = builder.build_job(self, local_pkgs) - else - result = builder.build_job(self, true, local_pkgs, false ) - end - if not result then - @log.error( "Building job failed", Log::LV_USER) - write_log_url() - return false - end - - # check reverse dependecy and update parent rev_fail_project list - new_fail_projects = ReverseBuildChecker.check(self, false) - new_fail_projects.each do |p| - @pending_ancestor.add_rev_fail_project(p[0], p[1]) - end - - # update the status of pending job - @status = "PENDING" - @pending_ancestor.remove_rev_fail_project(@project, @os) - @pending_ancestor.rev_success_jobs.push self - if @pending_ancestor.rev_fail_projects.empty? then - @pending_ancestor.status = "RESOLVED" - @pending_ancestor.rev_success_jobs.each do |job| - job.status = "RESOLVED" - end - else - @log.info( "Entered the PENDING state ...", Log::LV_USER) - old_msg = "" - while @status == "PENDING" - new_msg = @pending_ancestor.rev_fail_projects.map {|p| "#{p[0].name}(#{p[1]})"}.join(", ") - - if new_msg != old_msg then - @log.info(" * Waiting for building next projects: #{new_msg}", Log::LV_USER) - old_msg = new_msg - end - - sleep 1 - end - end - - return true - end + ## wait to be resolved by other jobs + #def wait_resolve() + # @log.info( "Started to build this job and wait for being resolved...", Log::LV_USER) + + # # create builder + # if @is_remote_job then + # builder = RemoteBuilder.new("JB#{@id}", @remote_server, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd) + # @log.info( "JobBuilder##{@id} is created", Log::LV_USER) + # @log.info( " - Remote Server : #{@remote_server.ip}:#{@remote_server.port}" ) + # if not @server.ftp_addr.nil? then + # @log.info( " - FTP Server : #{@server.ftp_addr}" ) + # end + # else + # builder = Builder.create( "JB#{@id}", @pkgsvr_url, nil, + # "#{@buildroot_dir}/#{@os}", @server.build_cache_dir ) + # if builder.nil? + # @log.error( "Creating job builder failed", Log::LV_USER) + # return false + # end + # @log.info( "JobBuilder##{@id} is created", Log::LV_USER) + # @log.info( " - Package Server : #{@pkgsvr_url}" ) + # @log.info( " - Build Cache Path : #{@server.build_cache_dir}" ) + # end + # @log.info( " - Log Path : #{@log.path}" ) + + # # build + # if @is_remote_job then + # result = builder.build_job(self, []) + # else + # result = builder.build_job(self, true, [], false ) + # end + # if not result then + # @log.error( "Building job failed", Log::LV_USER) + # write_log_url() + # return false + # end + + # # check reverse dependecy + # @rev_fail_projects = ReverseBuildChecker.check(self, false) + # if @rev_fail_projects.empty? then + # # if no problem?, it OK + # return true + # end + + # # pending + # @status = "PENDING" + # @log.info( "Entered the PENDING state ...", Log::LV_USER) + # old_msg = "" + # while @status == "PENDING" + # new_msg = @rev_fail_projects.map {|p| "#{p[0].name}(#{p[1]})"}.join(", ") + # if old_msg != new_msg then + # @log.error( " * Waiting for building next projects: #{new_msg}", Log::LV_USER) + # old_msg = new_msg + # end + # sleep 1 + # end + + # return true + #end + + + ## resolve other pending job + #def resolve() + + # # wait for other build-dependent projects are resolved + # old_msg = "" + # wait_prjs = @pending_ancestor.rev_fail_projects.select {|p| is_build_dependent_project(p[0], p[1])} + # @log.info("Checking build dependency before RESOLVE", Log::LV_USER) + # while not wait_prjs.empty? + # @status = "PENDING" + # new_msg = wait_prjs.map {|p| "#{p[0].name}(#{p[1]})"}.join(", ") + # if new_msg != old_msg then + # @log.info(" * Waiting for building next projects: #{new_msg}", Log::LV_USER) + # old_msg = new_msg + # end + # sleep 1 + # wait_prjs = @pending_ancestor.rev_fail_projects.select {|p| is_build_dependent_project(p[0], p[1])} + # end + + # # return back to "WORKING" + # @status = "WORKING" + + # @log.info( "Started to build this job and resolve other pending job...", Log::LV_USER) + + # # create builder + # if @is_remote_job then + # builder = RemoteBuilder.new("JB#{@id}", @remote_server, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd) + # @log.info( "JobBuilder##{@id} is created", Log::LV_USER) + # @log.info( " - Remote Server : #{@remote_server.ip}:#{@remote_server.port}" ) + # if not @server.ftp_addr.nil? then + # @log.info( " - FTP Server : #{@server.ftp_addr}" ) + # end + # else + # builder = Builder.create( "JB#{@id}", @pkgsvr_url, nil, + # "#{@buildroot_dir}/#{@os}", @server.build_cache_dir ) + # if builder.nil? + # @log.error( "Creating job builder failed", Log::LV_USER) + # return false + # end + # @log.info( "JobBuilder##{@id} is created", Log::LV_USER) + # @log.info( " - Package Server : #{@pkgsvr_url}" ) + # @log.info( " - Build Cache Path : #{@server.build_cache_dir}" ) + # end + # @log.info( " - Log Path : #{@log.path}" ) + + # # get local packages to overwite + # # they must be composed of packages of pending jobs and its success list + # local_pkgs=[] + # local_pkgs += @external_pkgs + # src_path = @pending_ancestor.source_path + # ver = @pending_ancestor.pkginfo.get_version() + # @pending_ancestor.pkginfo.get_target_packages(@os).each do |pkg| + # local_pkgs.push "#{src_path}/#{pkg.package_name}_#{ver}_#{@os}.zip" + # end + # @pending_ancestor.rev_success_jobs.each do |job| + # src_path = job.source_path + # ver = job.pkginfo.get_version() + # job.pkginfo.get_target_packages(@os).each do |pkg| + # local_pkgs.push "#{src_path}/#{pkg.package_name}_#{ver}_#{@os}.zip" + # end + # end + + # # build + # if @is_remote_job then + # result = builder.build_job(self, local_pkgs) + # else + # result = builder.build_job(self, true, local_pkgs, false ) + # end + # if not result then + # @log.error( "Building job failed", Log::LV_USER) + # write_log_url() + # return false + # end + + # # check reverse dependecy and update parent rev_fail_project list + # new_fail_projects = ReverseBuildChecker.check(self, false) + # new_fail_projects.each do |p| + # @pending_ancestor.add_rev_fail_project(p[0], p[1]) + # end + + # # update the status of pending job + # @status = "PENDING" + # @pending_ancestor.remove_rev_fail_project(@project, @os) + # @pending_ancestor.rev_success_jobs.push self + # if @pending_ancestor.rev_fail_projects.empty? then + # @pending_ancestor.status = "RESOLVED" + # @pending_ancestor.rev_success_jobs.each do |job| + # job.status = "RESOLVED" + # end + # else + # @log.info( "Entered the PENDING state ...", Log::LV_USER) + # old_msg = "" + # while @status == "PENDING" + # new_msg = @pending_ancestor.rev_fail_projects.map {|p| "#{p[0].name}(#{p[1]})"}.join(", ") + + # if new_msg != old_msg then + # @log.info(" * Waiting for building next projects: #{new_msg}", Log::LV_USER) + # old_msg = new_msg + # end + + # sleep 1 + # end + # end + + # return true + #end def upload() diff --git a/src/build_server/JobManager.rb b/src/build_server/JobManager.rb index dc6dbae..382c24d 100644 --- a/src/build_server/JobManager.rb +++ b/src/build_server/JobManager.rb @@ -333,7 +333,7 @@ class JobManager end # check the connection if job is not asynchronous job - if ( job.status == "WAITING" or job.status == "REMOTE_WORKING" or job.status == "PENDING") and + if ( job.status == "WAITING" or job.status == "REMOTE_WORKING" ) and #or job.status == "PENDING") and not job.is_asynchronous_job? and not job.is_connected? then @@ -478,16 +478,16 @@ class JobManager end - def get_pending_jobs - result = [] - @jobs.each do |job| - if job.status == "PENDING" then - result.push job - end - end + #def get_pending_jobs + # result = [] + # @jobs.each do |job| + # if job.status == "PENDING" then + # result.push job + # end + # end - return result - end + # return result + #end def save_job_status(job) now = @server.db_now @@ -510,7 +510,7 @@ class JobManager jobs.each do |job| if job.cancel_state != "NONE" then next end - if job.status == "WORKING" or job.status == "REMOTE_WORKING" or job.status == "PENDING" then + if job.status == "WORKING" or job.status == "REMOTE_WORKING" then # or job.status == "PENDING" then check_dep_jobs.push job elsif ( check_dep_wait and job.status == "WAITING") then check_dep_jobs.push job @@ -531,10 +531,10 @@ class JobManager if (cjob.status == "WORKING" or cjob.status == "REMOTE_WORKING" ) and (job.has_build_dependency?( cjob ) or job.is_compatible_with?( cjob)) then pre_jobs.push cjob - # In case that "PENDING" job is depends on me (not depended ) - elsif cjob.status == "PENDING" and (not job.does_depend_on? cjob) and - (job.has_build_dependency?( cjob ) or job.is_compatible_with?( cjob)) then - pre_jobs.push cjob + # # In case that "PENDING" job is depends on me (not depended ) + # elsif cjob.status == "PENDING" and (not job.does_depend_on? cjob) and + # (job.has_build_dependency?( cjob ) or job.is_compatible_with?( cjob)) then + # pre_jobs.push cjob elsif check_dep_wait and cjob.status == "WAITING" and (job.does_depend_on? cjob or (job.id > cjob.id and job.is_compatible_with? cjob) ) then diff --git a/src/build_server/ReverseBuildChecker.rb b/src/build_server/ReverseBuildChecker.rb index 49dde68..c8b3cf3 100644 --- a/src/build_server/ReverseBuildChecker.rb +++ b/src/build_server/ReverseBuildChecker.rb @@ -81,22 +81,23 @@ class ReverseBuildChecker # if not "GIT" project, ignore it if rev_prj.type != "GIT" then next end - - # if job on resolve process, its unresolved project - #of pending ancestor must be excluded. - if job.type == "BUILD" and not job.pending_ancestor.nil? then - found = false - job.pending_ancestor.rev_fail_projects.each do |fp| - f_prj = fp[0] - f_os = fp[1] - - if rev_prj == f_prj and rev_os == f_os then - found = true - break - end - end - if found then next end - end + found = false + + ## if job on resolve process, its unresolved project + ##of pending ancestor must be excluded. + #if job.type == "BUILD" and not job.pending_ancestor.nil? then + # found = false + # job.pending_ancestor.rev_fail_projects.each do |fp| + # f_prj = fp[0] + # f_os = fp[1] + + # if rev_prj == f_prj and rev_os == f_os then + # found = true + # break + # end + # end + # if found then next end + #end # if this is sub job, all other sibling job must be excluded if job.is_sub_job? then diff --git a/src/build_server/SocketJobRequestListener.rb b/src/build_server/SocketJobRequestListener.rb index dc18da6..e711fe5 100644 --- a/src/build_server/SocketJobRequestListener.rb +++ b/src/build_server/SocketJobRequestListener.rb @@ -126,8 +126,8 @@ class SocketJobRequestListener case cmd when "BUILD" handle_cmd_build( req_line, req ) - when "RESOLVE" - handle_cmd_resolve( req_line, req ) + #when "RESOLVE" + # handle_cmd_resolve( req_line, req ) when "QUERY" handle_cmd_query( req_line, req ) when "CANCEL" @@ -348,104 +348,104 @@ class SocketJobRequestListener end - # "RESOLVE" - def handle_cmd_resolve( line, req ) - @log.info "Received REQ: #{line}" - - begin - handle_cmd_resolve_internal( line, req ) - rescue BuildServerException => e - @log.error(e.message) - BuildCommServer.send(req, e.err_message()) - BuildCommServer.send_end(req) - BuildCommServer.disconnect(req) - end - - @log.info "Handled REQ: #{line}" - end - - - def handle_cmd_resolve_internal( line ,req) - tok = line.split("|").map { |x| x.strip } - if tok.count < 3 then - raise BuildServerException.new("ERR001"), line - end - - case tok[1] - # RESOLVE|GIT|project_name|passwd|os|async|dist_name|user_email|verbose - when "GIT" - - # parse - project_name=tok[2] - passwd=tok[3] - os=tok[4] - async = tok[5].eql? "YES" - dist_name = tok[6] - user_email = (not tok[7].nil? and not tok[7].empty?) ? tok[7].strip : "" - verbose = tok[8].eql? "YES" - if (dist_name.nil? or dist_name.empty?) then - dist_name = @parent_server.distmgr.get_default_distribution_name() - end - - # check distribution - check_distribution(dist_name, req) - - # check project - prj = check_project_exist(project_name, dist_name, req) - - # check passwd - check_project_password(prj, passwd, req) - - # check os - os_list = check_supported_os( [os] , req ) - os = os_list[0] - - # check user email - user_id = @parent_server.check_user_id_from_email( user_email ) - if user_id == -1 then - raise BuildServerException.new("ERR004"), user_email - end - - # check user accessable - if not check_project_user_id(project_name,dist_name,user_id) then - raise BuildServerException.new("ERR005"), "#{user_email} -> #{project_name}" - end - - # create new job - new_job = create_new_job( project_name, os, dist_name ) - if new_job.nil? then - raise BuildServerException.new("ERR006"), "Resolve job #{project_name} #{os}" - end - @log.info "Received a request for resolving this project : #{project_name}, #{os}" - - new_job.user_id = user_id - - # resolve - new_job.set_resolve_flag() - - # create logger and set - if async then - new_job.create_logger( nil, verbose) - BuildCommServer.send(req,"Info: Added new job \"#{new_job.id}\" for #{new_job.os}!") - if not @parent_server.job_log_url.empty? then - BuildCommServer.send(req,"Info: * Log URL : #{@parent_server.job_log_url}/#{new_job.id}/log") - end - BuildCommServer.send(req,"Info: Above job(s) will be processed asynchronously!") - BuildCommServer.send_end(req) - BuildCommServer.disconnect(req) - else - logger = new_job.create_logger( req, verbose) - logger.info( "Added new job \"#{new_job.id}\" for #{new_job.os}!", Log::LV_USER) - if not @parent_server.job_log_url.empty? then - logger.info( " * Log URL : #{@parent_server.job_log_url}/#{new_job.id}/log", Log::LV_USER) - end - end - - @parent_server.jobmgr.add_job( new_job ) - else - raise BuildServerException.new("ERR001"), line - end - end + ## "RESOLVE" + #def handle_cmd_resolve( line, req ) + # @log.info "Received REQ: #{line}" + + # begin + # handle_cmd_resolve_internal( line, req ) + # rescue BuildServerException => e + # @log.error(e.message) + # BuildCommServer.send(req, e.err_message()) + # BuildCommServer.send_end(req) + # BuildCommServer.disconnect(req) + # end + + # @log.info "Handled REQ: #{line}" + #end + + + #def handle_cmd_resolve_internal( line ,req) + # tok = line.split("|").map { |x| x.strip } + # if tok.count < 3 then + # raise BuildServerException.new("ERR001"), line + # end + + # case tok[1] + # # RESOLVE|GIT|project_name|passwd|os|async|dist_name|user_email|verbose + # when "GIT" + + # # parse + # project_name=tok[2] + # passwd=tok[3] + # os=tok[4] + # async = tok[5].eql? "YES" + # dist_name = tok[6] + # user_email = (not tok[7].nil? and not tok[7].empty?) ? tok[7].strip : "" + # verbose = tok[8].eql? "YES" + # if (dist_name.nil? or dist_name.empty?) then + # dist_name = @parent_server.distmgr.get_default_distribution_name() + # end + + # # check distribution + # check_distribution(dist_name, req) + + # # check project + # prj = check_project_exist(project_name, dist_name, req) + + # # check passwd + # check_project_password(prj, passwd, req) + + # # check os + # os_list = check_supported_os( [os] , req ) + # os = os_list[0] + + # # check user email + # user_id = @parent_server.check_user_id_from_email( user_email ) + # if user_id == -1 then + # raise BuildServerException.new("ERR004"), user_email + # end + + # # check user accessable + # if not check_project_user_id(project_name,dist_name,user_id) then + # raise BuildServerException.new("ERR005"), "#{user_email} -> #{project_name}" + # end + + # # create new job + # new_job = create_new_job( project_name, os, dist_name ) + # if new_job.nil? then + # raise BuildServerException.new("ERR006"), "Resolve job #{project_name} #{os}" + # end + # @log.info "Received a request for resolving this project : #{project_name}, #{os}" + + # new_job.user_id = user_id + + # # resolve + # new_job.set_resolve_flag() + + # # create logger and set + # if async then + # new_job.create_logger( nil, verbose) + # BuildCommServer.send(req,"Info: Added new job \"#{new_job.id}\" for #{new_job.os}!") + # if not @parent_server.job_log_url.empty? then + # BuildCommServer.send(req,"Info: * Log URL : #{@parent_server.job_log_url}/#{new_job.id}/log") + # end + # BuildCommServer.send(req,"Info: Above job(s) will be processed asynchronously!") + # BuildCommServer.send_end(req) + # BuildCommServer.disconnect(req) + # else + # logger = new_job.create_logger( req, verbose) + # logger.info( "Added new job \"#{new_job.id}\" for #{new_job.os}!", Log::LV_USER) + # if not @parent_server.job_log_url.empty? then + # logger.info( " * Log URL : #{@parent_server.job_log_url}/#{new_job.id}/log", Log::LV_USER) + # end + # end + + # @parent_server.jobmgr.add_job( new_job ) + # else + # raise BuildServerException.new("ERR001"), line + # end + #end # "QUERY" @@ -494,16 +494,17 @@ class SocketJobRequestListener case job.type when "BUILD" - if status == "PENDING" then - if job.pending_ancestor.nil? then - ids = "/" - else - ids = job.pending_ancestor.id - end - BuildCommServer.send(req,"#{status}:#{ids},#{job.id},#{job.get_project().name},#{job.os} #{job.progress},#{job.get_distribution_name}") - else - BuildCommServer.send(req,"#{status},#{job.id},#{job.get_project().name},#{job.os} #{job.progress},#{job.get_distribution_name}") - end + #if status == "PENDING" then + # if job.pending_ancestor.nil? then + # ids = "/" + # else + # ids = job.pending_ancestor.id + # end + # BuildCommServer.send(req,"#{status}:#{ids},#{job.id},#{job.get_project().name},#{job.os} #{job.progress},#{job.get_distribution_name}") + #else + # BuildCommServer.send(req,"#{status},#{job.id},#{job.get_project().name},#{job.os} #{job.progress},#{job.get_distribution_name}") + #end + BuildCommServer.send(req,"#{status},#{job.id},#{job.get_project().name},#{job.os} #{job.progress},#{job.get_distribution_name}") when "REGISTER" if job.pkg_type == "BINARY" and not job.get_project().nil? then BuildCommServer.send(req,"#{status},#{job.id},#{job.get_project().name},#{job.os} #{job.progress},#{job.get_distribution_name}") diff --git a/test/build-server.basic1/build-cli-01.testcase b/test/build-server.basic1/build-cli-01.testcase index 90e5080..8461051 100644 --- a/test/build-server.basic1/build-cli-01.testcase +++ b/test/build-server.basic1/build-cli-01.testcase @@ -9,7 +9,6 @@ Usage: build-cli [OPTS] or build-cli (-h|-v) Subcommands: build Build and create package. -resolve Request change to resolve-status for build-conflict. query Query information about build-server. query-system Query system information about build-server. query-project Query project information about build-server. @@ -19,7 +18,6 @@ register Register the package to the build-server. Subcommand usage: build-cli build -N -d [-o ] [-w ] [--async] [-D ] [-U user-email] [-V] -build-cli resolve -N -d [-o ] [-w ] [--async] [-D ] [-U user-email] [-V] build-cli query -d build-cli query-system -d build-cli query-project -d diff --git a/test/build-server.basic1/testsuite b/test/build-server.basic1/testsuite index b5b5903..478f804 100644 --- a/test/build-server.basic1/testsuite +++ b/test/build-server.basic1/testsuite @@ -10,7 +10,6 @@ build-cli-09.testcase build-cli-10.testcase build-cli-11.testcase build-cli-12.testcase -build-cli-12_1.testcase build-cli-13.testcase build-cli-14.testcase build-cli-15.testcase diff --git a/test/build-server.multi-svr1/buildsvr1.init b/test/build-server.multi-svr1/buildsvr1.init index 9b0af28..e4d9802 100755 --- a/test/build-server.multi-svr1/buildsvr1.init +++ b/test/build-server.multi-svr1/buildsvr1.init @@ -19,7 +19,7 @@ rm -rf ~/.build_tools/build_server/testserver3 ../../build-svr remove -n testserver3 mkdir buildsvr01 cd buildsvr01 -${RUBY} ../../../build-svr create -n testserver3 -t ftp://ftpuser:ftpuser@127.0.0.1 +${RUBY} ../../../build-svr create -n testserver3 #-t ftp://ftpuser:ftpuser@127.0.0.1 echo "DROP DATABASE testserver3;" > a mysql -u root -p --password=$DB_PASSWD -h localhost < a ${RUBY} ../../../build-svr migrate -n testserver3 --dsn Mysql:testserver3:localhost --dbuser root --dbpassword $DB_PASSWD diff --git a/test/build-server.multi-svr2/buildsvr.init b/test/build-server.multi-svr2/buildsvr.init index b0859c9..fd6a79c 100755 --- a/test/build-server.multi-svr2/buildsvr.init +++ b/test/build-server.multi-svr2/buildsvr.init @@ -18,7 +18,7 @@ rm -rf ~/.build_tools/build_server/testserver3 ../../build-svr remove -n testserver3 mkdir buildsvr01 cd buildsvr01 -${RUBY} ../../../build-svr create -n testserver3 -t ftp://ftpuser:ftpuser@127.0.0.1 +${RUBY} ../../../build-svr create -n testserver3 #-t ftp://ftpuser:ftpuser@127.0.0.1 echo "DROP DATABASE testserver3;" > a mysql -u root -p --password=$DB_PASSWD -h localhost < a ${RUBY} ../../../build-svr migrate -n testserver3 --dsn Mysql:testserver3:localhost --dbuser root --dbpassword $DB_PASSWD diff --git a/test/build-server.multi_dist2/build-svr3-03.testcase b/test/build-server.multi_dist2/build-svr3-03.testcase index be7df44..fd3d663 100644 --- a/test/build-server.multi_dist2/build-svr3-03.testcase +++ b/test/build-server.multi_dist2/build-svr3-03.testcase @@ -1,6 +1,6 @@ #PRE-EXEC #EXEC -../../build-cli register -d 127.0.0.1:2223 -P bin/bin_0.0.0_ubuntu-32.zip -D unstable2 -t ftp://ftpuser:ftpuser@127.0.0.1 +../../build-cli register -d 127.0.0.1:2223 -P bin/bin_0.0.0_ubuntu-32.zip -D unstable2 #-t ftp://ftpuser:ftpuser@127.0.0.1 #POST-EXEC #EXPECT I, [ @@ -8,14 +8,6 @@ I, [ I, [ I, [ I, [ -I, [ -I, [ -I, [ -I, [ -I, [ -I, [ -I, [ -I, [ Info: Added new job Info: Initializing job... Info: Checking package version ... diff --git a/test/build-server.multi_dist2/buildsvr.init b/test/build-server.multi_dist2/buildsvr.init index 5d4bc03..11e9162 100755 --- a/test/build-server.multi_dist2/buildsvr.init +++ b/test/build-server.multi_dist2/buildsvr.init @@ -18,7 +18,7 @@ rm -rf ~/.build_tools/build_server/testserver3 ../../build-svr remove -n testserver3 mkdir buildsvr01 cd buildsvr01 -${RUBY} ../../../build-svr create -n testserver3 -t ftp://ftpuser:ftpuser@127.0.0.1 +${RUBY} ../../../build-svr create -n testserver3 #-t ftp://ftpuser:ftpuser@127.0.0.1 echo "DROP DATABASE testserver3;" > a mysql -u root -p --password=$DB_PASSWD -h localhost < a ${RUBY} ../../../build-svr migrate -n testserver3 --dsn Mysql:testserver3:localhost --dbuser root --dbpassword $DB_PASSWD