@friend_servers.each do |server|
if ( server.status == "RUNNING" and server.can_build?( job ) and
not server.has_waiting_jobs and
- not server.job_initializing and
+ server.get_file_transfer_cnt() == 0 and
server.get_number_of_empty_room > 0 )
candidates.push server
end
$LOAD_PATH.unshift File.dirname(__FILE__)
require "RemoteBuildJob.rb"
require "BuildComm.rb"
+require 'thread'
class RemoteBuildServer
attr_accessor :ip, :port, :status, :host_os
attr_accessor :max_working_jobs, :working_jobs, :waiting_jobs
attr_accessor :pkgserver_url, :path
- attr_accessor :job_initializing
# initialize
def initialize(ip, port, parent)
@waiting_jobs = []
@pkgserver_url = parent.pkgserver_url
@path = ""
- @job_initializing = false
+ @file_transfer_cnt_mutex = Mutex.new
+ @file_transfer_cnt = 0
end
def has_waiting_jobs
return (@waiting_jobs.count > 0)
end
+
+
+ def add_file_transfer()
+ @file_transfer_cnt_mutex.synchronize {
+ @file_transfer_cnt += 1
+ }
+ end
+
+ def remove_file_transfer()
+ @file_transfer_cnt_mutex.synchronize {
+ @file_transfer_cnt -= 1
+ }
+ end
+
+ def get_file_transfer_cnt()
+ return @file_transfer_cnt
+ end
end
dock = Utils.create_uniq_name()
# send local packages
- @server.job_initializing = true
+ @server.add_file_transfer()
local_pkgs.each do |pkg_path|
@log.info( "Sending file... : #{pkg_path}", Log::LV_USER )
result = send_file_to_remote( pkg_path, dock )
if not result then
@log.error( "File transfering failed!", Log::LV_USER )
- @server.job_initializing = false
+ @server.remove_file_transfer()
return false
end
end
- @server.job_initializing = false
+ @server.remove_file_transfer()
# send build request
@log.info( "Sending build request to remote server...", Log::LV_USER )
-d, --address <server address> build server address: 127.0.0.1:2224
-o, --os <operating system> target operating system: ubuntu-32/ubuntu-64/windows-32/windows-64/macos-64
--async asynchronous job
+--noreverse do not check reverse build
-j, --job <job number> job number
-w, --passwd <password> password for managing project
-P, --pkg <package file> package file path