- public void execute(TransactionBuilder transaction) {
- for (Entry<InstanceIdentifier<?>, DataObject> entry: getChanges().getCreatedData().entrySet()) {
- DataObject dataObject = entry.getValue();
- if (dataObject instanceof OvsdbTerminationPointAugmentation) {
- OvsdbTerminationPointAugmentation terminationPoint = (OvsdbTerminationPointAugmentation) dataObject;
- LOG.debug("Received request to create termination point {}",
- terminationPoint.getName());
- InstanceIdentifier terminationPointIid = entry.getKey();
- Optional<TerminationPoint> terminationPointOptional =
- getOperationalState().getBridgeTerminationPoint(terminationPointIid);
- if (!terminationPointOptional.isPresent()) {
- // Configure interface
- String interfaceUuid = "Interface_" + SouthboundMapper.getRandomUUID();
- Interface ovsInterface =
- TyperUtils.getTypedRowWrapper(transaction.getDatabaseSchema(), Interface.class);
- createInterface(terminationPoint, ovsInterface);
- transaction.add(op.insert(ovsInterface).withId(interfaceUuid));
-
- stampInstanceIdentifier(transaction, (InstanceIdentifier<TerminationPoint>) entry.getKey(),
- ovsInterface.getName());
-
- // Configure port with the above interface details
- String portUuid = "Port_" + SouthboundMapper.getRandomUUID();
- Port port = TyperUtils.getTypedRowWrapper(transaction.getDatabaseSchema(), Port.class);
- createPort(terminationPoint, port, interfaceUuid);
- transaction.add(op.insert(port).withId(portUuid));
-
- //Configure bridge with the above port details
- Bridge bridge = TyperUtils.getTypedRowWrapper(transaction.getDatabaseSchema(), Bridge.class);
- if (getBridge(entry.getKey()) != null) {
- bridge.setName(getBridge(entry.getKey()).getBridgeName().getValue());
- bridge.setPorts(Sets.newHashSet(new UUID(portUuid)));
-
- transaction.add(op.mutate(bridge)
- .addMutation(bridge.getPortsColumn().getSchema(),
- Mutator.INSERT,bridge.getPortsColumn().getData())
- .where(bridge.getNameColumn().getSchema()
- .opEqual(bridge.getNameColumn().getData())).build());
- }
+ public void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
+ final Collection<DataTreeModification<Node>> modifications,
+ final InstanceIdentifierCodec instanceIdentifierCodec) {
+ execute(transaction, state,
+ TransactUtils.extractCreated(modifications, OvsdbTerminationPointAugmentation.class),
+ TransactUtils.extractCreatedOrUpdated(modifications, Node.class), instanceIdentifierCodec);
+ }
+
+ private void execute(final TransactionBuilder transaction, final BridgeOperationalState state,
+ final Map<InstanceIdentifier<OvsdbTerminationPointAugmentation>, OvsdbTerminationPointAugmentation>
+ createdTerminationPoints,
+ final Map<InstanceIdentifier<Node>, Node> nodes, final InstanceIdentifierCodec instanceIdentifierCodec) {
+ for (Entry<InstanceIdentifier<OvsdbTerminationPointAugmentation>, OvsdbTerminationPointAugmentation> entry :
+ createdTerminationPoints.entrySet()) {
+ OvsdbTerminationPointAugmentation terminationPoint = entry.getValue();
+ LOG.debug("Received request to create termination point {}",
+ terminationPoint.getName());
+ InstanceIdentifier terminationPointIid = entry.getKey();
+ Optional<TerminationPoint> terminationPointOptional =
+ state.getBridgeTerminationPoint(terminationPointIid);
+ if (!terminationPointOptional.isPresent()) {
+ // Configure interface
+ String interfaceUuid = "Interface_" + SouthboundMapper.getRandomUuid();
+ Interface ovsInterface = transaction.getTypedRowWrapper(Interface.class);
+ createInterface(terminationPoint, ovsInterface);
+ transaction.add(op.insert(ovsInterface).withId(interfaceUuid));
+
+ stampInstanceIdentifier(transaction, entry.getKey(), ovsInterface.getName(), instanceIdentifierCodec);
+
+ // Configure port with the above interface details
+ String portUuid = "Port_" + SouthboundMapper.getRandomUuid();
+ Port port = transaction.getTypedRowWrapper(Port.class);
+ final String opendaylightIid = instanceIdentifierCodec.serialize(terminationPointIid);
+ createPort(terminationPoint, port, interfaceUuid, opendaylightIid);
+ transaction.add(op.insert(port).withId(portUuid));
+ LOG.info("Created Termination Point : {} with Uuid : {}",
+ terminationPoint.getName(),portUuid);
+ //Configure bridge with the above port details
+ Bridge bridge = transaction.getTypedRowWrapper(Bridge.class);
+ String bridgeName = SouthboundUtil
+ .getBridgeNameFromOvsdbNodeId(entry.getKey().firstIdentifierOf(Node.class));
+ if (bridgeName != null) {
+ LOG.trace("Updating bridge {} for newly added port {}", bridgeName, terminationPoint.getName());
+ bridge.setName(bridgeName);
+ bridge.setPorts(Collections.singleton(new UUID(portUuid)));
+
+ transaction.add(op.mutate(bridge)
+ .addMutation(bridge.getPortsColumn().getSchema(),
+ Mutator.INSERT, bridge.getPortsColumn().getData())
+ .where(bridge.getNameColumn().getSchema()
+ .opEqual(bridge.getNameColumn().getData())).build());
+ } else {
+ LOG.error("Missing BridgeName for Node {} during creation of port {}",
+ entry.getKey().firstIdentifierOf(Node.class), terminationPoint.getName());