nova team mailing list archive
-
nova team
-
Mailing list archive
-
Message #00275
Re: Moving away from SQLAlchemy models? What?
Are you both (and anyone else interested) going to work on a draft blueprint
before the summit? I'm keen to see discussion drafts in place before we
all meet in person, otherwise we'll waste a lot of time just getting on the
same page.
Thanks,
Ewan.
On Mon, Oct 04, 2010 at 07:01:57PM +0100, Eric Day wrote:
> ++ on all points. When it was decided to implement a Redis backend for
> the DB API, I tried to explain my concerns about recreating SQLAlchemy
> with a Redis back-end, and then some. We should decide what data
> model we are using (relational, hierarchical, flat key-value, graph,
> ...) and decide on a native API to use. If we wan to stay relational,
> using SQLAlchemy natively and using it's pluggable backend system
> may be sufficient.
>
> There is also the distributed storage and privacy concerns to discuss
> as well at the summit. For example, each compute/network/volume worker
> could keep it's own store and push any required information up to
> the other layers (scheduler/API). This would ensure a compromised
> worker machine could not touch other workers or their data stores,
> and scaling a central data store is no longer an issue. With these
> concerns in mind, this may also sway which data model and API we want
> to expose to the applications.
>
> -Eric
>
> On Mon, Oct 04, 2010 at 01:34:27PM -0400, Jay Pipes wrote:
> > I agree with Soren that big changes like this should occur after some
> > discussion (a thought that I rose on IRC last week).
> >
> > I look forward to the discussion at the next summit about the ORM in
> > general, and specifically, these concerns about it I have:
> >
> > 1) Inconsistent (and sometimes incorrect) use of session boundaries in
> > the abstraction layer for sqlalchemy. Peculiar bugs show up when
> > sessions aren't handled (passed between functions) properly or when
> > transactions are not reliable (NoSQL or when the RDBMS doesn't support
> > transactional statements like SELECT ... FOR UPDATE.
> > 2) Shared code between Glance and Nova (and possibly Swift, but it's
> > less of an issue IMHO). There is now a copy of the datastore adapter
> > from Nova in Glance (this was done to save time). We will want to
> > pull this code out into openstack-common ASAP, as I really don't feel
> > like maintaining two copies of the datastore adapter layer ;)
> > 3) The Model class itself. The biggest issue is that the model class
> > does not live in the API layer; instead, it must be re-implemented for
> > each adapter. I experienced the joy of trying to re-create the
> > existing SQLAlchemy-based NovaBase model class in the Redis adapter.
> > This was less than enjoyable. If we choose to use a base model class,
> > it needs to address these fundamental issues *at a bare minimum*:
> > a) The definition of data fields (versus non-data fields, private
> > fields, or calculated fields)
> > b) The casting of SQL-like data types (CHAR, INT, BLOB, DATETIME,
> > etc) into data type that Python understands consistently.
> > c) A model's understanding (or lack of understanding) of its
> > relationships with other types of models.
> > d) The aforementioned debate about what is appropriate as a primary
> > key identifier for each model (UUID, URI, auto-inc, etc)
> >
> > -jay
> >
> > On Sun, Oct 3, 2010 at 5:10 PM, Devin Carlen <devin.carlen@xxxxxxxxx> wrote:
> > > Soren,
> > >
> > > This comment was with regards to using declarative_base(), which was used to quickly implement the data layer and save some time. The next iteration we've been discussing internally, is to drop the use of declarative_base and using sqlalchemy table definitions instead.
> > >
> > > declarative_base() provides value primarily when you are planning on actually using sqlalchemy models as the middle tier. We only use them as a stepping stone in the data layer, and then treat everything as dicts currently. (Whether we should be using dicts everywhere is part of a larger discussion I hope to bring up at the next design summit.)
> > >
> > > By using the table definitions directly and bypassing declarative_base(), we will be able to cut out two superfluous and unnecessary transformations before the data is passed back to the middle tier.
> > >
> > > There are no immediate plans to do this, but you are right - it is worthy of further discussion.
> > >
> > >
> > > Devin
> > >
> > >
> > > This only was meant to indicate that we would be changing from u
> > >
> > > On Oct 2, 2010, at 2:52 AM, Soren Hansen wrote:
> > >
> > >> Looking at the commit message for r316 on trunk, I see this (emphasis mine):
> > >>
> > >> Also refactored NovaBase and removed several methods since they
> > >> would have to be changed *when we move away from sqlalchemy models*
> > >> and begin using sqlalchemy table definitions.
> > >>
> > >> I find it worrisome that such things are stated as though they are
> > >> naturally given or generally agreed upon. I have no recollection of a
> > >> discussion to that effect, let alone a decision.
> > >>
> > >> I certainly hope a big patch to do this doesn't suddenly turn up without
> > >> prior discussion and a related blueprint..
> > >>
> > >> --
> > >> Soren Hansen
> > >> Ubuntu Developer http://www.ubuntu.com/
> > >> OpenStack Developer http://www.openstack.org/
> > >>
> > >> _______________________________________________
> > >> Mailing list: https://launchpad.net/~nova
> > >> Post to : nova@xxxxxxxxxxxxxxxxxxx
> > >> Unsubscribe : https://launchpad.net/~nova
> > >> More help : https://help.launchpad.net/ListHelp
> > >
> > >
> > > _______________________________________________
> > > Mailing list: https://launchpad.net/~nova
> > > Post to : nova@xxxxxxxxxxxxxxxxxxx
> > > Unsubscribe : https://launchpad.net/~nova
> > > More help : https://help.launchpad.net/ListHelp
> > >
> >
> > _______________________________________________
> > Mailing list: https://launchpad.net/~nova
> > Post to : nova@xxxxxxxxxxxxxxxxxxx
> > Unsubscribe : https://launchpad.net/~nova
> > More help : https://help.launchpad.net/ListHelp
>
> _______________________________________________
> Mailing list: https://launchpad.net/~nova
> Post to : nova@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~nova
> More help : https://help.launchpad.net/ListHelp
Follow ups
References