require "RegisterPackageJob.rb"
require "packageServer.rb"
+
class JobManager
attr_accessor :max_working_jobs, :jobs, :internal_jobs, :reverse_build_jobs
attr_accessor :internal_job_schedule
@max_working_jobs=2
@new_job_index = 0
@internal_job_schedule = Mutex.new
+ @latest_job_touch = Mutex.new
+ end
+
+
+ # initialize
+ def init()
+ # load latest job idx if exist
+ file_path = "#{BuildServer::CONFIG_ROOT}/#{@parent.id}/latest_job"
+ if File.exist? file_path then
+ latest_idx = -1
+ File.open( file_path, "r" ) { |f|
+ f.each_line { |l|
+ latest_idx = l.strip.to_i
+ break
+ }
+ }
+ if latest_idx < 0 then latest_idx = -1 end
+ @new_job_index = latest_idx + 1
+ else
+ @new_job_index = 0
+ end
end
# get new id
def get_new_job_id
- # check file
- server_dir = "#{BuildServer::CONFIG_ROOT}/#{@parent.id}"
- if File.exist? "#{server_dir}/latest_job" then
- f = File.open( "#{server_dir}/latest_job", "r" )
- @new_job_index = f.gets.strip.to_i + 1
- f.close
- end
-
- # get new id
- new_id = @new_job_index
-
- # save it
- f = File.open( "#{server_dir}/latest_job", "w" )
- f.puts "#{new_id}"
- f.close
-
- return new_id
+ new_idx = 0
+ @latest_job_touch.synchronize {
+ new_idx = @new_job_index
+
+ file_path = "#{BuildServer::CONFIG_ROOT}/#{@parent.id}/latest_job"
+ File.open( file_path, "w" ) { |f|
+ f.puts "#{@new_job_index}"
+ }
+
+ @new_job_index += 1
+ }
+
+ return new_idx
end