Hi Deepak,

great to hear from you. Didn't expect you to join the conversation, but
as I offended your baby... sorry for this ;)

Am 01.04.2016 um 20:42 schrieb Deepak Giridharagopal:

> ... Maybe the thing to do here is to try some experiments and post back
> some numbers that could hopefully ground the discussion with some data?

Absolutely, I guess this is one of the things I was indirectly asking
for. No objection against letting C++ do the lexing work. But please
let's get some numbers before introducing the next caching mechanism.

> The vibe I'm getting from this line of feedback is that we should
> perhaps better articulate the longer-term plan around the native
> compiler in general, instead of focusing on increments (like .xpp) that,
> absent the larger context, may seem unhelpful in their own right?

Yes, please - that would be awesome!

>     "Databases are slow"
> 
>     We had active-records hammering our databases. The conclusion wasn't
>     that someone with SQL knowledge should design a good schema. The
>     publicly stated reasoning was "well, databases are slow, so we need more
>     cores to hammer the database, Ruby has not threading, Clojure is cool".
>     It still was slow by the end, so we added a message queue, a dead letter
>     office and more to the mix.
> 
> 
> With respect, I think this is a pretty unfair retelling of history. Even
> in the Puppetconf talk where I introduced PDB, this was not the story.
> I'm comfortable letting all the public video footage of us discussing
> the rationale rebut this.

Sorry Deepak, it wasn't meant like this. But yes, I was sitting there in
2012, listening to your talk. You're absolutely right, these where not
your words, you said nothing like this. But given the context this was
the message one could have read between the lines. At least I did.

The introduction of PuppetDB was that single piece that was "a little
too much" for me at that time. Remember, with this we started to have to
run two different RDBMS in parallel (old Dashboard), two distinct
message queues (MCO was also there), Ruby, Java, Clojure... for many
people just to configure NTP and Apache "the right way".

It wasn't for PuppetDB, that's a cool product. And it's getting better
with every release. It was for the Puppet-picture as a whole. I was
sitting there and listened, I "hated" you in that moment. I had the
chance to personally meet you twice. You are a very intelligent,
handsome and friendly person. And I never thought I would state this in
public. But yes, I was sitting there and I really hated you. Please
believe me, it was nothing personal. I hope you will forgive me one far
day ;-)

> Queueing had nothing to do with speed of persistence...

That's true. There is nothing wrong with queuing. What I wanted to state
was that at that time for most if not all "storeconfig users" a better
schema and well-thought queries would have solved all of their issues.
Even if blocking and run by plain Ruby.

> The dead-letter-office is unrelated to performance ... so we can debug
> it more thoroughly

Sure, absolutely makes sense. But how many people do you think know that
it even exists? It's a perfectly valid feature, a wonderful addition to
solve a specific problem. I would never drop it. In the context of shiny
new XPP this should just have been an example for "a far simpler
solution would eventually also work out".

> If writes take 0.5 seconds, then you'd start failing agent runs on any
> site that was > 3600 nodes using a 30 minute runinterval.

It's 1400 new, unseen resources in 0.5 seconds. So, 3000 inserts a
second, single connection, index rebuilding, full ACID, no cheating, no
SSD. No problem to run lot's of those transactions in parallel I guess.
Single transaction, so no excessive syncing/index update involved.

MUCH faster on the next catalog for the same node, as 99% of the
resources will already be there. One single query figures out which
resources are to be stored. Nothing complex, but not that bad either. I
mentioned those numbers with the intent to say "Hey, if we need seconds
to build a catalog plus time to serialize and ship that catalog, a
fraction of a second to persist it should be fine."

PuppetDB is a great product. It also was a big investment.

> In any case, if you've got your own well-tuned system for persisting
> catalogs, you can use that in place of puppetdb if you like. You could
> reuse the puppetdb terminus and swap your backend in (the wire formats
> are documented
> here 
> https://docs.puppetlabs.com/puppetdb/4.0/api/wire_format/catalog_format_v6.html,
> and the spec for queries are documented in the same spot). Is your code
> in a place where you can open source it?

No objection against open sourcing it. I also have no problem with
completely dropping it while trying to bring some of it's ideas to
PuppetDB. In case I'm going to make it public, I'd however need to sort
out some ideas. Just to give you an idea of what else is in the mix:

* first, I absolutely didn't want to write a new PuppetDB. It was meant
to be a quick & dirty tool to diff lot's of catalogs in preparation for
a migration to Puppet 4. Got other task to do and it was then left
untouched for a long time. It doesn't even have a Git repo.

* of course with some cleanup it could perfectly be used as a serious
alternative puppetdb terminus. But hey, there is PuppetDB, "just another
database" makes not much sense to me

* it's fact and catalog diffing capabilities are fantastic, even in it's
early stage. Before making it public I'd however love to figure out
whether and how it could scale out

* I have some very simple but nice ideas for a better Puppet module
lifecycle management in combination with this db. Wouldn't it be great
to be able to restore the exact module combination used to built a
specific historic catalog?

* I first played with the puppetdb terminus but then really fast opted
for an "inversion of control". To gain more flexibility I decided to
feed the compiler by myself. Remember, it was about running multiple
Puppet and Facter versions and comparing their catalogs. So I ended up
with flags allowing me to switch Puppet and Facter version for every
single run.

* At that time I also played a lot with Puppet over SSH. I recently
mentioned this in an Ignite talk:

  http://cfgmgmtcamp.eu/schedule/ignites/Thomas.pdf

It wasn't meant as a serious proposal, it was about encouraging people
to think around the corner. But hey, it works. And as pluginsync and
file-shipping is amazingly fast that way, it easily outperforms "legacy"
Master/Agent communication.

I did different attempts to let all those prototypes work together in a
meaningful way. You can imagine what it looks like right now ;) Sure,
I'd love to make this little baby become a shiny new tool loved by many
Puppet users. However, I'm currently bound in too many parallel
projects, and sadly most of them not directly related to Puppet at all.
It would require 2-3 dedicated weeks to get ready for a first useful
release with some related documentation.

> The point about it being harder for folks to quickly fix facts behaving
> weird on their systems is one worth talking more about. Would you mind
> starting a separate thread about the debugging experience so we could
> talk through that independent of the xpp discussion?

You're right, this is the wrong thread for this. However, I wouldn't
even know how to start such a new one. I have no easy solution to
propose for this issue. A fact that behaves strange in Ruby facter can
be fixed. Even on an outdated Linux or a Unix system like AIX, Solaris,
HP-UX, whatever. cFacter IS faster. But it's an all-or-nothing choice.
Like AIO ;)

> I do think it's worth keeping in mind that there are more puppet users
> now than ever; it's a very big tent. In my humble opinion,
> generalizations about what "most average admins" can do are increasingly
> fraught with peril the bigger and more diverse our user base has gotten.

Full ack.

Thanks you Deepak for your comments, and sorry again for my little rant
against PuppetDB.

Cheers,
Thomas




-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to puppet-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-dev/ndn7bq%24g9e%241%40ger.gmane.org.
For more options, visit https://groups.google.com/d/optout.

Reply via email to