On Sun, 2010-03-14 at 15:49 -0700, Luke Kanies wrote:
> On Mar 14, 2010, at 1:42 AM, Brice Figureau wrote:
>
> > On 14/03/10 08:48, Luke Kanies wrote:
> >> On Mar 13, 2010, at 1:57 PM, Brice Figureau wrote:
> >>
> >>> On 13/03/10 21:33, Rein Henrichs wrote:
> >>>> Brice,
> >>>>
> >>>> I think the "real" fix for the underlying problem is fixing the
> >>>> regression
> >>>> bug introduced in the file serving refactor.
> >>>
> >>> Indeed, but I think this patch is close to this.
> >>>
> >>>> That said, if this hot patch
> >>>> works around the 100% CPU usage on recursive chowns bug in the
> >>>> user list
> >>>> thread, I think it's desirable to get this into the 0.25.x branch
> >>>> ASAP.
> >>>
> >>> The real underlying issue is that file metadata terminus doesn't
> >>> care
> >>> about the file {} checksum settings, it always compute the md5
> >>> checksum
> >>> of said files. Why? Because this is what is correct for remote files
> >>> metadatas.
> >>
> >> This actually shouldn't always need to be true - it's definitely
> >> unlikely that we wouldn't be interested in the remote md5, but it's
> >> at
> >> least possible.
> >
> > OK, it makes sense, but I have hard time thinking (in the current
> > puppet
> > system) when we wouldn't want to have remote metadatas including the
> > checksum?
>
> *We* wouldn't, but there's someone out there who's using remote file
> recursion just for setting owner/mode/etc, I promise. Crazy, but
> probably true. (Note: I don't know that this is true, I'm just
> estimating it based on experience.)
>
> That being said, if we have a simple fix that only works for local
> file serving, I'm perfectly happy with that and we should do it.
I think so too. I'd just appreciate if someone else could test the
current patch (which is available in my github repository at
tickets/0.25.x/2929).
> >>> Unfortunately the same code is called in the direct file serving
> >>> terminus system, where the checksum should not be computed (it
> >>> will be
> >>> done by the checksum property).
> >>>
> >>> This patch is not 100% correct (but my minimal testing show that it
> >>> works), and I don't expect it to be merged directly in 0.25.x (on
> >>> which
> >>> it is based).
> >>
> >> Why don't you expect that?
> >
> > My sentence wasn't complete: it is missing an "as is".
> >
> > When I wrote this I just had thought that directing the direct file
> > server to say to the fileset that they are local (and as such don't
> > have
> > to compute a checksum) would be a better direction.
> >
> > I must also add that I did only minimal testing of said patch (ie
> > tried
> > only in the lab with various files (ie sourced, local, recursive). But
> > the file resource is so vast, I didn't check managing links, copying
> > files, etc, were still working.
>
> The basic model is sound; the only confusing bits are around how
> checksum is used by source and content. That needs to be refactored
> anyway (e.g., I somehow broke Puppet's Tripwire-like functionality in
> 0.25), partially because it can be so hard to track.
>
> I've been thinking that 'checksum' needs the treatment 'source' got -
> turned into a parameter instead of a property.
Yes, I think this would be much simpler.
> Theoretically,
> checksum and content should be isomorphic, as long as you have source
> specified (or a filebucket), so checksum should just be a utility
> parameter rather than a real property.
That would make sense. Checksum should just be an indication of the
checksum type. And the real checksum would just be driven by either
content or source.
> Given that, we should probably
> also fix the confusion where the checksum parameter sets the checksum
> type but also determines and returns the actual checksum. This is
> especially stupid now that we only ever print a file's checksum rather
> than its contents.
That's what made my second attempt at fixing this issue so difficult.
> So, seems like we should switch the 'checksum' parameter to just
> support the various values (md5 et al), and move all checksum
> calculating into utility methods that the rest of the file resource
> uses. This should hopefully clean everything up enough that it
> actually becomes maintainable.
>
> Then our tripwire-like behaviour (which is that it passively monitors
> files, logging when a file's contents change) comes from tracking the
> content rather than the checksum:
>
> file { "/tmp/foobar": check => content }
I'm not sure about this syntax: do you mean we should add a new property
(ie check) to reintroduce tripwire functionality?
> This doesn't actually work right now, but I haven't had the time to
> figure out why.
>
> >>> It basically does two things:
> >>> * allow setting checksum => none
> >>> * make sure file metadata doesn't compute anything if checksum is
> >>> none
> >>> (but only for the direct file server terminus).
> >>>
> >>> A more correct patch would be to prevent checksums to be computed in
> >>> local file metadata search.
> >>
> >> I suppose that would be sufficient - just have a 'local' flag,
> >> effectively, and an additional flag saying "i don't care about the
> >> checksum", but... then the latter becomes a superset of the former,
> >> so
> >> skip the former, use what you have here, and move on.
> >>
> >> Or am I missing something?
> >
> > I don't think so, but I'm quite ignorant about the interaction between
> > the checksum file property and the rest of the system, so I want to
> > make
> > sure I'm not introducing any new regressions.
>
> Ok.
>
> Do you want to attempt to tackle the above refactor, would you like to
> collaborate with me on it, or would you prefer to skip it for now and
> just get this fix in?
Frankly I'd prefer we fix the issue in 0.25.x with this patch (granted
someone else can test it with success).
I don't really have lot of time until June for puppet dev (except those
occasional fixes), but I can at least try to start something. If you
want to do it, then go ahead, that will certainly be much more effective
than my procrastination :-)
--
Brice Figureau
Follow the latest Puppet Community evolutions on www.planetpuppet.org!
--
You received this message because you are subscribed to the Google Groups
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/puppet-dev?hl=en.