From b86998da4cf904c6ad3423c86f46d25f25bae96d Mon Sep 17 00:00:00 2001 From: "shihyun.kim" Date: Mon, 8 Apr 2013 14:11:21 +0900 Subject: [PATCH] [Title]Check the same server is running [Desc.] [Issue]#8938 --- src/build_server/BuildServer.rb | 32 +++++++++++++++++++++++++------- src/common/FileUtil.rb | 17 +++++++++++++++++ src/pkg_server/packageServer.rb | 31 ++++++++++++++++++++++++------- 3 files changed, 66 insertions(+), 14 deletions(-) diff --git a/src/build_server/BuildServer.rb b/src/build_server/BuildServer.rb index eebe98b..6578bd9 100644 --- a/src/build_server/BuildServer.rb +++ b/src/build_server/BuildServer.rb @@ -41,6 +41,7 @@ require "PackageSync.rb" require "ProjectManager.rb" require "DistributionManager.rb" require "db_utils.rb" +require "FileUtil" class BuildServer attr_accessor :id, :path, :status, :host_os, :log @@ -70,6 +71,7 @@ class BuildServer def initialize (id, path, ftpsvr_addr, ftpsvr_port, ftpsvr_username, ftpsvr_passwd) @id = id @path = path + @run_file_path = File.join(BuildServer::CONFIG_ROOT, @id, "run") @remote_servers = [] @req_listener = [] @finish = false @@ -240,15 +242,15 @@ class BuildServer # init transport path if not File.exist? @transport_path then FileUtils.mkdir_p @transport_path end + #lock the build server. Do not run the same server at the same time + if (not lockServer()) + printErrorMessage("Server \"#{id}\" is already running.") + return + end + #check that the port is open if BuildCommServer.port_open? port then - errMsg = "Port \"#{port}\" is already in use." - @log.info "Server creation failed" - @log.error errMsg - - puts "Server creation failed" - puts errMsg - + printErrorMessage("Port \"#{port}\" is already in use.") return end @@ -883,5 +885,21 @@ class BuildServer return @latest_job_id end end + + #If the 'run' file is already locked, server is already running. + #in this case return false + private + def lockServer + return FileUtil.exclusiveLock(@run_file_path) + end + + private + def printErrorMessage(errMsg) + @log.info "Server creation failed" + @log.error errMsg + + puts "Server creation failed" + puts errMsg + end end diff --git a/src/common/FileUtil.rb b/src/common/FileUtil.rb index ab1c4a5..e39483e 100644 --- a/src/common/FileUtil.rb +++ b/src/common/FileUtil.rb @@ -1,3 +1,5 @@ +require "fileutils" + class FileUtil public def FileUtil.getFileNameFromURL(url) @@ -13,4 +15,19 @@ class FileUtil return url.delete(".:/@") end + + public + def FileUtil.exclusiveLock(filePath) + if (not File.exist?(filePath)) + FileUtils.mkdir_p(filePath) + end + + file = File.new(filePath) + if (file.flock(File::LOCK_EX | File::LOCK_NB)) + return true; + else + return false + end + end + end \ No newline at end of file diff --git a/src/pkg_server/packageServer.rb b/src/pkg_server/packageServer.rb index 0d95064..d711797 100644 --- a/src/pkg_server/packageServer.rb +++ b/src/pkg_server/packageServer.rb @@ -36,6 +36,7 @@ require "distribution" require "SocketRegisterListener" require "client" require "utils" +require "FileUtil" require "mail" require "DistSync" require "log" @@ -482,15 +483,15 @@ class PackageServer f.puts @port end + #lock the package server. Do not run the same server at the same time + if (not lockServer()) + printErrorMessage("Server \"#{id}\" is already running.") + return + end + #check that the port is open if BuildCommServer.port_open? port then - errMsg = "Port \"#{port}\" is already in use." - @log.info "Server creation failed" - @log.error errMsg - - puts "Server creation failed" - puts errMsg - + printErrorMessage("Port \"#{port}\" is already in use.") return end @@ -782,4 +783,20 @@ class PackageServer @incoming_path = "#{@config_dir}/incoming" @server_lock_file_path = "#{@config_dir}/.server_lock" end + + #If the 'run' file is already locked, Package server is already running. + #in this case return false + private + def lockServer + return FileUtil.exclusiveLock(@run_file_path) + end + + private + def printErrorMessage(errMsg) + @log.info "Server creation failed" + @log.error errMsg + + puts "Server creation failed" + puts errMsg + end end -- 2.34.1