Fix master-node only graph processing

Check for nodes list emptiness when discovering
online nodes. With master-only graph we do not have
any nodes except for virtual_sync_node and master.
This leads to failure of mcollective discover
as it receives an empty list

Change-Id: I38bfd9b98f79ba83527de5956b66d2fc3ddb0020
Closes-bug: #1590337
This commit is contained in:
Vladimir Kuklin 2016-06-08 17:03:32 +03:00
parent 19a752426c
commit adf17f1e30
2 changed files with 46 additions and 16 deletions

View File

@ -234,23 +234,25 @@ module Astute
uids.delete('virtual_sync_node')
# In case of big amount of nodes we should do several calls to be sure
# about node status
Astute.config.mc_retries.times.each do
systemtype = Astute::MClient.new(
@ctx,
"systemtype",
uids,
_check_result=false,
10
)
available_nodes = systemtype.get_type.select do |node|
node.results[:data][:node_type].chomp == "target"
if !uids.empty?
Astute.config.mc_retries.times.each do
systemtype = Astute::MClient.new(
@ctx,
"systemtype",
uids,
_check_result=false,
10
)
available_nodes = systemtype.get_type.select do |node|
node.results[:data][:node_type].chomp == "target"
end
available_uids += available_nodes.map { |node| node.results[:sender] }
uids -= available_uids
break if uids.empty?
sleep Astute.config.mc_retry_interval
end
available_uids += available_nodes.map { |node| node.results[:sender] }
uids -= available_uids
break if uids.empty?
sleep Astute.config.mc_retry_interval
end
Astute.logger.warn "Offline node #{uids}" if uids.present?

View File

@ -67,6 +67,20 @@ describe Astute::TaskDeployment do
}
end
let(:tasks_graph_2) do
{"master"=>
[{
"type"=>"noop",
"fail_on_error"=>true,
"required_for"=>[],
"requires"=> [],
"id"=>"ironic_post_swift_key",
"parameters"=>{},
}],
"null"=> []
}
end
let(:tasks_directory) do
{"ironic_post_swift_key"=>{
"parameters"=>{
@ -148,6 +162,20 @@ describe Astute::TaskDeployment do
tasks_directory: tasks_directory)
end
it 'should not fail if there are no nodes to check for offline nodes' do
Astute::TaskPreDeploymentActions.any_instance.stubs(:process)
task_deployment.stubs(:write_graph_to_file)
ctx.stubs(:report)
task_deployment.expects(:fail_offline_nodes).returns([])
Astute::TaskCluster.any_instance.stubs(:run).returns({:success => true})
task_deployment.deploy(
tasks_metadata: tasks_metadata,
tasks_graph: tasks_graph_2,
tasks_directory: tasks_directory)
end
it 'should setup stop condition' do
Astute::TaskPreDeploymentActions.any_instance.stubs(:process)
task_deployment.stubs(:write_graph_to_file)