2017-11-23 12 views
0

OpenDaylight Carbon에 의해 제어되는 openvswitch (v2.5.2)가 설치된 미니 네트워크 (v2.2.2)가 있습니다. 내 응용 프로그램은 OpenDaylight karaf 기능입니다. 응용 프로그램은 그룹 테이블 (유형 = all)에 대한 플로우 (멀티 캐스트 용)를 작성하고 필요에 따라 버킷을 추가/제거합니다. 기존 그룹 테이블이있는 경우 버킷을 제거, 내가 먼저 확인/추가하려면 :OpenDaylight에서 OpenFlow 그룹 테이블 버킷 목록 업데이트

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<?>>을 기다리지 만 데이터 모델의 상태가 장치와 동일하지 않을 수도 있습니다.

그럼 데이터 모델에서 그룹 테이블과 버킷 목록을 읽고 어떻게 실제로 장치의 현재 상태와 동일한 상태를 읽었는지 확인하십시오.

나는 알고

  • 추가/UpdateGroupInputBuilder는 setTransactionUri이있다()
  • DataBroker 읽기/

체인 트랜잭션을 사용해야 쓰기 트랜잭션을 제공하지만 방법을 알아낼 수 없습니다 이것들을 결합하는 것.

EDIT : 또는 RPC 호출 대신 쓰기 트랜잭션을 사용해야합니까?

답변

0

흐름을 작성하기 위해 RPC 호출을 사용하여 삭제하고 구성 데이터 저장소에 대한 쓰기를 사용하여 전환했습니다. 변경 사항이 실제 장치 및 작동 데이터 저장소에 표시되는 데는 다소 시간이 걸리지 만 읽기 및 쓰기 모두에 대해 구성 데이터 저장소를 사용하는 한 변경 사항은 정상입니다.

그러나 config 데이터 저장소를 변경하면 항상 실제 장치로 변경된다는 보장이 없다는 것을 명심해야합니다. 내 흐름은 갈등이 일어나기 쉽지 않다는 점에서 복잡하지 않습니다. 그래도 운영 데이터 저장소와 구성 데이터 저장소 간의 일관성을 확인하는 것이 좋습니다.