import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils;
import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
-import org.opendaylight.ovsdb.schema.openvswitch.Controller;
import org.opendaylight.ovsdb.schema.openvswitch.Interface;
import org.opendaylight.ovsdb.schema.openvswitch.Port;
import org.opendaylight.ovsdb.southbound.SouthboundConstants;
&& SouthboundMapper.createOvsdbBridgeProtocols(ovsdbManagedNode).size() > 0) {
bridge.setProtocols(SouthboundMapper.createOvsdbBridgeProtocols(ovsdbManagedNode));
}
- Map<UUID,Controller> controllerMap = SouthboundMapper.createOvsdbController(
- ovsdbManagedNode, transaction.getDatabaseSchema());
- for (Entry<UUID,Controller> entry: controllerMap.entrySet()) {
- transaction.add(op.insert(entry.getValue()).withId(entry.getKey().toString()));
- }
- if (!controllerMap.isEmpty()) {
- bridge.setController(controllerMap.keySet());
- }
bridge.setPorts(Sets.newHashSet(new UUID(portNamedUuid)));
// Set the iid external_id
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
import org.opendaylight.ovsdb.lib.notation.Mutator;
+import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
import org.opendaylight.ovsdb.lib.notation.UUID;
import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils;
--- /dev/null
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.ovsdb.southbound.ovsdb.transact;
+
+import static org.opendaylight.ovsdb.lib.operations.Operations.op;
+
+import java.util.Map;
+import java.util.Set;
+
+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.TransactionBuilder;
+import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils;
+import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
+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.ovsdb.bridge.attributes.ControllerEntry;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import com.google.common.base.Optional;
+import com.google.common.collect.Sets;
+
+public class ControllerRemovedCommand extends AbstractTransactCommand {
+
+ public ControllerRemovedCommand(BridgeOperationalState state,
+ AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
+ super(state, changes);
+ }
+
+ @Override
+ public void execute(TransactionBuilder transaction) {
+ Set<InstanceIdentifier<ControllerEntry>> removed =
+ TransactUtils.extractRemoved(getChanges(),ControllerEntry.class);
+ Map<InstanceIdentifier<ControllerEntry>, ControllerEntry> operationalControllerEntries
+ = TransactUtils.extractOriginal(getChanges(),ControllerEntry.class);
+ Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> updatedBridges
+ = TransactUtils.extractCreatedOrUpdatedOrRemoved(getChanges(),OvsdbBridgeAugmentation.class);
+ for (InstanceIdentifier<ControllerEntry> controllerIid : removed) {
+ InstanceIdentifier<OvsdbBridgeAugmentation> bridgeIid =
+ controllerIid.firstIdentifierOf(OvsdbBridgeAugmentation.class);
+ OvsdbBridgeAugmentation ovsdbBridge = updatedBridges.get(bridgeIid);
+ Optional<ControllerEntry> controllerEntryOptional = getOperationalState().getControllerEntry(controllerIid);
+ if (ovsdbBridge != null && controllerEntryOptional.isPresent()) {
+ ControllerEntry controllerEntry = controllerEntryOptional.get();
+ Bridge bridge = TyperUtils.getTypedRowWrapper(transaction.getDatabaseSchema(), Bridge.class);
+ bridge.setController(Sets.newHashSet(new UUID(controllerEntry.getControllerUuid().getValue())));
+ transaction.add(op.mutate(bridge).addMutation(bridge.getControllerColumn().getSchema(),
+ Mutator.DELETE, bridge.getControllerColumn().getData()));
+ }
+ }
+
+
+ }
+
+}
--- /dev/null
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.ovsdb.southbound.ovsdb.transact;
+
+import static org.opendaylight.ovsdb.lib.operations.Operations.op;
+
+import java.util.Map;
+import java.util.Map.Entry;
+
+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.TransactionBuilder;
+import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils;
+import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
+import org.opendaylight.ovsdb.schema.openvswitch.Controller;
+import org.opendaylight.ovsdb.southbound.SouthboundMapper;
+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.ovsdb.bridge.attributes.ControllerEntry;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import com.google.common.base.Optional;
+import com.google.common.collect.Sets;
+
+public class ControllerUpdateCommand extends AbstractTransactCommand {
+
+
+ public ControllerUpdateCommand(BridgeOperationalState state,
+ AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
+ super(state, changes);
+ }
+
+ @Override
+ public void execute(TransactionBuilder transaction) {
+ Map<InstanceIdentifier<ControllerEntry>, ControllerEntry> controllers =
+ TransactUtils.extractCreatedOrUpdated(getChanges(), ControllerEntry.class);
+ Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> bridges =
+ TransactUtils.extractCreatedOrUpdated(getChanges(), OvsdbBridgeAugmentation.class);
+ for (Entry<InstanceIdentifier<ControllerEntry>, ControllerEntry> entry: controllers.entrySet()) {
+ Optional<ControllerEntry> operationalControllerEntryOptional =
+ getOperationalState().getControllerEntry(entry.getKey());
+ if (!operationalControllerEntryOptional.isPresent()) {
+ InstanceIdentifier<OvsdbBridgeAugmentation> bridgeIid =
+ entry.getKey().firstIdentifierOf(OvsdbBridgeAugmentation.class);
+ Optional<OvsdbBridgeAugmentation> bridgeOptional =
+ getOperationalState().getOvsdbBridgeAugmentation(bridgeIid);
+ OvsdbBridgeAugmentation ovsdbBridge = null;
+ if (bridgeOptional.isPresent()) {
+ ovsdbBridge = bridgeOptional.get();
+ } else {
+ ovsdbBridge = bridges.get(bridgeIid);
+ }
+ if (ovsdbBridge != null
+ && ovsdbBridge.getBridgeName() != null
+ && entry.getValue() != null
+ && entry.getValue().getTarget() != null) {
+ Controller controller =
+ TyperUtils.getTypedRowWrapper(transaction.getDatabaseSchema(), Controller.class);
+ controller.setTarget(entry.getValue().getTarget().getValue());
+ String controllerNamedUuidString = SouthboundMapper.getRandomUUID();
+ UUID controllerNamedUuid = new UUID(controllerNamedUuidString);
+ transaction.add(op.insert(controller).withId(controllerNamedUuidString));
+
+ Bridge bridge = TyperUtils.getTypedRowWrapper(transaction.getDatabaseSchema(), Bridge.class);
+ bridge.setName(ovsdbBridge.getBridgeName().getValue());
+ bridge.setController(Sets.newHashSet(controllerNamedUuid));
+ transaction.add(op.mutate(bridge)
+ .addMutation(bridge.getControllerColumn().getSchema(), Mutator.INSERT,
+ bridge.getControllerColumn().getData())
+ .where(bridge.getNameColumn().getSchema().opEqual(bridge.getNameColumn().getData()))
+ .build());
+ }
+ }
+ }
+
+ }
+
+}
this.changes = changes;
commands.add(new BridgeCreateCommand(state,changes));
commands.add(new OpenVSwitchBridgeAddCommand());
+ commands.add(new ControllerUpdateCommand(state,changes));
+ commands.add(new ControllerRemovedCommand(state,changes));
commands.add(new BridgeRemovedCommand(state,changes));
commands.add(new TerminationPointCreateCommand(state,changes));
commands.add(new TerminationPointDeleteCommand(state, changes));