OvsdbConnectionInstance connectionInstance = connectionInstanceEntry.getValue();
connectionInstance.transact(new TransactCommandAggregator(),
new BridgeOperationalState(db, changes),
- new DataChangesManagedByOvsdbNodeEvent(
+ new DataChangesManagedByOvsdbNodeEvent(db,
connectionInstance.getInstanceIdentifier(),
changes));
}
if (ovsNode != null && ovsNode.getConnectionInfo() != null) {
client = cm.getConnectionInstance(ovsNode.getConnectionInfo());
} else {
- List<TerminationPoint> terminationPoint = ((Node)created.getValue()).getTerminationPoint();
- if (!terminationPoint.isEmpty()) {
- InstanceIdentifier<Node> nodeIid = SouthboundMapper.
- createInstanceIdentifier(((Node)created.getValue()).getNodeId());
- client = cm.getConnectionInstance(nodeIid);
- }
+ InstanceIdentifier<Node> nodeIid = SouthboundMapper.
+ createInstanceIdentifier(((Node)created.getValue()).getNodeId());
+ client = cm.getConnectionInstance(nodeIid);
}
}
if (client != null) {
import java.util.Map.Entry;
import java.util.Set;
+import com.google.common.base.Optional;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.ovsdb.southbound.SouthboundUtil;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> {
private InstanceIdentifier<?> iid;
+ private DataBroker db;
private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> event;
private Map<InstanceIdentifier<?>, DataObject> createdData = null;
private Map<InstanceIdentifier<?>, DataObject> updatedData = null;
private Map<InstanceIdentifier<?>, DataObject> originalData = null;
private Set<InstanceIdentifier<?>> removedPaths;
- public DataChangesManagedByOvsdbNodeEvent(InstanceIdentifier<?> iid,
- AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> event) {
+ public DataChangesManagedByOvsdbNodeEvent(DataBroker dataBroker, InstanceIdentifier<?> iid,
+ AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> event) {
+ this.db = dataBroker;
this.iid = iid;
this.event = event;
}
if (managedBy != null && managedBy.equals(iid)) {
return true;
}
+
+ managedBy = getManagedByIidFromOperDS(bridgeIid);
+ if (managedBy != null && managedBy.equals(iid)) {
+ return true;
+ }
return false;
}
+ private InstanceIdentifier<?> getManagedByIidFromOperDS(InstanceIdentifier<?> bridgeIid) {
+ // Get the InstanceIdentifier of the containing node
+ InstanceIdentifier<Node> nodeEntryIid = bridgeIid.firstIdentifierOf(Node.class);
+
+ Optional<?> bridgeNode = SouthboundUtil.readNode(db.newReadWriteTransaction(),nodeEntryIid);
+ if (bridgeNode.isPresent() && bridgeNode.get() instanceof Node) {
+ Node node = (Node)bridgeNode.get();
+ OvsdbBridgeAugmentation bridge = node.getAugmentation(OvsdbBridgeAugmentation.class);
+ if (bridge != null && bridge.getManagedBy() != null) {
+ return bridge.getManagedBy().getValue();
+ }
+ }
+ return null;
+ }
+
private InstanceIdentifier<?> getManagedByIid(Map<InstanceIdentifier<?>, DataObject> map,
InstanceIdentifier<?> iidToCheck) {
// Get the InstanceIdentifier of the containing node
Node originalNode = originalNodes.get(removedTpIid.firstIdentifierOf(Node.class));
OvsdbBridgeAugmentation originalOvsdbBridgeAugmentation =
originalNode.getAugmentation(OvsdbBridgeAugmentation.class);
- String bridgeName = originalOvsdbBridgeAugmentation != null
- ? originalOvsdbBridgeAugmentation.getBridgeName().getValue() : "Bridge name not found";
+ String bridgeName = null;
+ if(originalOvsdbBridgeAugmentation != null) {
+ bridgeName = originalOvsdbBridgeAugmentation.getBridgeName().getValue();
+ } else {
+ Optional<OvsdbBridgeAugmentation> bridgeAug = state.getOvsdbBridgeAugmentation(removedTpIid);
+ if(bridgeAug.isPresent()) {
+ bridgeName = bridgeAug.get().getBridgeName().getValue();
+ } else {
+ LOG.error("Bridge does not exist for termination point {}", removedTpIid);
+ }
+ }
+
Port port = TyperUtils.getTypedRowWrapper(transaction.getDatabaseSchema(), Port.class,null);
Optional<OvsdbTerminationPointAugmentation> tpAugmentation =
state.getOvsdbTerminationPointAugmentation(removedTpIid);
when(ovsdbDataChangeListener.connectionInstancesFromChanges(any(AsyncDataChangeEvent.class))).thenReturn(map);
BridgeOperationalState bridgeOperationalState = mock(BridgeOperationalState.class);
DataChangesManagedByOvsdbNodeEvent dataChangesManagedByOvsdbNodeEvent = mock(DataChangesManagedByOvsdbNodeEvent.class);
- PowerMockito.whenNew(DataChangesManagedByOvsdbNodeEvent.class).withArguments(any(InstanceIdentifier.class), any(AsyncDataChangeEvent.class)).thenReturn(dataChangesManagedByOvsdbNodeEvent);
+ PowerMockito.whenNew(DataChangesManagedByOvsdbNodeEvent.class).withArguments(
+ any(DataBroker.class),
+ any(InstanceIdentifier.class),
+ any(AsyncDataChangeEvent.class)).thenReturn(dataChangesManagedByOvsdbNodeEvent);
+
PowerMockito.whenNew(BridgeOperationalState.class).withArguments(any(DataBroker.class), any(AsyncDataChangeEvent.class)).thenReturn(bridgeOperationalState);
when(connectionInstance.getInstanceIdentifier()).thenReturn(iid);
when(SouthboundMapper.createInstanceIdentifier(any(NodeId.class))).thenReturn(nodeIid);
when(cm.getConnectionInstance(any(InstanceIdentifier.class))).thenReturn(client);
assertEquals("Error returning correct Map", testResultMap, ovsdbDataChangeListener.connectionInstancesFromMap(map));
- verify(node).getTerminationPoint();
verify(cm).getConnectionInstance(any(InstanceIdentifier.class));
}
}
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
public class DataChangesManagedByOvsdbNodeEventTest {
@Mock private InstanceIdentifier<?> iid;
+ @Mock private DataBroker db;
@Mock private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> event;
private Set<InstanceIdentifier<?>> removedPaths;
private DataChangesManagedByOvsdbNodeEvent dataChangesManagedByOvsdbNodeEvent;
@Test
public void testDataChangesManagedByOvsdbNodeEvent() {
- DataChangesManagedByOvsdbNodeEvent dataChangesManagedByOvsdbNodeEvent1 = new DataChangesManagedByOvsdbNodeEvent(iid, event);
+ DataChangesManagedByOvsdbNodeEvent dataChangesManagedByOvsdbNodeEvent1 = new
+ DataChangesManagedByOvsdbNodeEvent(db, iid, event);
assertEquals(iid, Whitebox.getInternalState(dataChangesManagedByOvsdbNodeEvent1, "iid"));
assertEquals(event, Whitebox.getInternalState(dataChangesManagedByOvsdbNodeEvent1, "event"));
}