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.Mutator;
import org.opendaylight.ovsdb.lib.notation.UUID;
-import org.opendaylight.ovsdb.lib.operations.Mutate;
import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
-import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils;
-import org.opendaylight.ovsdb.schema.openvswitch.Qos;
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.QosEntries;
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;
-import com.google.common.collect.ImmutableMap;
-
-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) {
if (queueEntry.getDscp() != null) {
try {
Set<Long> dscpSet = new HashSet<>();
- if (dscpSet.add(new Long(queueEntry.getDscp().toString()))) {
+ if (dscpSet.add(new Long(queueEntry.getDscp().toString()))) {
queue.setDscp(dscpSet);
}
} catch (NumberFormatException e) {
}
}
- Uuid queueUuid = getQueueEntryUuid(operQueues, queueEntry.getQueueId());
- UUID uuid = null;
- if (queueUuid != null) {
- uuid = new UUID(queueUuid.getValue());
- }
-
- List<QueuesExternalIds> externalIds = queueEntry.getQueuesExternalIds();
Map<String, String> externalIdsMap = new HashMap<>();
- if (externalIds != null) {
- for (QueuesExternalIds externalId : externalIds) {
- externalIdsMap.put(externalId.getQueuesExternalIdKey(), externalId.getQueuesExternalIdValue());
- }
- }
- externalIdsMap.put(SouthboundConstants.QUEUE_ID_EXTERNAL_ID_KEY, queueEntry.getQueueId().getValue());
try {
- queue.setExternalIds(ImmutableMap.copyOf(externalIdsMap));
+ YangUtils.copyYangKeyValueListToMap(externalIdsMap, queueEntry.getQueuesExternalIds(),
+ QueuesExternalIds::getQueuesExternalIdKey, QueuesExternalIds::getQueuesExternalIdValue);
} catch (NullPointerException e) {
LOG.warn("Incomplete Queue external IDs", e);
}
+ 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);
- List<QueuesOtherConfig> otherConfigs = queueEntry.getQueuesOtherConfig();
- if (otherConfigs != null) {
- Map<String, String> otherConfigsMap = new HashMap<>();
- for (QueuesOtherConfig otherConfig : otherConfigs) {
- otherConfigsMap.put(otherConfig.getQueueOtherConfigKey(), otherConfig.getQueueOtherConfigValue());
- }
- try {
- queue.setOtherConfig(ImmutableMap.copyOf(otherConfigsMap));
- } catch (NullPointerException e) {
- LOG.warn("Incomplete Queue other_config", e);
- }
+ try {
+ queue.setOtherConfig(YangUtils.convertYangKeyValueListToMap(queueEntry.getQueuesOtherConfig(),
+ QueuesOtherConfig::getQueueOtherConfigKey, QueuesOtherConfig::getQueueOtherConfigValue));
+ } 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);