<div dir="ltr">Hi,<div><div><br></div><div>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.</div><div><br></div><div>In plugin code, I found all the resource operations follow the pattern in [1]. It is a very misleading design compare to [2]. </div><div><br></div><div>"<span style="color:rgb(51,51,51);font-family:"Arial Unicode MS",Arial,sans-serif;font-size:14px">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.</span>" </div><div><br></div><div>In result, if we focus on the out-of-sync between plugin DB and driver/backend DB: </div><div><br></div><div>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. </div><div>2) In ODL driver, only methods Action_Resource_<wbr>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.</div><div><br></div><div>So, to fix this issue is costly. Both plugin and driver sides need to be altered. </div><div><br></div><div>The other side of this issue is a period db monitor mechanism between plugin and drivers, and it is another story.</div></div><div><br></div><div><br></div><div>[0] <a href="https://review.openstack.org/#/c/516256">https://review.openstack.org/#/c/516256</a></div><div>[1]</div><div>...</div><div><div>    def Action_Resource</div><div>        self.validate_Resource_for_<wbr>Action</div><div>        self.driver.Action_Resource</div><div>        with context.session.begin(<wbr>subtransactions=True):</div><div>            super.Action_Resource</div><div>            self.driver.Action_Resource_<wbr>precommit</div><div>        try:</div><div>            self.driver.Action_Resource_<wbr>postcommit</div><div>...</div><div>[2] <a href="https://wiki.openstack.org/wiki/Neutron/ML2" target="_blank">https://wiki.openstack.<wbr>org/wiki/Neutron/ML2</a></div><div><br></div>-- <br><div class="gmail-m_-1489948590428220979gmail_signature"><div dir="ltr"><div><div dir="ltr"><font face="arial, helvetica, sans-serif" size="2">Peng Liu </font></div></div></div></div>
</div></div>