projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch '2744-update-dev-docs'
[arvados.git]
/
services
/
api
/
app
/
models
/
pipeline_instance.rb
diff --git
a/services/api/app/models/pipeline_instance.rb
b/services/api/app/models/pipeline_instance.rb
index 5c60178438e17cf1d2d5927f79875366c78a8793..ca4b69c62a3c58f71a79ff6858c112fcc23e70ab 100644
(file)
--- a/
services/api/app/models/pipeline_instance.rb
+++ b/
services/api/app/models/pipeline_instance.rb
@@
-9,8
+9,9
@@
class PipelineInstance < ArvadosModel
before_validation :bootstrap_components
before_validation :update_success
before_validation :bootstrap_components
before_validation :update_success
- before_create :verify_status
- before_save :verify_status
+ before_validation :verify_status
+ before_create :set_state_before_save
+ before_save :set_state_before_save
api_accessible :user, extend: :common do |t|
t.add :pipeline_template_uuid
api_accessible :user, extend: :common do |t|
t.add :pipeline_template_uuid
@@
-39,17
+40,16
@@
class PipelineInstance < ArvadosModel
end
# if all components have input, the pipeline is Ready
end
# if all components have input, the pipeline is Ready
- def
self.is_ready components
- if !
components || components.empty? # is this correct
?
- return
tru
e
+ def
components_look_ready?
+ if !
self.components || self.components.empty
?
+ return
fals
e
end
all_components_have_input = true
end
all_components_have_input = true
- components.each do |name, component|
- component['script_parameters'].each do |parametername, parameter|
+
self.
components.each do |name, component|
+ component['script_parameters'].
andand.
each do |parametername, parameter|
parameter = { 'value' => parameter } unless parameter.is_a? Hash
parameter = { 'value' => parameter } unless parameter.is_a? Hash
- if parameter['value'].nil? and
- ![false,'false',0,'0'].index parameter['required']
+ if parameter['value'].nil? and parameter['required']
if parameter['output_of']
next
end
if parameter['output_of']
next
end
@@
-143,7
+143,7
@@
class PipelineInstance < ArvadosModel
if self.active
self.state = RunningOnServer
else
if self.active
self.state = RunningOnServer
else
- if
PipelineInstance.is_ready self.components
+ if
self.components_look_ready?
self.state = Ready
else
self.state = New
self.state = Ready
else
self.state = New
@@
-159,7
+159,7
@@
class PipelineInstance < ArvadosModel
end
elsif state_changed?
case self.state
end
elsif state_changed?
case self.state
- when New, Ready
+ when New, Ready
, Paused
self.active = false
self.success = nil
when RunningOnServer
self.active = false
self.success = nil
when RunningOnServer
@@
-171,13
+171,16
@@
class PipelineInstance < ArvadosModel
when Failed
self.active = false
self.success = false
when Failed
self.active = false
self.success = false
+ self.state = Failed # before_validation will fail if false is returned in the previous line
when Complete
self.active = false
self.success = true
when Complete
self.active = false
self.success = true
+ else
+ return false
end
end
- els
e # new object create or save
+ els
if components_changed?
if !self.state || self.state == New || !self.active
if !self.state || self.state == New || !self.active
- if
PipelineInstance.is_ready self.components
+ if
self.components_look_ready?
self.state = Ready
else
self.state = New
self.state = Ready
else
self.state = New
@@
-186,4
+189,16
@@
class PipelineInstance < ArvadosModel
end
end
end
end
+ def set_state_before_save
+ if !self.state || self.state == New
+ if self.active
+ self.state = RunningOnServer
+ elsif self.components_look_ready?
+ self.state = Ready
+ else
+ self.state = New
+ end
+ end
+ end
+
end
end