(六)ODL Openflowplugin 控制器成为SLAVE过程源码分析

作者简介:陈卓文,国内某游戏公司私有云团队开发者,主要从事SDN/NFV开发。

由于篇幅问题,我们将“Openflowplugin中Switch生命周期”这个大问题拆分为几个篇章:Switch生命周期对象ContextChain创建;控制节点的Master选举及ContextChain/Context服务实例化;MastershipChangeService以ReconciliationFramework;控制节点成为Slave;Switch下线过程。
本文为Openflowplugin(0.6.2)源码分析第六篇,前两篇笔记展开的是控制器成为Master,那么总会有控制器节点成为SLAVE,本文展开源码分析。

附:
第一篇:(一)ODL OpenflowPlugin启动流程源码分析
第二篇:(二)ODL Openflowplugin Switch连上控制器Handshake过程源码分析
第三篇:(三)ODL Openflowplugin Switch生命周期对象ContextChain创建源码分析
第四篇:(四)ODL Openflowplugin Master选举及Context服务实例化源码分析
第五篇:(五)ODL Openflowplugin Mastership及ReconciliationFramework源码分析

读者约定:基本掌握Opendaylight的思想/有一定实践经验,想要深入理解openflowplugin源码/想对openflowplugin源码修改。

回顾上两篇笔记,我们深入了控制器成为Master并实例化服务过程,那么当多个控制器情况下,总有其他控制器成为SLAVE,让我们在下面深入控制器节点成为SLAVE过程。

1.成为SLAVE流程

在上述ContextChainHolderImpl.onMasterRoleAcquired方法,是在singleton service选举成master,四个context初始化完成后会调用的,且当四个context都全部初始化完成后,此方法就会触发钩子通知上层应用(MastershipChangeServiceManager.becomeMasterBeforeSubmittedDSMastershipChangeServiceManager.becomeMaster)。

那么也有可能控制器节点成为Switch的slave,下面展开讲解BECOMESLAVE的触发。

1.1 创建slaveTask

回到ContextChainHolderImpl.createContextChain方法,创建RoleContextImpl过程:

在创建RoleContex对象时,会传入变量CHECK_ROLE_MASTER_TIMEOUT默认值20s,用于等待CHECK_ROLE_MASTER_TIMEOUT时间,如果这段时间内不能选举成为master,控制节点就会成为slave,具体逻辑下面展开。

RoleContextImpl构造器中:会创建slaveTask,当超时CHECK_ROLE_MASTER_TIMEOUT就会调用makeDeviceSlave()方法:

makeDeviceSlave()方法会完成:
(1)调用Set-role rpc发送给底层switch设备,告知其当前控制器成为BECOMESLAVE
(2)Rpc发送成功后,回调SlaveRoleCallback(),其作用是调用ContextChainHolderImpl.onSlaveRoleAcquired(deviceInfo);方法。

SlaveRoleCallback()回调具体:

1.2 超时成为SLAVE

roleContext中,当超时20s没成为master,就会成为slave。最终调用回到ContextChainHolderImpl.onSlaveRoleAcquired方法。

同样的,此方法最终会调用MastershipChangeServiceManager的becomeSlaveOrDisconnect方法(如同become master触发一样)。所以可以再次加深理解为MastershipChangeServiceManager是上层应用感知底层选举的入口,钩子!

1.3 成为Slave触发MastershipChangeServiceManager

becomeSlaveOrDisconnect方法如下:

根据上面对MastershipChangeServiceManagerImpl的说明。可以理解到becomeSlaveOrDisconnect会触发通过ReconciliationFramework注册的应用,以及直接在MastershipChangeServiceManagerImpl中注册的应用。

触发reconciliationFramework注册的服务
becomeSlaveOrDisconnect方法中的:

即调用ReconciliationManagerImpl.onDeviceDisconnected方法

根据调用链:最后会调用注册到Framework的service的endReconciliation方法。(同样会根据优先级触发)

触发注册MastershipChangeServiceManager的服务
becomeSlaveOrDisconnect方法中的:

触发的是注册service实现的onLoseOwnership方法。

2.总结

通过本文,我们可以了解到,当节点20s没通过Singleton Service选举为Master进行实例化时,控制器节点就会成为SLAVE,并且通过ReconciliationFramework或者原生MastershipChangeServiceManager触发我们注册的北向应用。


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/22418.html
分享到:
相关文章
条评论

登录后才可以评论

陈卓文 发表于18-09-28
3