[openstack-dev] [keystone][nova][neutron][all] Rolling upgrades: database triggers and oslo.versionedobjects

Mike Bayer mbayer at redhat.com
Thu Sep 1 14:58:26 UTC 2016



On 09/01/2016 08:29 AM, Henry Nash wrote:
>
> From a purely keystone perspective, my gut feeling is that actually the
> trigger approach is likely to lead to a more robust, not less, solution - due
> to the fact that we solve the very specific problems of a given migration
> (i.e. need to keep column A in sync with Column B) or a short period of time,
> right at the point of pain, with well established techniques - albeit they be
> complex ones that need experienced coders in those techniques.

this is really the same philosophy I'm going for, that is, make a schema 
migration, then accompany it by a data migration, and then you're done. 
The rest of the world need not be concerned.

It's not as much about "triggers" as it is, "handle the data difference 
on the write side, not the read side".  That is, writing data to a SQL 
database is squeezed through exactly three very boring forms of 
statement, the INSERT, UPDATE, and DELETE.   These are easy to intercept 
in the database, and since we use an abstraction like SQLAlchemy they 
are easy to intercept in the application layer too (foreshadowing....). 
   When you put it on the read side, reading is of course (mostly) 
through just one statement, the SELECT, but it is a crazy beast in 
practice and it is all over the place in an unlimited number of forms.

If you can get your migrations to be, hey, we can just read JSON records 
from version 1.0 of the service and pump them into version 2.0, then 
you're doing read-side, but you've solved the problem at the service 
layer.  This only works for those situations where it "works", and the 
dual-layer service architecture has to be feasibly present as well.



More information about the OpenStack-dev mailing list