您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 医学现状与发展 > OpendaylightDOMDataStore研究
DOMDataStore修改记录版本号修改人修改日期新增/修改内容概要V0.1***2014-07-29DOMDataStore原理研究V0.2***2014-07-30事务链和DOMDataBroker及上版本内容的修改和扩充V0.3***2014-07-31事务的相关流程以及DataStoreTracerV0.4***2014-08-01Binding模型V0.5***2014-08-04BindingBroker以及相关connector总结新标准化树形数据模型对于数据的新标准化模型将代表后面的YANG规格的实际概念。这将不再是基于序列化格式(定义见YANG规格和使用的SAL-经纪参数impl1.0)。NormalizedNode代表在树结构中的一个节点的基本类型;所有其他节点类型是来自这个基本类型。它包含一个叶子识别符和一个值。DataContainerNode其中包含多个叶节点;它在YANG语法中没有直接表示。ContainerNode容器节点,它包含了多个子叶片和映射到YANG容器陈述。(Node,whichrepresentsaleafwhichcanoccuronlyonceperparentnode;itcontainsmultiplechildleavesandmapstothecontainerstatementinYANG.)MapEntryNode节点代表一个叶子,叶子是唯一识别的键的值。MapEntryNode中可以包含多个。(Nodewhichrepresentsaleaf,whichcanoccurmultipletimes;aleaveisuniquelyidentifiedbythevalueofitskey.AMapEntryNodemaycontainmultiple)ChoiceNode节点代表一个叶子,这大多发生一次,每个父节点,但可能的值可以有不同的类型。地图来选择语句。类型映射到该选择的case语句。AugmentationNodeNodewhichrepresentsaleaf,whichoccursmostlyonceperparentnode.LeafNode叶子节点,存放相关值(PS:官网解释是Containssimplevalue.)。LeafSetEntryNodeLeafSetNodeMapNodeDataStore接口publicinterfaceDataStorePextendsPathP,Dextends//DataReaderP,D,//DataModificationTransactionFactoryP,D{@OverridepublicDataModificationP,DbeginTransaction();//数据修改@OverridepublicDreadConfigurationData(Ppath);@OverridepublicDreadOperationalData(Ppath);}目前还没有发现DataStore和上面的联系,以及DataStore里面存储结构。估计和path有关。DOMDataBroker提供访问概念性数据树存储方法,并提供接口对存储树的某一分支下的数据更改。具体定义的类publicabstractclassDomDataBrokerextendsServiceType{publicstaticfinalQNameQNAME=org.opendaylight.yangtools.yang.common.QName.create(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom,2013-10-28,dom-data-broker);publicDomDataBroker(){}}执行过程当前的DOM数据代理(DOMDataBroker)并没有设计成一个智能化的内存缓存树形结构,这种内存缓存树形结构能够跟踪依赖关系,计算变更和维护提交处理程序,通知监听器和实现数据之间的关系假设。这可能会导致效率低下,执行两个阶段提交,其中在由数据代理本身所做的一切状态跟踪。如下所示:1.计算受影响的子树。2.过滤提交处理受影响的子树。3.过滤数据受影响子树的数据改变监听器。4.捕获初始状态数据的更改监听器。5.启动所有受影响的提交处理程序的提交申请。6.完成提交的所有受影响的提交处理程序。7.捕获最后的数据状态改变监听器。8.向受影响的数据更改监听器发布数据更改事件。DOMDataBroker和DataStoreDOMDataBroker获取事务链中的事务SAL层中DOMDataBroker是怎样调用DataStore的呢?DataBrokerImplprivateAtomicLongnextTransaction=newAtomicLong();privatefinalAtomicLongcreatedTransactionsCount=newAtomicLong();里面有一个AtomicLong(原子变量)类型nextTransaction的的变量,而nextTransaction就是指下一个事务。可以看出DOMDataBroker是读取事务链里面的事务来对DataStore操作。而nextTransaction更像是一个指针指向下次操作的事务。publicDataTransactionImplbeginTransaction(){StringtransactionId=DOM-+nextTransaction.getAndIncrement();createdTransactionsCount.getAndIncrement();returnnewDataTransactionImpl(transactionId,this);}其通过将nextTransaction传入到beginTransaction()函数里,返回一个DataTransactionImpl类型的对象。DataTransactionImpl是继承AbstractDataTransaction的。下面先看看AbstractDataTransaction。AbstractDataTransaction其构造函数:protectedAbstractDataTransaction(finalObjectidentifier,finalAbstractDataBrokerP,D,?extendsObjectdataBroker){super(dataBroker);this.identifier=Preconditions.checkNotNull(identifier);this.broker=Preconditions.checkNotNull(dataBroker);this.allocationTime=System.nanoTime();LOG.debug(Transaction{}Allocated.,identifier);}其中传入的参数:identifier是标示事务链中要操作的事务。而dataBroker则是要连接的数据代理。DataTransactionImpl例举了如下相关函数:@OverridepublicListenerRegistrationDataTransactionListenerregisterListener(DataTransactionListenerlistener){returnlisteners.register(listener);}registerListener()用于注册监听,说道这里引用下上次分析的读数据图:DOMDataBroker操作DataStore,是通过监听完成的,而这个监听函数注册就是DataTransactionImpl类里面的registerListener()。到这里我们只能认识到DOMDataBroker是怎么样读取事务链中的事务。DOMDataBroker是怎么联系上DOMstroe的呢?DOMDataBroker绑定DOMStorepublicvoidsetupStore(){略ImmutableMapLogicalDatastoreType,DOMStorestores=ImmutableMap.LogicalDatastoreType,DOMStorebuilder()//.put(CONFIGURATION,configStore)//.put(OPERATIONAL,operStore)//.build();ListeningExecutorServiceexecutor=MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());domBroker=newDOMDataBrokerImpl(stores,executor);}通过这个实例就可以看出DOMDataBroker是怎么绑定DOMStore的。DOMDataBroker操作DOMDataStorepublicvoidtestTransactionChainNoConflict()throwsInterruptedException,ExecutionException,TimeoutException{……DOMDataReadTransactionsecondReadTx=txChain.newReadOnlyTransaction();assertTestContainerExists(secondReadTx);DOMDataReadWriteTransactionthirdDeleteTx=allocateAndDelete(txChain);assertCommitSuccessful(firstWriteTxFuture);}通过上面的函数调用,可以看出DOMDataBroker要操作DOMDataStore里面的内容,是通过调用事务链中定义好的方法。DOMDataBroker和ConnectorBindingindependentConnector是怎么样连接DOMDataBroker和FWDataBroker的?BindingIndependentConnector里面内容较多,很多都和框架服务有关,暂时先不看。BindingDomConnectorDeployer因为其是一个具体的实现类,里面内容较多,目前有一个笼统的认识。先看看里面的函数:STEP1:publicstaticBindingIndependentConnectorcreateConnector(BindingIndependentMappingServicemappingService){BindingIndependentConnectorconnector=newBindingIndependentConnector();connector.setMappingService(mappingService);returnconnector;}通过mappingService创建一个connector,其中mappingService的作用有待研究。STEP2:publicstaticBindingIndependentConnectortryToDeployConnector(RootBindingAwareBrokerbaBroker,ProviderSessiondomSession){checkNotNull(baBroker);checkNotNull(domSession);BindingIndependentConnectorconnector=createConnector(mappingService);returnconnector;}其可以将BaData转化成DOMData,到这里就可
本文标题:OpendaylightDOMDataStore研究
链接地址:https://www.777doc.com/doc-2847531 .html