On Jul 3, 2012, at 5:04 AM, Brice Figureau wrote:

> On 03/07/12 01:03, Luke Kanies wrote:
>> On Jul 2, 2012, at 1:59 PM, Brice Figureau wrote:
>> 
>>> Hi,
>>> 
>>> While wrapping up my compiler performance patch (soon to be
>>> released), I stumbled on this test (in compiler_spec.rb):
>>> 
>>> it "should fail to add resources that conflict with existing
>>> resources" do path = make_absolute("/foo") file1 =
>>> Puppet::Type.type(:file).new :path => path file2 =
>>> Puppet::Type.type(:file).new :path => path
>>> 
>>> @compiler.add_resource(@scope, file1) lambda {
>>> @compiler.add_resource(@scope, file2) }.should 
>>> raise_error(Puppet::Resource::Catalog::DuplicateResourceError) end
>>> 
>>> I'm wondering what's the point in adding already compiled RAL
>>> resources to a compiler, especially when those are even not
>>> inheriting from Puppet::Resource.
>>> 
>>> The reason I'm asking this is that I added two methods to 
>>> Puppet::Resource (namely class? and stage?) to prevent the DRY
>>> smell of doing: resource.type.to_s.downcase == "stage" (and
>>> equivalent for "class")
>>> 
>>> My intent was to reduce the number of times this code structure is 
>>> executed during a compilation (mainly to prevent creation of so
>>> many short-lived String objects).
>>> 
>>> Did I miss anything obvious?
>> 
>> Probably not.  This is a pretty hideous aspect of the system right
>> now, and until we can merge Puppet::Type and Puppet::Resource, it's
>> probably going to be confusing to everyone who isn't me (it's my
>> fault, which is why it's not confusing to me).
>> 
>> Currently, Puppet::Type and Puppet::Resource are entirely separate
>> class hierarchies, although I would like the resource-instance
>> behaviors of Puppet::Type to be merged into Puppet::Resource at some
>> point.
> 
> That would make sense, but this will really blur the use cases. I'm not
> sure you'd want to do that. That's also something that I always found
> strange: the Catalog can contain 3 types of totally different entities
> (parser resources, then resources, then types instances).

Yeah, although parser resources are inherited from resources.  I agree this is 
horrible, and I'd love to fix it.  They do all have the same basic interface 
now, though.

>> In general, and *almost* certainly for the cases of Catalog, they
>> behave identically.  I expect that what's happening here is that it
>> doesn't much matter what kind of resource we add, the failure should
>> be the same.
> 
> But that's the catalog role to say that no two resources can be added.
> This test really should be in the catalog specs.

I think I added it because I wanted to make sure the error actually propagated 
up.  That is, it's important that the compiler fail when this exception 
happens, regardless of where it's from.

>> It sounds like you think we should be adding
>> Puppet::Resource instances, which is probably right, but maybe this
>> code is older, from before that class existed or something.
> 
> Actually I think we should add Puppet::Parser::Resource :)
> 
>> This test is important because (I think) Catalog is used for the test
>> at compile time, so you're right it would make more sense to use
>> Puppet::Resource here, rather than Puppet::Type.
>> 
>> Does that help?
> 
> Well, that's how I fixed the test in the performance-fixes branches, so
> I guess it helped :)

:)

-- 
Luke Kanies | http://about.me/lak | http://puppetlabs.com/ | +1-615-594-8199

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to puppet-dev@googlegroups.com.
To unsubscribe from this group, send email to 
puppet-dev+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to