For persistenting the graph there is also:

https://github.com/LogicalDash/gorm#gorm

The above sounds interesting...

'Object relational mapper for graphs with in-built revision control.'

It then hooks in to the https://networkx.github.io/ library which provides a 
ton of useful graph functionality.

As you guys get more and more into doing graph manipulation I am betting that 
library (networkx) will become more and more useful...

-Josh

On Oct 23, 2014, at 11:10 AM, Zane Bitter <zbit...@redhat.com> wrote:

> Hi folks,
> I've been looking at the convergence stuff, and become a bit concerned that 
> we're more or less flying blind (or at least I have been) in trying to figure 
> out the design, and also that some of the first implementation efforts seem 
> to be around the stuff that is _most_ expensive to change (e.g. database 
> schemata).
> 
> What we really want is to experiment on stuff that is cheap to change with a 
> view to figuring out the big picture without having to iterate on the 
> expensive stuff. To that end, I started last week to write a little prototype 
> system to demonstrate the concepts of convergence. (Note that none of this 
> code is intended to end up in Heat!) You can find the code here:
> 
> https://github.com/zaneb/heat-convergence-prototype
> 
> Note that this is a *very* early prototype. At the moment it can create 
> resources, and not much else. I plan to continue working on it to implement 
> updates and so forth. My hope is that we can develop a test framework and 
> scenarios around this that can eventually be transplanted into Heat's 
> functional tests. So the prototype code is throwaway, but the tests we might 
> write against it in future should be useful.
> 
> I'd like to encourage anyone who needs to figure out any part of the design 
> of convergence to fork the repo and try out some alternatives - it should be 
> very lightweight to do so. I will also entertain pull requests (though I see 
> my branch primarily as a vehicle for my own learning at this early stage, so 
> if you want to go in a different direction it may be best to do so on your 
> own branch), and the issue tracker is enabled if there is something you want 
> to track.
> 
> I have learned a bunch of stuff already:
> 
> * The proposed spec for persisting the dependency graph 
> (https://review.openstack.org/#/c/123749/1) is really well done. Kudos to 
> Anant and the other folks who had input to it. I have left comments based on 
> what I learned so far from trying it out.
> 
> 
> * We should isolate the problem of merging two branches of execution (i.e. 
> knowing when to trigger a check on one resource that depends on multiple 
> others). Either in a library (like taskflow) or just a separate database 
> table (like my current prototype). Baking it into the orchestration 
> algorithms (e.g. by marking nodes in the dependency graph) would be a 
> colossal mistake IMHO.
> 
> 
> * Our overarching plan is backwards.
> 
> There are two quite separable parts to this architecture - the worker and the 
> observer. Up until now, we have been assuming that implementing the observer 
> would be the first step. Originally we thought that this would give us the 
> best incremental benefits. At the mid-cycle meetup we came to the conclusion 
> that there were actually no real incremental benefits to be had until 
> everything was close to completion. I am now of the opinion that we had it 
> exactly backwards - the observer implementation should come last. That will 
> allow us to deliver incremental benefits from the observer sooner.
> 
> The problem with the observer is that it requires new plugins. (That sucks 
> BTW, because a lot of the value of Heat is in having all of these tested, 
> working plugins. I'd love it if we could take the opportunity to design a 
> plugin framework such that plugins would require much less custom code, but 
> it looks like a really hard job.) Basically this means that convergence would 
> be stalled until we could rewrite all the plugins. I think it's much better 
> to implement a first stage that can work with existing plugins *or* the new 
> ones we'll eventually have with the observer. That allows us to get some 
> benefits soon and further incremental benefits as we convert plugins one at a 
> time. It should also mean a transition period (possibly with a performance 
> penalty) for existing plugin authors, and for things like HARestarter (can we 
> please please deprecate it now?).
> 
> So the two phases I'm proposing are:
> 1. (Workers) Distribute tasks for individual resources among workers; 
> implement update-during-update (no more locking).
> 2. (Observers) Compare against real-world values instead of template values 
> to determine when updates are needed. Make use of notifications and such.
> 
> I believe it's quite realistic to aim to get #1 done for Kilo. There could 
> also be a phase 1.5, where we use the existing stack-check mechanism to 
> detect the most egregious divergences between template and reality (e.g. 
> whole resource is missing should be easy-ish). I think this means that we 
> could have a feasible Autoscaling API for Kilo if folks step up to work on it 
> - and in any case now is the time to start on that to avoid it being delayed 
> more than it needs to be based purely on the availability of underlying 
> features. That's why I proposed a session on Autoscaling for the design 
> summit.
> 
> 
> * This thing is going to _hammer_ the database
> 
> The advantage is that we'll be able to spread the access across an arbitrary 
> number of workers, but it's still going to be brutal because there's only one 
> database. We'll need to work hard to keep DB access to the minimum we can.
> 
> 
> That's it for now. I'm going to continue hacking on this, though don't expect 
> much progress before the Summit. I'd be happy to hear any feedback that 
> anybody has, and I hope this might prove a useful platform for other folks to 
> experiment with too.
> 
> cheers,
> Zane.
> 
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev@lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to