[openstack-dev] [neutron][l2gw] Preventing DB out-of-sync
Peng Liu
pliu at redhat.com
Wed Dec 6 08:46:59 UTC 2017
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.
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20171206/fd6e90c4/attachment.html>
More information about the OpenStack-dev
mailing list