版本:opendaylight-ovsdb项目:fluorine-sr2
说明:本文档主要关注ovsdb被动连接情况下,连接成功后的上报及处理流程;
1 ovsdb 连接服务-OvsdbConnectionService
如下流程图为ovsdb 连接模块的连接启动过程,ovsdb分主动连接和被动连接两种方式,流程着重阐述了被动连接情况下的方法处理细节:
ovsdb南向模块在节点连接成功后,会触发相关监听器,回调连接成功处理函数:connected:
- hwvtep节点处理:HwvtepConnectionManager
- 普通ovsdb节点处理:OvsdbConnectionManager
2 OvsdbConnectionManager的节点连接处理-connected(OvsdbClient externalClient)
连接成功处理包含三个动作:
- 获取database> 通过externalClient获取Open_vSwitch数据库;
- 获取ovsdb连接实例> OvsdbConnectionInstance;
- 向集群注册实例> registerEntityForOwnership;
connectedButCallBacksNotRegistered的处理逻辑,如下所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yHBDDPiu-1571312653014)(./pic/01-01-ovsdb-OvsdbConnectionInstance创建.png)]
为集群实体注册ConnectionInfo-registerEntityForOwnership
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-obiWrgqG-1571312653016)(./pic/01-02-ovsdb-registerEntityForOwnership.png)]
3 ovsdb node节点上报的研究-1
3.1 注册回调-registerCallbacks
3.2 命令模式
命令模式中包含了基本上ovsdb所有的数据处理,包括节点信息上报、数据适配更新等,在此不再详尽描述,后续另外起一个文档转本阐述ovsdb模型适配上报中的命令模式研究!
这里的关键就是OvsdbMonitorCallback的update方法,通过invoke方法调用命令聚合类,并执行所有方法的execte!
@Override
public void update(TableUpdates result, DatabaseSchema dbSchema) {
txInvoker.invoke(new OvsdbOperationalCommandAggregator(instanceIdentifierCodec, key, result, dbSchema));
LOG.trace("Updated dbSchema: {} and result: {}", dbSchema, result);
}
4 关注ConnectionInfo-ovsdb node 的产生
根据3节的分析,进入命令模式后的处理,就是把ovsdb南向的json串转换成ovsdb定义的yang模型,进行各种模型的适配和上报处理,另外下发环节的Command则反之,读取yang转换成ovsdb的配置,我们仍然只是关注上报流程
可以看到正式OvsdbConnectionInstance类中包含了connectionInfo信息,再看一下哪个地方把这个模型填入了
经过分析和推断OpenVSwitchUpdateCommand构造了相关的模型,并填入node上报的信息:
5 总结
本文主要分析ovsdb被动连接状态下,节点状态上报的全流程,其中的部分关键流程入命令模式原理、关键模型均未展开分析,后续给出相关的详细说明;