import static org.opendaylight.ovsdb.lib.operations.Operations.op;
+import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
import org.opendaylight.ovsdb.lib.notation.UUID;
import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils;
import org.opendaylight.ovsdb.schema.openvswitch.Queue;
import org.opendaylight.ovsdb.southbound.SouthboundConstants;
+import org.opendaylight.ovsdb.southbound.SouthboundMapper;
+import org.opendaylight.ovsdb.southbound.SouthboundUtil;
import org.opendaylight.ovsdb.utils.yang.YangUtils;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
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.ovsdb.node.attributes.Queues;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QueuesKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.queues.QueuesExternalIds;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.queues.QueuesOtherConfig;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class QueueUpdateCommand extends AbstractTransactCommand {
+public class QueueUpdateCommand implements TransactCommand {
private static final Logger LOG = LoggerFactory.getLogger(QueueUpdateCommand.class);
-
- public QueueUpdateCommand(BridgeOperationalState state, AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
- super(state, changes);
+ @Override
+ public void execute(TransactionBuilder transaction, BridgeOperationalState state,
+ AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> events) {
+ execute(transaction, state, TransactUtils.extractCreatedOrUpdated(events, OvsdbNodeAugmentation.class));
}
@Override
- public void execute(TransactionBuilder transaction) {
- Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> created =
- TransactUtils.extractCreated(getChanges(),OvsdbNodeAugmentation.class);
- for (Entry<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> ovsdbNodeEntry:
- created.entrySet()) {
- updateQueue(transaction, ovsdbNodeEntry.getKey(), ovsdbNodeEntry.getValue());
- }
- Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> updated =
- TransactUtils.extractUpdated(getChanges(),OvsdbNodeAugmentation.class);
+ public void execute(TransactionBuilder transaction, BridgeOperationalState state,
+ Collection<DataTreeModification<Node>> modifications) {
+ execute(transaction, state, TransactUtils.extractCreatedOrUpdated(modifications, OvsdbNodeAugmentation.class));
+ }
+
+ private void execute(TransactionBuilder transaction, BridgeOperationalState state,
+ Map<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> createdOrUpdated) {
for (Entry<InstanceIdentifier<OvsdbNodeAugmentation>, OvsdbNodeAugmentation> ovsdbNodeEntry:
- updated.entrySet()) {
- updateQueue(transaction, ovsdbNodeEntry.getKey(), ovsdbNodeEntry.getValue());
+ createdOrUpdated.entrySet()) {
+ updateQueue(transaction, state, ovsdbNodeEntry.getKey(), ovsdbNodeEntry.getValue());
}
}
private void updateQueue(
- TransactionBuilder transaction,
+ TransactionBuilder transaction, BridgeOperationalState state,
InstanceIdentifier<OvsdbNodeAugmentation> iid, OvsdbNodeAugmentation ovsdbNode) {
List<Queues> queueList = ovsdbNode.getQueues();
- if (!getOperationalState().getBridgeNode(iid).isPresent()) {
+ if (!state.getBridgeNode(iid).isPresent()) {
return;
}
- OvsdbNodeAugmentation operNode = getOperationalState().getBridgeNode(iid).get().getAugmentation(OvsdbNodeAugmentation.class);
+ OvsdbNodeAugmentation operNode = state.getBridgeNode(iid).get().getAugmentation(OvsdbNodeAugmentation.class);
List<Queues> operQueues = operNode.getQueues();
if (queueList != null) {
}
}
- Uuid queueUuid = getQueueEntryUuid(operQueues, queueEntry.getQueueId());
- UUID uuid = null;
- if (queueUuid != null) {
- uuid = new UUID(queueUuid.getValue());
- }
-
Map<String, String> externalIdsMap = new HashMap<>();
try {
YangUtils.copyYangKeyValueListToMap(externalIdsMap, queueEntry.getQueuesExternalIds(),
} catch (NullPointerException e) {
LOG.warn("Incomplete Queue external IDs", e);
}
- externalIdsMap.put(SouthboundConstants.QUEUE_ID_EXTERNAL_ID_KEY, queueEntry.getQueueId().getValue());
+ externalIdsMap.put(SouthboundConstants.IID_EXTERNAL_ID_KEY,
+ SouthboundUtil.serializeInstanceIdentifier(
+ SouthboundMapper.createInstanceIdentifier(iid.firstKeyOf(Node.class, NodeKey.class).getNodeId())
+ .augmentation(OvsdbNodeAugmentation.class)
+ .child(Queues.class, new QueuesKey(queueEntry.getQueueId()))));
queue.setExternalIds(externalIdsMap);
try {
} catch (NullPointerException e) {
LOG.warn("Incomplete Queue other_config", e);
}
- if (uuid == null) {
- transaction.add(op.insert(queue)).build();
+
+ Uuid operQueueUuid = getQueueEntryUuid(operQueues, queueEntry.getQueueId());
+ if (operQueueUuid == null) {
+ UUID namedUuid = new UUID(SouthboundConstants.QUEUE_NAMED_UUID_PREFIX +
+ TransactUtils.bytesToHexString(queueEntry.getQueueId().getValue().getBytes()));
+ transaction.add(op.insert(queue).withId(namedUuid.toString())).build();
} else {
- transaction.add(op.update(queue)).build();
+ UUID uuid = new UUID(operQueueUuid.getValue());
+ //transaction.add(op.update(queue)).build();
Queue extraQueue = TyperUtils.getTypedRowWrapper(
transaction.getDatabaseSchema(), Queue.class, null);
extraQueue.getUuidColumn().setData(uuid);