[openstack-dev] [TripleO] Is Swift a good choice of database for the TripleO API?
Ryan Brown
rybrown at redhat.com
Wed Jan 6 12:30:51 UTC 2016
On 12/23/2015 04:19 AM, Dougal Matthews wrote:
>
>
> On 22 December 2015 at 17:59, Ben Nemec <openstack at nemebean.com
> <mailto:openstack at nemebean.com>> wrote:
>
> Can we just do git like I've been suggesting all along? ;-)
>
> More serious discussion inline. :-)
>
> On 12/22/2015 09:36 AM, Dougal Matthews wrote:
> > Hi all,
> >
> > This topic came up in the 2015-12-15 meeting[1], and again
> briefly today.
> > After working with the code that came out of the deployment library
> > spec[2] I
> > had some concerns with how we are storing the templates.
> >
> > Simply put, when we are dealing with 100+ files from
> tripleo-heat-templates
> > how can we ensure consistency in Swift without any atomicity or
> > transactions.
> > I think this is best explained with a couple of examples.
> >
> > - When we create a new deployment plan (upload all the templates
> to swift)
> > how do we handle the case where there is an error? For
> example, if we are
> > uploading 10 files - what do we do if the 5th one fails for
> some reason?
> > There is a patch to do a manual rollback[3], but I have
> concerns about
> > doing this in Python. If Swift is completely inaccessible for
> a short
> > period the rollback wont work either.
> >
> > - When deploying to Heat, we need to download all the YAML files
> from
> > Swift.
> > This can take a couple of seconds. What happens if somebody
> starts to
> > upload a new version of the plan in the middle? We could end
> up trying to
> > deploy half old and half new files. We wouldn't have a
> consistent view of
> > the database.
> >
> > We had a few suggestions in the meeting:
> >
> > - Add a locking mechanism. I would be concerned about deadlocks or
> > having to
> > lock for the full duration of a deploy.
>
> There should be no need to lock the plan for the entire deploy. It's
> not like we're re-reading the templates at the end of the deploy today.
> It's a one-shot read and then the plan could be unlocked, at least as
> far as I know.
>
>
> Good point. That would be holding the lock for longer than we need.
>
>
> The only option where we wouldn't need locking at all is the
> read-copy-update model Clint mentions, which might be a valid option as
> well. Whatever we do, there are going to be concurrency issues though.
> For example, what happens if two users try to make updates to the plan
> at the same time? If you don't either merge the changes or disallow one
> of them completely then one user's changes might be lost.
>
> TBH, this is further convincing me that we should just make this git
> backed and let git handle the merging and conflict resolution (never
> mind the fact that it gets us a well-understood version control system
> for "free"). For updates that don't conflict with other changes, git
> can merge them automatically, but for merge conflicts you just return a
> rebase error to the user and make them resolve it. I have a feeling
> this is the behavior we'll converge on eventually anyway, and rather
> than reimplement git, let's just use the real thing.
>
>
> I'd be curious to hear more how you would go about doing this with git. I've
> never automated git to this level, so I am concerned about what issues we
> might hit.
>
> Do you happen to know of any good sources that I can find out more?
One source of inspiration could be the way Openshift handles things. You
get a git URL to push your $whatever to, and they have git hooks that
deploy when you push. This would be perfect for merge conflict
situations. Imagine two cases.
Normal case:
1. User does stuff in web interface or over API
2. The API adds templates and such to git repo, then deploys as needed
3. User is happy!
Merge conflict case:
1. User does stuff in web interface or over API
2. The API tries, but there's a merge conflict. It hands back a 409 and
a git URL
3. User clones the repo and resolves conflict
4. User pushes repo back up
5. API deploys stuff
6. User is happy!
> /2 cents
>
> > - Store the files in a tarball (so we only deal with one file). I think we
> > could still hit issues with multiple operations unless we guarantee that
> > only one instance of the API is ever running.
> >
> > I think these could potentially be made to work, but at this point are we
> > using the best tool for the job?
> >
> > For alternatives, I see a can think of a couple of options:
> >
> > - Use a database, like we did for Tuskar and most OpenStack API's do.
>
> I kind of like this, in particular because it would allow us to handle
> migrations between versions the same way as other OpenStack services.
>
>
> Yeah, I feel like this is the "safe" option. It's a well trodden and
> tested path.
>
> I'm not entirely sure how it maps to our template configuration method
> though. Storing a bunch of template blobs in the database feels a
> little square peg, round hole to me, and might undo a lot of the
> benefits of using the database in the first place.
>
>
> I don't follow this point. In the way we access Swift, everything is
> essentially
> a blob of text also.
>
> Now, on the other hand, having a database to store basic data like
> metadata on plans and such might be a useful thing regardless of where
> we store the templates themselves. We could also use it for locking
> just fine IMHO - TripleO isn't a tool targeted to have cloud-scale
> number of users. It's a deployer tool with a relatively limited number
> of users per installation, so the scaling of a locking mechanism isn't a
> problem I necessarily think we need to solve. We have way bigger
> scaling issues than that to tackle before I think we would hit the limit
> of a database-locking scheme.
>
> > - Invest time in building something on Swift.
> > - Glance was transitioning to be a Artifact store. I don't know the
> > status of
> > this or if it would meet out needs.
> >
> > Any input, ideas or suggestions would be great!
> >
> > Thanks,
> > Dougal
> >
> >
> > [1]:
> >http://eavesdrop.openstack.org/meetings/tripleo/2015/tripleo.2015-12-15-14.03.log.html#l-89
> > [2]:
> >https://specs.openstack.org/openstack/tripleo-specs/specs/mitaka/tripleo-overcloud-deployment-library.html
> > [3]:https://review.openstack.org/#/c/257481/
> >
> >
> >
> __________________________________________________________________________
> > OpenStack Development Mailing List (not for usage questions)
> > Unsubscribe:
> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
> > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> >
>
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe:
> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
>
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
--
Ryan Brown / Senior Software Engineer, Openstack / Red Hat, Inc.
More information about the OpenStack-dev
mailing list