From 826efe8d453c1cc45a980603fffc10c91fa0e267 Mon Sep 17 00:00:00 2001 From: Luke Kanies Date: Wed, 31 Oct 2007 11:34:06 -0500 Subject: The configurations should now be functional again -- file recursion was previously not working, because the relationship graph was setting itself as a resource's primary configuration, which caused it to try creating its own relationship graph. I've now found that the current code is about 5x slower than the released code, so now I hope to resolve that. --- lib/puppet/node/configuration.rb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'lib/puppet/node') diff --git a/lib/puppet/node/configuration.rb b/lib/puppet/node/configuration.rb index f2bbfca00..1365767b6 100644 --- a/lib/puppet/node/configuration.rb +++ b/lib/puppet/node/configuration.rb @@ -33,6 +33,11 @@ class Puppet::Node::Configuration < Puppet::PGraph # that the host configuration needs. attr_accessor :host_config + # Whether this graph is another configuration's relationship graph. + # We don't want to accidentally create a relationship graph for another + # relationship graph. + attr_accessor :is_relationship_graph + # Add classes to our class list. def add_class(*classes) classes.each do |klass| @@ -56,7 +61,7 @@ class Puppet::Node::Configuration < Puppet::PGraph else @resource_table[ref] = resource end - resource.configuration = self + resource.configuration = self unless is_relationship_graph add_vertex!(resource) end end @@ -167,6 +172,9 @@ class Puppet::Node::Configuration < Puppet::PGraph @transient_resources << resource if applying? add_resource(resource) + if @relationship_graph + @relationship_graph.add_resource(resource) unless @relationship_graph.resource(resource.ref) + end resource end @@ -273,6 +281,8 @@ class Puppet::Node::Configuration < Puppet::PGraph # Create a graph of all of the relationships in our configuration. def relationship_graph + raise(Puppet::DevError, "Tried get a relationship graph for a relationship graph") if self.is_relationship_graph + unless defined? @relationship_graph and @relationship_graph # It's important that we assign the graph immediately, because # the debug messages below use the relationships in the @@ -281,6 +291,7 @@ class Puppet::Node::Configuration < Puppet::PGraph # then we get into an infinite loop. @relationship_graph = Puppet::Node::Configuration.new @relationship_graph.host_config = host_config? + @relationship_graph.is_relationship_graph = true # First create the dependency graph self.vertices.each do |vertex| -- cgit From 065a1d0281ba326674e37a00d8ced1e3a2dd57e4 Mon Sep 17 00:00:00 2001 From: Luke Kanies Date: Wed, 7 Nov 2007 17:48:50 -0600 Subject: Switching the graph base class from GRATR::Digraph to Puppet::SimpleGraph, which should dramatically enhance performance. It should be largely functionally equivalent, with the only difference being that edges are no longer deduplicated. --- lib/puppet/node/configuration.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'lib/puppet/node') diff --git a/lib/puppet/node/configuration.rb b/lib/puppet/node/configuration.rb index 1365767b6..e49090d70 100644 --- a/lib/puppet/node/configuration.rb +++ b/lib/puppet/node/configuration.rb @@ -83,6 +83,7 @@ class Puppet::Node::Configuration < Puppet::PGraph transaction.addtimes :config_retrieval => @retrieval_duration + begin transaction.evaluate rescue Puppet::Error => detail @@ -304,7 +305,7 @@ class Puppet::Node::Configuration < Puppet::PGraph # Lastly, add in any autorequires @relationship_graph.vertices.each do |vertex| vertex.autorequire.each do |edge| - unless @relationship_graph.edge?(edge) + unless @relationship_graph.edge?(edge.source, edge.target) # don't let automatic relationships conflict with manual ones. unless @relationship_graph.edge?(edge.target, edge.source) vertex.debug "Autorequiring %s" % [edge.source] @relationship_graph.add_edge!(edge) -- cgit