On Wed, Dec 6, 2017 at 3:46 AM, Peng Liu <p...@redhat.com> wrote: > Hi, > > During working on this patch[0], I encounter some DB out-of-sync problem. I > think maybe the design can be improved. Here is my thought, all comments are > welcome.
see also https://review.openstack.org/#/c/490834/ which I think is dealing with a similar (if not the same) issue. > > In plugin code, I found all the resource operations follow the pattern in > [1]. It is a very misleading design compare to [2]. > > "For every action that can be taken on a resource, the mechanism driver > exposes two methods - ACTION_RESOURCE_precommit, which is called within the > database transaction context, and ACTION_RESOURCE_postcommit, called after > the database transaction is complete." > > In result, if we focus on the out-of-sync between plugin DB and > driver/backend DB: > > 1) In RPC driver, only methods Action_Resource and are implemented. Which > means the action is token before it was written in plugin DB. In case of > action partial succeed (especially for update case) or plugin DB operation > failure, it will cause DB out-of-sync. > 2) In ODL driver, only methods Action_Resource_postcommit are implemented, > which means there is no validation in ODL level before the record is written > in the plugin DB. In case of, ODL side failure, there is no rollback for > plugin DB. > > So, to fix this issue is costly. Both plugin and driver sides need to be > altered. > > The other side of this issue is a period db monitor mechanism between plugin > and drivers, and it is another story. > > > [0] https://review.openstack.org/#/c/516256 > [1] > ... > def Action_Resource > self.validate_Resource_for_Action > self.driver.Action_Resource > with context.session.begin(subtransactions=True): > super.Action_Resource > self.driver.Action_Resource_precommit > try: > self.driver.Action_Resource_postcommit > ... > [2] https://wiki.openstack.org/wiki/Neutron/ML2 > > -- > Peng Liu > > __________________________________________________________________________ > OpenStack Development Mailing List (not for usage questions) > Unsubscribe: openstack-dev-requ...@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-requ...@lists.openstack.org?subject:unsubscribe http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev