ONOS分布式数据结构弱一致性代码追踪

来源:互联网 发布:贵阳大数据 编辑:程序博客网 时间:2024/06/07 02:59

ONOS提供了一些分布式数据结构(distributed primitive)来实现数据的强一致性和最终一致性存储。下面来讨论一下ONOS的弱一致性。

EventuallyConsistentMapONOS提供的用来实现弱一致性的分布式原语,它的实现类中提供了一系列参数来设置它的属性,其中就有一个是设置该Map的值是否存储在硬盘上,

下面就流程做一个简单的说明。以下例子是以网络拓扑为例。

DistributedTopologyStoreactivate()方法中,我们在创建存储网络拓扑EventuallyConsistentMap的地方打上断点。

上图第一个红框是DistributedTopologyStoreEventuallyConsistentMap的声明,第二个红框是它的创建初始化。



初始化时,他会调用StorageService去创建,上图红框是要传递的参数persistentService,弱一致性的数据想要存储在硬盘上面,必须通过该服务来创建相应的persistentMap或者persistentSet,该项服务会把数据存储在由PersistenceManager提供的localDB





以上是PersistentManager的成员变量和activate()方法的截图。


接下来继续EventuallyConsistentMap的创建过程


上图是创建EventuallyConsistentMap的过程,这个过程通过EventuallyConsistentMapbuilderImpl来控制,上面两个红框是我们今天重点关注的两个属性,一个就是我们的persistentService,还有一个就是设置是否将弱一致性数据保存在硬盘上面。EventuallyConsistentMapbuilderImpl提供了一些方法来设置属性。


上图红框是设置保存在硬盘的方法(系统默认是不保存在硬盘上面哦)。


属性等设置完毕后,要调用build()方法来创建EventuallyConsistentMap


上图就是build()方法的截图。


接下来会去EventuallyConsistentMapImpl去创建EventuallyConsistentMap


上图就是创建过程,可以看到它会根据persistentboolean)的值来决定是否调用persistentService这个服务。




原创粉丝点击