From: Jan Provaznik <[email protected]>
Instance state in condormatic_instances_sync_states is set
only once.
---
src/app/util/condormatic.rb | 21 +++++++--------------
1 files changed, 7 insertions(+), 14 deletions(-)
diff --git a/src/app/util/condormatic.rb b/src/app/util/condormatic.rb
index 5fba43e..3a21d64 100644
--- a/src/app/util/condormatic.rb
+++ b/src/app/util/condormatic.rb
@@ -118,15 +118,8 @@ def condormatic_instances_sync_states
raise ("Error calling condor_q -xml") if $? != 0
- # Set them all to 'stopped' because if they aren't in the condor
- # queue as jobs then they are not running, pending or anything else.
- instances = Instance.find(:all)
- instances.each do |instance|
- instance.state = Instance::STATE_STOPPED
- instance.save!
- end
-
doc = Nokogiri::XML(xml)
+ jobs_state = {}
doc.xpath('/classads/c').each do |jobs_ele|
job_name = (v = jobs_ele.at_xpath('./a...@n="Cmd"]/s')) ? v.text : nil
job_state= (v = jobs_ele.at_xpath('./a...@n="JobStatus"]/i')) ? v.text :
nil
@@ -134,13 +127,13 @@ def condormatic_instances_sync_states
Rails.logger.info "job name is #{job_name}"
Rails.logger.info "job state is #{job_state}"
- instance = Instance.find(:first, :conditions => {:condor_job_id =>
job_name})
+ jobs_state[job_name] = condor_to_instance_state(job_state) if job_name
+ end
- if instance
- instance.state = condor_to_instance_state(job_state)
- instance.save!
- Rails.logger.info "Instance state updated to
#{condor_to_instance_state(job_state)}"
- end
+ Instance.find(:all).each do |instance|
+ instance.state = jobs_state[instance.condor_job_id] ||
Instance::STATE_STOPPED
+ instance.save!
+ Rails.logger.info "Instance state updated to #{instance.state}"
end
rescue Exception => ex
Rails.logger.error ex.message
--
1.7.0.1
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel