← Back to team overview

openstack team mailing list archive

Re: Database stuff

 

I'm really glad to hear all these votes for e), 'cause that's what I'd
like to see too :-)

d

On 29 Nov 2011 - 11:18, Brian Waldon wrote:
> I think option e is our best bet. It's the *only* option if we want to
> efficiently separate our services (as Jason has pointed out).
>
> Waldon
>
>
> On Nov 29, 2011, at 10:52 AM, Devin Carlen wrote:
>
> > Hey Soren,
> >
> > On Nov 29, 2011, at 7:20 AM, Soren Hansen wrote:
> >
> >> SQLAlchemy does support looking these things up on the fly. In fact,
> >> AFAIK, this is its default behaviour. We just override it with
> >> joinedload options, because we don't use scoped sessions.
> >>
> >> My fake db driver looks stuff like this up on the fly (so the
> >> assertEquals after the virtual_interface_create will fail with that db
> >> driver).
> >>
> >> So my question is this: Should this be
> >>
> >> a) looked up on the fly,
> >> b) looked up on first key access and then cached,
> >> c) looked up when the parent object is loaded and then never again,
> >> d) or up to the driver author?
> >>
> >> Or should we do away with this stuff altogether? I.e. no more looking up
> >> related objects by way of __getitem__ lookups, and instead only allow
> >> lookups through db methods. So, instead of
> >> network['virtual_interfaces'], you'd always do
> >> db.virtual_interfaces_get_by_network(ctxt, network['id']).  Let's call
> >> this option e).
> >
> > I think a simpler expectation of what the data objects should be
> > capable of enables a much wider variety of possible implementations.
> >
> > The main advantage to option e) is that it is simple both from an
> > implementation and from a debugging point of view.  You treat the
> > entire db layer as though it's just dumb dictionaries and then you
> > enable a wider support of implementation.  Sure sqlalchemy supports
> > lookups on __get__item, but maybe other potential implementations
> > won't.
> >
> >> I'm pretty undecided myself. If we go with option e) it becomes clear to
> >> consumers of the DB api when they're pulling out fresh stuff from the DB
> >> and when they're reusing potentially old results.  Explicit is better
> >> than implicit, but it'll take quite a bit of work to change this.
> >
> > Well, this is the way nova *used* to work.  I'm not exactly sure
> > when and if that changed.
> >
> >>
> >> If we go with one of options a) through d), my order of preference is
> >> (from most to least preferred): a), d), c), b).
> >>
> >> Option e) is also easy to explain and do reviews for, btw.
> >>
> >> It seems I've talked myself into preferring option e). It's too much
> >> work to do on my own, though, and it's going to be disruptive, so we
> >> need to do it real soon. I think it'll be worth it, though.
> >>
> >> --
> >> Soren Hansen        | http://linux2go.dk/
> >> Ubuntu Developer    | http://www.ubuntu.com/
> >> OpenStack Developer | http://www.openstack.org/
> >>
> >> _______________________________________________
> >> Mailing list: https://launchpad.net/~openstack
> >> Post to     : openstack@xxxxxxxxxxxxxxxxxxx
> >> Unsubscribe : https://launchpad.net/~openstack
> >> More help   : https://help.launchpad.net/ListHelp
> >
> > _______________________________________________
> > Mailing list: https://launchpad.net/~openstack
> > Post to     : openstack@xxxxxxxxxxxxxxxxxxx
> > Unsubscribe : https://launchpad.net/~openstack
> > More help   : https://help.launchpad.net/ListHelp
>

> _______________________________________________
> Mailing list: https://launchpad.net/~openstack
> Post to     : openstack@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~openstack
> More help   : https://help.launchpad.net/ListHelp



References