Neutron调用ML2 插件

在编写扩展、服务插件或Neutron其它部分的代码时,如果你在调用核心插件方法的会话上有一个打开的事务,你不能调用那些会改变状态的核心插件方法。

所有ML2中创建和更新端口port、网络network和子网subnet的方法都有一个预提交阶段和提交后阶段。在提交后阶段,数据期望被完全保存到数据库中,并且ML2驱动程序将使用此时间将信息传递到Neutron外部的后端backend。在事务中调用ML2插件将违反这种语义是因为数据不会保存到DB数据库;并且,如果发生导致整个事务回滚的错误,后端会与Neutron数据库DB的状态不一致。

为了防止这种情况发生,这些方法将由一个修饰符保护,如果它们调用的上下文具有活动事务上的会话,则引发错误RuntimeError。修饰符可在neutron.common.utils.transaction_guard中找到,也可在Neutron的其它地方使用,保护需要在事务之外调用的函数。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页