From b0a5bc50f7c8f6f66d028eac88a411585c84ff3d Mon Sep 17 00:00:00 2001 From: hataejun Date: Tue, 5 Mar 2013 17:39:18 +0900 Subject: [PATCH] [Title] build-cli register command check password before uplaod file [Type] [Module] [Priority] [Jira#] [Redmine#] 6717 [Problem] [Cause] [Solution] [TestCase] --- build-cli | 62 +++++++++++++------- src/build_server/BuildServerException.rb | 1 + src/build_server/SocketJobRequestListener.rb | 30 +++++++--- 3 files changed, 65 insertions(+), 28 deletions(-) diff --git a/build-cli b/build-cli index aae884d..e6120db 100755 --- a/build-cli +++ b/build-cli @@ -138,6 +138,22 @@ def query_job_list(ip, port) end end +def upload_request(bs_ip, bs_port, dock, transporter, package ) + client = BuildCommClient.create( bs_ip, bs_port, nil, 0 ) + if client.nil? then + raise RuntimeError, "Can't access server #{bs_ip}:#{bs_port}" + end + msg = "UPLOAD|#{dock}" + client.send( msg ) + result = client.send_file(package, transporter) + client.terminate + if not result then + raise RuntimeError, "Uploading file failed!.. #{result}" + else + puts "Uploading file success!.. #{result}" + end +end + # if "--os" is not specified, use pe if option[:os].nil? then @@ -297,34 +313,38 @@ begin transporter = FileTransferDirect.new( nil ) end - # upload - client = BuildCommClient.create( bs_ip, bs_port, nil, 0 ) - if client.nil? then - puts "Can't access server #{bs_ip}:#{bs_port}" - exit(-1) - end - dock = Utils.create_uniq_name() - msg = "UPLOAD|#{dock}" - client.send( msg ) - result = client.send_file(option[:package], transporter) - client.terminate - if not result then - puts "Uploading file failed!.. #{option[:package]}" - exit(-1) - end - # register client = BuildCommClient.create( bs_ip, bs_port, nil, 0 ) if client.nil? then puts "Can't access server #{bs_ip}:#{bs_port}" exit(-1) end - client.send("REGISTER|BINARY|#{File.basename(option[:package])}|#{option[:passwd]}|#{dock}|#{option[:dist]}|#{option[:user]}|#{option[:noreverse]}") - if not client.print_stream then - puts "ERROR: #{client.get_error_msg()}" - end - client.terminate + begin + dock = Utils.create_uniq_name() + client.send("REGISTER|BINARY|#{File.basename(option[:package])}|#{option[:passwd]}|#{dock}|#{option[:dist]}|#{option[:user]}|#{option[:noreverse]}") + client.read_lines do |line| + if line.eql?("WAITFORUPLOAD") then + # upload + thread = Thread.new do + begin + upload_request(bs_ip, bs_port, dock, transporter, option[:package]) + rescue => e + puts "Transfering file failed!" + puts e.message + puts e.backtrace.inspect + end + end + + thread.join + client.send("REGISTERCONTINUE") + else + puts line + end + end + ensure + client.terminate + end else raise RuntimeError, "input option incorrect : #{option[:cmd]}" end diff --git a/src/build_server/BuildServerException.rb b/src/build_server/BuildServerException.rb index eb6033d..8c98f08 100644 --- a/src/build_server/BuildServerException.rb +++ b/src/build_server/BuildServerException.rb @@ -15,6 +15,7 @@ class BuildServerException < Exception "ERR013" => "Project from file-name/distribution not found!", "ERR014" => "Job cancel failed!", "ERR015" => "Server password not matched!", + "ERR016" => "Can't received register file!", "ERR900" => "Cancel event received!", "ERR901" => "Job already upload status. Cancel failed!" diff --git a/src/build_server/SocketJobRequestListener.rb b/src/build_server/SocketJobRequestListener.rb index 0bd69aa..bb1ecd6 100644 --- a/src/build_server/SocketJobRequestListener.rb +++ b/src/build_server/SocketJobRequestListener.rb @@ -771,14 +771,21 @@ class SocketJobRequestListener def handle_cmd_register( line, req ) @log.info "Received REQ: #{line}" - begin - handle_cmd_register_internal( line, req ) - rescue BuildServerException => e - @log.error(e.message) - BuildCommServer.send(req, e.err_message()) - BuildCommServer.send_end(req) - BuildCommServer.disconnect(req) + Thread.new do + begin + handle_cmd_register_internal( line, req ) + rescue BuildServerException => e + @log.error(e.message) + BuildCommServer.send(req, e.err_message()) + BuildCommServer.send_end(req) + BuildCommServer.disconnect(req) + rescue => e + @log.error "Transfering file failed!" + @log.error e.message + @log.error e.backtrace.inspect + end end + @log.info "Handled REQ: #{line}" end @@ -844,6 +851,15 @@ class SocketJobRequestListener # check passwd check_project_password(prj, passwd, req) + # save thread and wait uplaod + BuildCommServer.send(req, "WAITFORUPLOAD") + req_line = req.gets + if req_line.nil? or not req_line.strip.eql?("REGISTERCONTINUE") then + raise BuildServerException.new("ERR016"), req_line + else + @log.info "register file is received successfully" + end + # create new job @log.info "Received a request for uploading binaries : #{filename}" new_job = create_new_upload_job( prj.name, filename, dock, dist_name, req ) -- 2.34.1