更新 OpenDaylight 中的 OpenFlow 组 table 桶列表

Updating OpenFlow group table bucket list in OpenDaylight

我有一个带有 openvswitch (v2.5.2) 的 mininet (v2.2.2) 网络,由 OpenDaylight Carbon 控制。我的应用程序是 OpenDaylight karaf 功能。 应用程序根据需要创建流(用于多播)到组 table(类型=all)和 adds/removes 桶。 对于 add/remove 个桶,我首先检查是否存在现有组 table:

InstanceIdentifier<Group> groupIid = InstanceIdentifier.builder(Nodes.class)
    .child(Node.class, new NodeKey(NodId))
    .augmentation(FlowCapableNode.class)
    .child(Group.class, grpKey)
    .build();
ReadOnlyTransaction roTx = dataBroker.newReadOnlyTransaction();
Future<Optional<Group>> futOptGrp = rwTx.read(LogicalDatastoreType.OPERATIONAL, groupIid);

如果找不到组 table,则会创建 (SalGroupService.addGroup())。如果确实找到组 table,则会更新 (SalGroupService.updateGroup())。

问题是在 RPC 调用 add/updateGroup() 后需要一些时间才能看到数据模型的变化。等待 Future<RPCResult<?>> 并不能保证数据模型具有与设备相同的状态。

那么,如何从数据模型中读取组 table 和存储桶列表,并确保我确实正在读取与设备当前状态相同的状态?

我知道

但我不知道如何组合这些。 谢谢

编辑:或者我是否必须使用写入事务而不是 RPC 调用?

我放弃了使用 RPC 调用来写入流程,转而使用写入配置数据存储。仍然需要一些时间才能看到更改出现在实际设备和操作数据存储中,但只要我使用配置数据存储进行读取和写入就可以了。

但是,我必须记住,不能保证对配置数据存储的更改总是会影响到实际设备。从不太可能发生冲突的意义上说,我的流程并没有那么复杂。不过,我可能会检查操作和配置数据存储之间的一致性。