繁体   English   中英

在OpenDaylight中更新OpenFlow组表存储桶列表

[英]Updating OpenFlow group table bucket list in OpenDaylight

我有一个由OpenDaylight Carbon控制的带有openvswitch(v2.5.2)的小型网络(v2.2.2)。 我的应用程序是OpenDaylight karaf功能。 该应用程序创建到组表(类型=全部)的流(用于多播),并根据需要添加/删除存储桶。 要添加/删除存储桶,我首先检查是否存在现有的组表:

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);

如果找不到组表,则会创建它(SalGroupService.addGroup())。 如果找到组表,则会对其进行更新(SalGroupService.updateGroup())。

问题在于,RPC调用add / updateGroup()之后要花费一些时间才能看到数据模型中的更改。 等待Future<RPCResult<?>>不能保证数据模型具有与设备相同的状态。

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

我知道

  • Add / UpdateGroupInputBuilder具有setTransactionUri()
  • DataBroker提供事务以读取/写入
  • 您应该使用交易链

但是我不知道如何将它们结合起来。 谢谢

编辑:还是我必须使用写事务来代替RPC调用?

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

但是,我必须牢记,不能保证对配置数据存储的更改将始终使之成为实际设备。 就冲突不太可能发生的意义而言,我的流程并不那么复杂。 不过,我可能会检查操作和配置数据存储之间的一致性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM