Squashed commit of the following:
commit
11abd792240e8df1a51a012ba1b92dd7c920c38b
Author: Anil Vishnoi <vishnoianil@gmail.com>
Date: Fri Jan 8 16:11:50 2016 -0800
Revert to old openflowplugin
Change-Id: Icaa1fa04fcc319b128e6f1ee0d58b940385812f3
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
commit
83e3dab5337d20168280ba6018ed0b811c713314
Merge:
6801901 9484b0d
Author: Anil Vishnoi <vishnoianil@gmail.com>
Date: Mon Jan 4 17:14:55 2016 -0800
Merge branch 'master' into topic/master/net-virt-clustering
Change-Id: I4aa7a2d4d10df28f15edcedf5e7a74f16a439ab5
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
commit
68019016506b78adef37f7c7764c0622f5bfb61e
Merge:
23295db 9b3005b
Author: Anil Vishnoi <vishnoianil@gmail.com>
Date: Sat Jan 2 13:19:59 2016 -0800
Merge branch 'master' into topic/master/net-virt-clustering
Change-Id: I29e864f4c09862dc8e41110a77479e6ee6d0632a
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
commit
23295dbb6f26fc0b24521949a14743ddad6d45fb
Merge:
a1c8e2b eced0bd
Author: Anil Vishnoi <vishnoianil@gmail.com>
Date: Tue Dec 29 15:52:23 2015 -0800
Merge branch 'master' into topic/master/net-virt-clustering
Change-Id: Ib465c8f20f200d407caaa9440bbf635d72776fe1
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
commit
a1c8e2b2a9738ae946731fb4d111f152057d3b71
Author: Flavio Fernandes <ffernand@redhat.com>
Date: Tue Dec 22 15:39:00 2015 -0500
Remove extra return statement.
When Flow id caches that were no longer needed
were removed from code, a lonely return statement
in the router interface remove code path was
left behind.
Gerrit: https://git.opendaylight.org/gerrit/#/c/29204/
Change-Id: Ic978953ab65da91baf543e21ea86333b4a9ee5ca
Reference: Ic2acced7a9a006e6e04afba6fea22aaf0620f134
Signed-off-by: Flavio Fernandes <ffernand@redhat.com>
commit
00de61c7b19937c5b48c1af4d50ae73cdb92b809
Author: Isaku Yamahata <isaku.yamahata@intel.com>
Date: Tue Dec 15 21:23:49 2015 -0800
Bug 4789 - allowed address pair doesn't have port id
So getPortId, setPortId methods aren't defined.
This is the ovsdb part of Bug 4789.
Change-Id: Id9ad4762b5ed92c5b84e6fab1d7c5135782ca528
Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com>
(cherry picked from commit
2065f152079fb96f494518efc2b46f4c77db181d)
commit
08ba6afc0ae524716656e5e926bf34675a2e0960
Merge:
4b909d1 9bbb7db
Author: Anil Vishnoi <vishnoianil@gmail.com>
Date: Mon Dec 14 13:53:12 2015 -0800
Merge branch 'master' into topic/master/net-virt-clustering
Conflicts:
features/ovsdb/pom.xml
features/src/main/features/features.xml
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/AbstractServiceInstance.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/MdsalUtils.java
openstack/net-virt/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/impl/MdsalUtilsTest.java
Change-Id: I68702767c0fcae8cb9721805e524d3ecb7889ed4
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
commit
4b909d144f06d4924792c42f918e1f0ce1a86137
Merge:
ddbb2eb 5483b28
Author: Anil Vishnoi <vishnoianil@gmail.com>
Date: Fri Nov 20 00:34:30 2015 +0530
Merge branch 'master' into topic/master/net-virt-clustering
Conflicts:
features/ovsdb/src/main/features/features.xml
Change-Id: Ib614363bab8752913d430a86b420ab104010243c
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
commit
ddbb2eb2a22f271bf57e7470ef1420bd2301193d
Author: Anil Vishnoi <vishnoianil@gmail.com>
Date: Thu Nov 19 04:50:03 2015 +0530
Switch to Alternate design of openflowplugin,
because alternate design supports clustering
Change-Id: Ia4e14bef316b2576298f013032232dc1e5d64984
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
commit
13264eda1627d01fc6090008e326bcb91bb5e8a8
Merge:
99b5553 c66b0ff
Author: Anil Vishnoi <vishnoianil@gmail.com>
Date: Tue Nov 17 01:05:38 2015 +0530
Merge branch 'master' into topic/master/net-virt-clustering
Conflicts:
openstack/net-virt-providers/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/EgressAclServiceTest.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/MdsalUtils.java
openstack/net-virt/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/impl/MdsalUtilsTest.java
Change-Id: I587fc39e1af228c8cff968ab2e5004285ae5bae2
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
commit
99b5553d84f642d80890546643543a65a262645a
Author: Anil Vishnoi <vishnoianil@gmail.com>
Date: Wed Oct 28 01:52:33 2015 +0530
Net-Virt Clustering : Enabled remote notifications
and modify the data store write methods to write only if
the instance is master instance
Change-Id: Icee31e0ea829f40bd64a072d840d03f8749c803f
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
commit
1e4144b81f47fad768141e7504ce7c2fb1e5f13f
Merge:
218e79b dc9f403
Author: Anil Vishnoi <vishnoianil@gmail.com>
Date: Tue Oct 27 03:56:39 2015 +0530
Merge branch 'master' into topic/master/net-virt-clustering
Change-Id: I1cb9813a044d16dcfa152f6322271bcafe6bfd5c
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
commit
218e79b7bcf213ce64d2b55ff19e208015798aaf
Merge:
f91f1a3 6577da8
Author: Anil Vishnoi <vishnoianil@gmail.com>
Date: Mon Oct 26 22:02:45 2015 +0530
Merge branch 'master' into topic/master/net-virt-clustering
Conflicts:
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/NetvirtProvidersProvider.java
Change-Id: Ibc577f41a59c24ddc2b4cdb94b4a393f961e0950
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
commit
f91f1a3883bf5a0d8a004e8d5141d2bdffd4aaa3
Merge:
fa8fe2a 342c8be
Author: Anil Vishnoi <vishnoianil@gmail.com>
Date: Sat Oct 17 02:18:56 2015 +0530
Merge branch 'master' into topic/master/net-virt-clustering
Conflicts:
openstack/net-virt-providers/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/EgressAclServiceTest.java
openstack/net-virt-providers/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/IngressAclServiceTest.java
openstack/net-virt-sfc/features/pom.xml
openstack/net-virt-sfc/features/production/src/main/features/features.xml
openstack/net-virt-sfc/impl/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/NetvirtSfcProvider.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/AbstractTransactionCommandTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OpenVSwitchUpdateCommandTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeRemovedCommandTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommandTest.java
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbControllerRemovedCommandTest.java
Change-Id: I3cbe7ef4b0064bf07a489f2561630c4f669695fe
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
commit
fa8fe2a789c741b2026e2946f08bf1e489db4794
Author: Flavio Fernandes <ffernand@redhat.com>
Date: Thu Oct 8 16:17:01 2015 -0400
Wire EntityOwnership service into OVSDB NetVirt (part 2)
Change-Id: I222177c38ab8efeccd63924842d166633e88f606
Signed-off-by: Flavio Fernandes <ffernand@redhat.com>
(cherry picked from commit
5239ecfcf1279e72d6d2446d4c88522461b28b1a)
commit
a93e284c51d476a1b3b8d4dd9ec532e0caa1c36f
Author: Flavio Fernandes <ffernand@redhat.com>
Date: Thu Oct 8 13:35:40 2015 -0400
Wire EntityOwnership service into OVSDB NetVirt
Implemented logic for netvirt provider to participate in entityOwnership
service.
Change-Id: I8f014591099a952d49584eede07624f37492c27d
Signed-off-by: Flavio Fernandes <ffernand@redhat.com>
(cherry picked from commit
e43de9f997323cfe804857a0f68a01d95641fbc5)
commit
e74ec764cc75b295dc3e5babd36f44bb5d930b04
Author: Anil Vishnoi <vishnoianil@gmail.com>
Date: Thu Oct 8 20:03:36 2015 +0530
Merge 'master' branch to 'topic/master/net-virt-clustering'
Squashed commit of the following:
commit
0cbdadc0af848566e34e66ae7a7ac952fd935561
Merge:
b02c878 cfcc6d4
Author: Sam Hague <shague@redhat.com>
Date: Wed Oct 7 22:42:02 2015 +0000
Merge "UT for southbound/transactions/md - set 2"
commit
b02c8783853d9308eb704ed7b2ca26d4d6d96933
Merge:
b063584 bf288f9
Author: Flavio Fernandes <ffernand@redhat.com>
Date: Wed Oct 7 21:23:35 2015 +0000
Merge "If controller joins the cluster late, and the owner of the device is already decided, EntityOwnershipService won't notify new candidate that register for ownership. Adding a proactive check on the ownership state of the device, so if it's already owned, adding the connection instances in the connection cache."
commit
cfcc6d4b4288e44bdbcb9de4cf5ac0de97f741f6
Author: rpujar <rpujar@inocybe.com>
Date: Wed Oct 7 16:29:28 2015 -0400
UT for southbound/transactions/md - set 2
4. OvsdbBridgeUpdateCommand.java
5. OvsdbControllerRemovedCommand.java
Change-Id: Idc469c08351b1e98129dd9e798c07a660d782709
Signed-off-by: rpujar <rpujar@inocybe.com>
commit
b063584cc53ebf9c072bcb3171ef6d68bb727a8e
Author: Sam Hague <shague@redhat.com>
Date: Wed Oct 7 13:22:54 2015 -0400
Cleanup netvirtsfc poms
Change-Id: I6c1a3aa44c75f98d226dcf23dd514a31f5df5d2a
Signed-off-by: Sam Hague <shague@redhat.com>
commit
f5382918beb8096bfb68acf73084a3083c2e51d7
Author: Sam Hague <shague@redhat.com>
Date: Wed Oct 7 13:22:13 2015 -0400
Bump mdsal-utils version to match other bundles
Change-Id: I6c5166ae27fd2f055217be95630cbc482261bb61
Signed-off-by: Sam Hague <shague@redhat.com>
commit
7db67352c22b8275e81c0e919aa661eaa0caa1a3
Merge:
f183e98 ba1ac04
Author: Sam Hague <shague@redhat.com>
Date: Wed Oct 7 13:38:27 2015 +0000
Merge "UT for southbound/transactions/md"
commit
f183e9857b3a53645b2c463204a4f6945bb10cdb
Merge:
3a2524e fc26e9e
Author: Sam Hague <shague@redhat.com>
Date: Wed Oct 7 00:36:02 2015 +0000
Merge "Fix checkstyle issues in netvirtsfc"
commit
bf288f954947f35aca6425f7d180b4732dee6818
Author: Anil Vishnoi <vishnoianil@gmail.com>
Date: Wed Oct 7 02:11:25 2015 +0530
If controller joins the cluster late, and the owner of the device
is already decided, EntityOwnershipService won't notify new candidate that register
for ownership. Adding a proactive check on the ownership state of the device,
so if it's already owned, adding the connection instances in the connection cache.
Change-Id: I7e87b55599f0ebd408814d72789c86f231b7907c
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
commit
ba1ac0433a93468260f0e00e693ba1a928c14e14
Author: rpujar <rpujar@inocybe.com>
Date: Tue Oct 6 15:56:23 2015 -0400
UT for southbound/transactions/md
1. AbstractTransactionCommand.java
2. OpenVSwitchUpdateCommand.java
3. OvsdbBridgeRemovedCommand.java
Change-Id: I7655dec526bc06b770c533dd082eb403bc89a2c7
Signed-off-by: rpujar <rpujar@inocybe.com>
commit
3a2524e329b4955b96aa59eb8dbb8965d06f08a5
Merge:
99f9a37 e4783a5
Author: Sam Hague <shague@redhat.com>
Date: Tue Oct 6 19:48:18 2015 +0000
Merge "Send a canonical IPv4 prefix in table 60 routing rules"
commit
fc26e9e4667e470658ebcc9040f1274903075dcd
Author: Sam Hague <shague@redhat.com>
Date: Tue Oct 6 15:45:13 2015 -0400
Fix checkstyle issues in netvirtsfc
Change-Id: I7db518959449958849a74c49a83bde1135ee325f
Signed-off-by: Sam Hague <shague@redhat.com>
commit
e4783a5d2eca5670253b8251d62258edb01eb477
Author: Eric Multanen <eric.w.multanen@intel.com>
Date: Fri Oct 2 06:43:04 2015 -0700
Send a canonical IPv4 prefix in table 60 routing rules
Testing with userspace OVS with DPDK uncovered that the routing
rules that go into table 60 were getting rejected.
Messages from ovs-vswitchd.log:
... |nx_match|WARN|Rejecting NXM/OXM entry
0:32768:12:1:8 with 1-bits in value for bits wildcarded by the mask.
... |connmgr|INFO|br-int<->tcp:10.11.21.7:6653:
sending OFPBMC_BAD_WILDCARDS error reply to OFPT_FLOW_MOD message
Clearing the non-prefix bits resolved the problem and the flows were
successfully added.
v2 - split up long line into two more readable lines
Change-Id: I42a0c63e6e837197d29bb8333f12e822a5f15d91
Signed-off-by: Eric Multanen <eric.w.multanen@intel.com>
commit
99f9a373e9bc410933421692148b87f177ab4879
Author: sangeeta.maurya <sangeeta.maurya@hp.com>
Date: Tue Oct 6 22:56:55 2015 +0545
Custom ICMP SG Rule:
1)Modification in ICMP matcher
2)Unit Test Improvement (Check added to validate if some values are set
properly).
Change-Id: I31fad80f6dd278372abe2b1a6aac95935aef5f17
Signed-off-by: sangeeta.maurya <sangeeta.maurya@hp.com>
Change-Id: I1b720089469f928ead3a317172901c6ce09ce1ef
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
Change-Id: I2b79a3309cf29cf497edb3b8a4b5b5bcdaec9e18
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
<type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-broker-osgi-registry</type>
<name>binding-osgi-broker</name>
</broker>
+ <clustering-entity-ownership-service>
+ <type xmlns:ns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:entity-ownership-service">ns:entity-ownership-service</type>
+ <name>entity-ownership-service</name>
+ </clustering-entity-ownership-service>
</module>
</modules>
</data>
package org.opendaylight.ovsdb.openstack.netvirt.providers;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
+
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.common.api.clustering.Entity;
+import org.opendaylight.controller.md.sal.common.api.clustering.CandidateAlreadyRegisteredException;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipCandidateRegistration;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipChange;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipListener;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipListenerRegistration;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.concurrent.atomic.AtomicBoolean;
+
/**
* @author Sam Hague (shague@redhat.com)
*/
public class NetvirtProvidersProvider implements BindingAwareProvider, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(NetvirtProvidersProvider.class);
+
private BundleContext bundleContext = null;
private static DataBroker dataBroker = null;
private ConfigActivator activator;
private static ProviderContext providerContext = null;
+ private static EntityOwnershipService entityOwnershipService;
+ private ProviderEntityListener providerEntityListener = null;
+ private static AtomicBoolean hasProviderEntityOwnership = new AtomicBoolean(false);
- public NetvirtProvidersProvider(BundleContext bundleContext) {
+ public NetvirtProvidersProvider(BundleContext bundleContext, EntityOwnershipService eos) {
LOG.info("NetvirtProvidersProvider: bundleContext: {}", bundleContext);
this.bundleContext = bundleContext;
+ entityOwnershipService = eos;
}
public static DataBroker getDataBroker() {
return providerContext;
}
+ public static boolean isMasterProviderInstance() {
+ return hasProviderEntityOwnership.get();
+ }
+
@Override
public void close() throws Exception {
LOG.info("NetvirtProvidersProvider closed");
activator.stop(bundleContext);
+ providerEntityListener.close();
}
@Override
} catch (Exception e) {
LOG.warn("Failed to start Netvirt: ", e);
}
+ providerEntityListener = new ProviderEntityListener(this, entityOwnershipService);
+ }
+
+ private void handleOwnershipChange(EntityOwnershipChange ownershipChange) {
+ if (ownershipChange.isOwner()) {
+ LOG.info("*This* instance of OVSDB netvirt provider is a MASTER instance");
+ hasProviderEntityOwnership.set(true);
+ } else {
+ LOG.info("*This* instance of OVSDB netvirt provider is a SLAVE instance");
+ hasProviderEntityOwnership.set(false);
+ }
+ }
+
+ private class ProviderEntityListener implements EntityOwnershipListener {
+ private NetvirtProvidersProvider provider;
+ private EntityOwnershipListenerRegistration listenerRegistration;
+ private EntityOwnershipCandidateRegistration candidateRegistration;
+
+ ProviderEntityListener(NetvirtProvidersProvider provider,
+ EntityOwnershipService entityOwnershipService) {
+ this.provider = provider;
+ this.listenerRegistration =
+ entityOwnershipService.registerListener(Constants.NETVIRT_OWNER_ENTITY_TYPE, this);
+
+ //register instance entity to get the ownership of the netvirt provider
+ Entity instanceEntity = new Entity(
+ Constants.NETVIRT_OWNER_ENTITY_TYPE, Constants.NETVIRT_OWNER_ENTITY_TYPE);
+ try {
+ this.candidateRegistration = entityOwnershipService.registerCandidate(instanceEntity);
+ } catch (CandidateAlreadyRegisteredException e) {
+ LOG.warn("OVSDB Netvirt Provider instance entity {} was already "
+ + "registered for ownership", instanceEntity, e);
+ }
+ }
+
+ public void close() {
+ this.listenerRegistration.close();
+ this.candidateRegistration.close();
+ }
+
+ @Override
+ public void ownershipChanged(EntityOwnershipChange ownershipChange) {
+ provider.handleOwnershipChange(ownershipChange);
+ }
}
}
}
protected void writeFlow(FlowBuilder flowBuilder, NodeBuilder nodeBuilder) {
- LOG.debug("writeFlow 3: flowBuilder: {}, nodeBuilder: {}",
- flowBuilder.build(), nodeBuilder.build());
- WriteTransaction modification = dataBroker.newWriteOnlyTransaction();
- LOG.debug("writeFlow: about to put nodePath for Flow {}, nodePath: {}",
- flowBuilder.getFlowName(), createNodePath(nodeBuilder));
- modification.put(LogicalDatastoreType.CONFIGURATION, createNodePath(nodeBuilder),
- nodeBuilder.build(), true /*createMissingParents*/);
- LOG.debug("writeFlow: about to put Flow {}", flowBuilder.getFlowName());
- modification.put(LogicalDatastoreType.CONFIGURATION, createFlowPath(flowBuilder, nodeBuilder),
- flowBuilder.build(), true /*createMissingParents*/);
- LOG.debug("writeFlow: about to submit Flow {}", flowBuilder.getFlowName());
- CheckedFuture<Void, TransactionCommitFailedException> commitFuture = modification.submit();
- LOG.debug("writeFlow: checking status of Flow {}", flowBuilder.getFlowName());
- try {
- commitFuture.checkedGet(); // TODO: Make it async (See bug 1362)
- LOG.debug("Transaction success for write of Flow {}", flowBuilder.getFlowName());
- } catch (Exception e) {
- LOG.error(e.getMessage(), e);
- modification.cancel();
+ if (NetvirtProvidersProvider.isMasterProviderInstance()) {
+ LOG.debug("writeFlow 3: flowBuilder: {}, nodeBuilder: {}",
+ flowBuilder.build(), nodeBuilder.build());
+ WriteTransaction modification = dataBroker.newWriteOnlyTransaction();
+ LOG.debug("writeFlow: about to put nodePath for Flow {}, nodePath: {}",
+ flowBuilder.getFlowName(), createNodePath(nodeBuilder));
+ modification.put(LogicalDatastoreType.CONFIGURATION, createNodePath(nodeBuilder),
+ nodeBuilder.build(), true /*createMissingParents*/);
+ LOG.debug("writeFlow: about to put Flow {}", flowBuilder.getFlowName());
+ modification.put(LogicalDatastoreType.CONFIGURATION, createFlowPath(flowBuilder, nodeBuilder),
+ flowBuilder.build(), true /*createMissingParents*/);
+ LOG.debug("writeFlow: about to submit Flow {}", flowBuilder.getFlowName());
+ CheckedFuture<Void, TransactionCommitFailedException> commitFuture = modification.submit();
+ LOG.debug("writeFlow: checking status of Flow {}", flowBuilder.getFlowName());
+ try {
+ commitFuture.checkedGet(); // TODO: Make it async (See bug 1362)
+ LOG.debug("Transaction success for write of Flow {}", flowBuilder.getFlowName());
+ } catch (Exception e) {
+ LOG.error(e.getMessage(), e);
+ modification.cancel();
+ }
}
}
protected void removeFlow(FlowBuilder flowBuilder, NodeBuilder nodeBuilder) {
- WriteTransaction modification = dataBroker.newWriteOnlyTransaction();
- modification.delete(LogicalDatastoreType.CONFIGURATION, createFlowPath(flowBuilder, nodeBuilder));
-
- CheckedFuture<Void, TransactionCommitFailedException> commitFuture = modification.submit();
- try {
- commitFuture.get(); // TODO: Make it async (See bug 1362)
- LOG.debug("Transaction success for deletion of Flow {}", flowBuilder.getFlowName());
- } catch (Exception e) {
- LOG.error(e.getMessage(), e);
- modification.cancel();
+ if (NetvirtProvidersProvider.isMasterProviderInstance()) {
+ WriteTransaction modification = dataBroker.newWriteOnlyTransaction();
+ modification.delete(LogicalDatastoreType.CONFIGURATION, createFlowPath(flowBuilder, nodeBuilder));
+
+ CheckedFuture<Void, TransactionCommitFailedException> commitFuture = modification.submit();
+ try {
+ commitFuture.get(); // TODO: Make it async (See bug 1362)
+ LOG.debug("Transaction success for deletion of Flow {}", flowBuilder.getFlowName());
+ } catch (Exception e) {
+ LOG.error(e.getMessage(), e);
+ modification.cancel();
+ }
}
}
}
private void writeGroup(GroupBuilder groupBuilder, NodeBuilder nodeBuilder) {
- ReadWriteTransaction modification = dataBroker.newReadWriteTransaction();
- InstanceIdentifier<Group> path1 = InstanceIdentifier.builder(Nodes.class).child(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory
- .rev130819.nodes.Node.class, nodeBuilder.getKey()).augmentation(FlowCapableNode.class).child(Group.class,
- new GroupKey(groupBuilder.getGroupId())).build();
- modification.put(LogicalDatastoreType.CONFIGURATION, path1, groupBuilder.build(), true /*createMissingParents*/);
-
- CheckedFuture<Void, TransactionCommitFailedException> commitFuture = modification.submit();
- try {
- commitFuture.get(); // TODO: Make it async (See bug 1362)
- LOG.debug("Transaction success for write of Group " + groupBuilder.getGroupName());
- } catch (InterruptedException|ExecutionException e) {
- LOG.error(e.getMessage(), e);
+ if (NetvirtProvidersProvider.isMasterProviderInstance()) {
+ ReadWriteTransaction modification = dataBroker.newReadWriteTransaction();
+ InstanceIdentifier<Group> path1 = InstanceIdentifier.builder(Nodes.class).child(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory
+ .rev130819.nodes.Node.class, nodeBuilder.getKey()).augmentation(FlowCapableNode.class).child(Group.class,
+ new GroupKey(groupBuilder.getGroupId())).build();
+ modification.put(LogicalDatastoreType.CONFIGURATION, path1, groupBuilder.build(), true /*createMissingParents*/);
+
+ CheckedFuture<Void, TransactionCommitFailedException> commitFuture = modification.submit();
+ try {
+ commitFuture.get(); // TODO: Make it async (See bug 1362)
+ LOG.debug("Transaction success for write of Group " + groupBuilder.getGroupName());
+ } catch (InterruptedException|ExecutionException e) {
+ LOG.error(e.getMessage(), e);
+ }
}
}
private void removeGroup(GroupBuilder groupBuilder, NodeBuilder nodeBuilder) {
- WriteTransaction modification = dataBroker.newWriteOnlyTransaction();
- InstanceIdentifier<Group> path1 = InstanceIdentifier.builder(Nodes.class).child(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory
- .rev130819.nodes.Node.class, nodeBuilder.getKey()).augmentation(FlowCapableNode.class).child(Group.class,
- new GroupKey(groupBuilder.getGroupId())).build();
- modification.delete(LogicalDatastoreType.CONFIGURATION, path1);
- CheckedFuture<Void, TransactionCommitFailedException> commitFuture = modification.submit();
+ if (NetvirtProvidersProvider.isMasterProviderInstance()) {
+ WriteTransaction modification = dataBroker.newWriteOnlyTransaction();
+ InstanceIdentifier<Group> path1 = InstanceIdentifier.builder(Nodes.class).child(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory
+ .rev130819.nodes.Node.class, nodeBuilder.getKey()).augmentation(FlowCapableNode.class).child(Group.class,
+ new GroupKey(groupBuilder.getGroupId())).build();
+ modification.delete(LogicalDatastoreType.CONFIGURATION, path1);
+ CheckedFuture<Void, TransactionCommitFailedException> commitFuture = modification.submit();
- try {
- commitFuture.get(); // TODO: Make it async (See bug 1362)
- LOG.debug("Transaction success for deletion of Group " + groupBuilder.getGroupName());
- } catch (InterruptedException|ExecutionException e) {
- LOG.error(e.getMessage(), e);
+ try {
+ commitFuture.get(); // TODO: Make it async (See bug 1362)
+ LOG.debug("Transaction success for deletion of Group " + groupBuilder.getGroupName());
+ } catch (InterruptedException|ExecutionException e) {
+ LOG.error(e.getMessage(), e);
+ }
}
}
private void writeFlow(FlowBuilder flowBuilder, NodeBuilder nodeBuilder) {
- ReadWriteTransaction modification = dataBroker.newReadWriteTransaction();
- InstanceIdentifier<Flow> path1 =
- InstanceIdentifier.builder(Nodes.class).child(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory
- .rev130819.nodes.Node.class,
- nodeBuilder.getKey()).augmentation(FlowCapableNode.class).child(Table.class,
- new TableKey(flowBuilder.getTableId())).child(Flow.class, flowBuilder.getKey()).build();
+ if (NetvirtProvidersProvider.isMasterProviderInstance()){
+ ReadWriteTransaction modification = dataBroker.newReadWriteTransaction();
+ InstanceIdentifier<Flow> path1 =
+ InstanceIdentifier.builder(Nodes.class).child(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory
+ .rev130819.nodes.Node.class,
+ nodeBuilder.getKey()).augmentation(FlowCapableNode.class).child(Table.class,
+ new TableKey(flowBuilder.getTableId())).child(Flow.class, flowBuilder.getKey()).build();
- //modification.put(LogicalDatastoreType.OPERATIONAL, path1, flowBuilder.build());
- modification.put(LogicalDatastoreType.CONFIGURATION, path1, flowBuilder.build(),
- true);//createMissingParents
+ //modification.put(LogicalDatastoreType.OPERATIONAL, path1, flowBuilder.build());
+ modification.put(LogicalDatastoreType.CONFIGURATION, path1, flowBuilder.build(),
+ true);//createMissingParents
- CheckedFuture<Void, TransactionCommitFailedException> commitFuture = modification.submit();
- try {
- commitFuture.get(); // TODO: Make it async (See bug 1362)
- LOG.debug("Transaction success for write of Flow " + flowBuilder.getFlowName());
- } catch (InterruptedException|ExecutionException e) {
- LOG.error(e.getMessage(), e);
+ CheckedFuture<Void, TransactionCommitFailedException> commitFuture = modification.submit();
+ try {
+ commitFuture.get(); // TODO: Make it async (See bug 1362)
+ LOG.debug("Transaction success for write of Flow " + flowBuilder.getFlowName());
+ } catch (InterruptedException|ExecutionException e) {
+ LOG.error(e.getMessage(), e);
+ }
}
}
@Override
public java.lang.AutoCloseable createInstance() {
- NetvirtProvidersProvider provider = new NetvirtProvidersProvider(bundleContext);
+ NetvirtProvidersProvider provider = new NetvirtProvidersProvider(bundleContext, getClusteringEntityOwnershipServiceDependency());
BindingAwareBroker localBroker = getBrokerDependency();
localBroker.registerProvider(provider);
return provider;
import config { prefix config; revision-date 2013-04-05; }
import opendaylight-md-sal-binding { prefix md-sal-binding; revision-date 2013-10-28;}
+ import opendaylight-entity-ownership-service {prefix eos; revision-date 2015-08-10;}
description
"Service definition for netvirt providers project";
}
}
}
+ container clustering-entity-ownership-service {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity eos:entity-ownership-service;
+ }
+ }
+ }
}
}
}
import static org.mockito.Mockito.when;
import java.lang.reflect.Field;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.ovsdb.openstack.netvirt.NetvirtProvider;
import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
+import org.opendaylight.ovsdb.openstack.netvirt.providers.NetvirtProvidersProvider;
import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.osgi.framework.ServiceReference;
import org.powermock.api.mockito.PowerMockito;
+import org.powermock.api.support.membermodification.MemberModifier;
import org.powermock.modules.junit4.PowerMockRunner;
import com.google.common.base.Optional;
FlowBuilder flowBuilder = mock(FlowBuilder.class);
when(flowBuilder.getKey()).thenReturn(mock(FlowKey.class));
+ NetvirtProvidersProvider netvirtProvider = mock(NetvirtProvidersProvider.class);
+ MemberModifier.field(NetvirtProvidersProvider.class, "hasProviderEntityOwnership").set(netvirtProvider, new AtomicBoolean(true));
+
abstractServiceInstance.writeFlow(flowBuilder, nodeBuilder);
//verify(transaction, times(1)).put(eq(LogicalDatastoreType.CONFIGURATION), any(InstanceIdentifier.class), any(DataObject.class), eq(true));
FlowBuilder flowBuilder = mock(FlowBuilder.class);
when(flowBuilder.getKey()).thenReturn(mock(FlowKey.class));
+ NetvirtProvidersProvider netvirtProvider = mock(NetvirtProvidersProvider.class);
+ MemberModifier.field(NetvirtProvidersProvider.class, "hasProviderEntityOwnership").set(netvirtProvider, new AtomicBoolean(true));
+
abstractServiceInstance.removeFlow(flowBuilder, nodeBuilder);
verify(transaction, times(1)).delete(eq(LogicalDatastoreType.CONFIGURATION), any(InstanceIdentifier.class));
verify(commitFuture, times(1)).get();
import static org.mockito.Mockito.when;
import java.net.InetAddress;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
import org.opendaylight.ovsdb.openstack.netvirt.api.Status;
import org.opendaylight.ovsdb.openstack.netvirt.api.StatusCode;
+import org.opendaylight.ovsdb.openstack.netvirt.providers.NetvirtProvidersProvider;
import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.Service;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.powermock.api.support.membermodification.MemberModifier;
import com.google.common.util.concurrent.CheckedFuture;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.junit.Assert;
import org.junit.Before;
import org.opendaylight.ovsdb.openstack.netvirt.translator.Neutron_IPs;
import org.opendaylight.ovsdb.openstack.netvirt.api.SecurityGroupCacheManger;
import org.opendaylight.ovsdb.openstack.netvirt.api.SecurityServicesManager;
+import org.opendaylight.ovsdb.openstack.netvirt.providers.NetvirtProvidersProvider;
import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.PipelineOrchestrator;
import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.Service;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.powermock.api.mockito.PowerMockito;
+import org.powermock.api.support.membermodification.MemberModifier;
import org.powermock.modules.junit4.PowerMockRunner;
import com.google.common.util.concurrent.CheckedFuture;
}
@Before
- public void setUp() {
+ public void setUp() throws IllegalArgumentException, IllegalAccessException {
egressAclServiceSpy = PowerMockito.spy(egressAclService);
when(writeTransaction.submit()).thenReturn(commitFuture);
when(securityGroup.getSecurityRules()).thenReturn(portSecurityList);
when(securityServices.getVmListForSecurityGroup(PORT_UUID, SECURITY_GROUP_UUID)).thenReturn(neutronDestIpList);
+
+ NetvirtProvidersProvider netvirtProvider = mock(NetvirtProvidersProvider.class);
+ MemberModifier.field(NetvirtProvidersProvider.class, "hasProviderEntityOwnership").set(netvirtProvider, new AtomicBoolean(true));
+
}
/**
import static org.mockito.Mockito.when;
import java.net.InetAddress;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
import org.opendaylight.ovsdb.openstack.netvirt.api.Status;
import org.opendaylight.ovsdb.openstack.netvirt.api.StatusCode;
+import org.opendaylight.ovsdb.openstack.netvirt.providers.NetvirtProvidersProvider;
import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.PipelineOrchestrator;
import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.Service;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.powermock.api.support.membermodification.MemberModifier;
import com.google.common.util.concurrent.CheckedFuture;
private static final String HOST_ADDRESS_PREFIX = "127.0.0.1/32";
@Before
- public void setUp() {
+ public void setUp() throws IllegalArgumentException, IllegalAccessException {
when(writeTransaction.submit()).thenReturn(commitFuture);
when(dataBroker.newWriteOnlyTransaction()).thenReturn(writeTransaction);
when(orchestrator.getNextServiceInPipeline(any(Service.class))).thenReturn(Service.ARP_RESPONDER);
+
+ NetvirtProvidersProvider netvirtProvider = mock(NetvirtProvidersProvider.class);
+ MemberModifier.field(NetvirtProvidersProvider.class, "hasProviderEntityOwnership").set(netvirtProvider, new AtomicBoolean(true));
+
}
/**
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import java.util.concurrent.atomic.AtomicBoolean;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.ovsdb.openstack.netvirt.providers.NetvirtProvidersProvider;
import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.PipelineOrchestrator;
import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.Service;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.powermock.api.support.membermodification.MemberModifier;
import com.google.common.base.Optional;
import com.google.common.util.concurrent.CheckedFuture;
//when(mdsalConsumer.getDataBroker()).thenReturn(dataBroker);
when(orchestrator.getNextServiceInPipeline(any(Service.class))).thenReturn(Service.ARP_RESPONDER);
+
+ NetvirtProvidersProvider netvirtProvider = mock(NetvirtProvidersProvider.class);
+ MemberModifier.field(NetvirtProvidersProvider.class, "hasProviderEntityOwnership").set(netvirtProvider, new AtomicBoolean(true));
+
}
/**
import static org.mockito.Mockito.when;
import java.net.InetAddress;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
import org.opendaylight.ovsdb.openstack.netvirt.api.Status;
import org.opendaylight.ovsdb.openstack.netvirt.api.StatusCode;
+import org.opendaylight.ovsdb.openstack.netvirt.providers.NetvirtProvidersProvider;
import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.PipelineOrchestrator;
import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.Service;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.powermock.api.support.membermodification.MemberModifier;
import com.google.common.util.concurrent.CheckedFuture;
when(dataBroker.newWriteOnlyTransaction()).thenReturn(writeTransaction);
when(orchestrator.getNextServiceInPipeline(any(Service.class))).thenReturn(Service.ARP_RESPONDER);
+
+ NetvirtProvidersProvider netvirtProvider = mock(NetvirtProvidersProvider.class);
+ MemberModifier.field(NetvirtProvidersProvider.class, "hasProviderEntityOwnership").set(netvirtProvider, new AtomicBoolean(true));
+
}
/**
<type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-broker-osgi-registry</type>
<name>binding-osgi-broker</name>
</broker>
+ <clustering-entity-ownership-service>
+ <type xmlns:ns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:entity-ownership-service">ns:entity-ownership-service</type>
+ <name>entity-ownership-service</name>
+ </clustering-entity-ownership-service>
</module>
</modules>
</data>
package org.opendaylight.ovsdb.openstack.netvirt;
+import com.google.common.base.Optional;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipState;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.common.api.clustering.Entity;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
import org.osgi.framework.BundleContext;
private BundleContext bundleContext = null;
private static DataBroker dataBroker = null;
private ConfigActivator activator;
+ private static EntityOwnershipService entityOwnershipService;
+ private static final Entity ownerInstanceEntity = new Entity(
+ Constants.NETVIRT_OWNER_ENTITY_TYPE, Constants.NETVIRT_OWNER_ENTITY_TYPE);
- public NetvirtProvider(BundleContext bundleContext) {
+ public NetvirtProvider(BundleContext bundleContext, EntityOwnershipService eos) {
LOG.info("NetvirtProvider: bundleContext: {}", bundleContext);
this.bundleContext = bundleContext;
+ entityOwnershipService = eos;
+ }
+
+ public static boolean isMasterProviderInstance() {
+ if (entityOwnershipService != null) {
+ Optional<EntityOwnershipState> state = entityOwnershipService.getOwnershipState(ownerInstanceEntity);
+ return state.isPresent() && state.get().isOwner();
+ }
+ return false;
}
@Override
//6653 is official openflow port.
public static short OPENFLOW_PORT = 6653;
public static String OPENFLOW_CONNECTION_PROTOCOL = "tcp";
+
+ /*
+ * Clustering
+ */
+ public static final String NETVIRT_OWNER_ENTITY_TYPE = "ovsdb-netvirt-provider";
}
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
*
* @author Sam Hague (shague@redhat.com)
*/
-public class OvsdbDataChangeListener implements DataChangeListener, AutoCloseable {
+public class OvsdbDataChangeListener implements ClusteredDataChangeListener, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(OvsdbDataChangeListener.class);
private DataBroker dataBroker = null;
private ListenerRegistration<DataChangeListener> registration;
import java.util.Map.Entry;
+import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class NeutronFloatingIPChangeListener implements DataChangeListener, AutoCloseable{
+public class NeutronFloatingIPChangeListener implements ClusteredDataChangeListener, AutoCloseable{
private static final Logger LOG = LoggerFactory.getLogger(NeutronFloatingIPChangeListener.class);
private ListenerRegistration<DataChangeListener> registration;
import java.util.List;
import java.util.Map.Entry;
+import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
import com.google.common.collect.ImmutableBiMap;
-public class NeutronLoadBalancerPoolChangeListener implements DataChangeListener, AutoCloseable {
+public class NeutronLoadBalancerPoolChangeListener implements ClusteredDataChangeListener, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(NeutronLoadBalancerPoolChangeListener.class);
private static final ImmutableBiMap<Class<? extends ProtocolBase>,String> PROTOCOL_MAP
import java.util.Map.Entry;
+import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class NeutronLoadBalancerPoolMemberChangeListener implements DataChangeListener, AutoCloseable {
+public class NeutronLoadBalancerPoolMemberChangeListener implements ClusteredDataChangeListener, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(NeutronLoadBalancerPoolMemberChangeListener.class);
private ListenerRegistration<DataChangeListener> registration;
import java.util.List;
import java.util.Map.Entry;
+import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
import com.google.common.collect.ImmutableBiMap;
-public class NeutronNetworkChangeListener implements DataChangeListener, AutoCloseable {
+public class NeutronNetworkChangeListener implements ClusteredDataChangeListener, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(NeutronNetworkChangeListener.class);
private static final ImmutableBiMap<Class<? extends NetworkTypeBase>,String> NETWORK_MAP
import java.util.Map.Entry;
import java.util.Set;
+import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class NeutronPortChangeListener implements DataChangeListener, AutoCloseable{
+public class NeutronPortChangeListener implements ClusteredDataChangeListener, AutoCloseable{
private static final Logger LOG = LoggerFactory.getLogger(NeutronPortChangeListener.class);
private ListenerRegistration<DataChangeListener> registration;
import java.util.Map;
import java.util.Map.Entry;
+import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class NeutronRouterChangeListener implements DataChangeListener, AutoCloseable{
+public class NeutronRouterChangeListener implements ClusteredDataChangeListener, AutoCloseable{
private static final Logger LOG = LoggerFactory.getLogger(NeutronRouterChangeListener.class);
private ListenerRegistration<DataChangeListener> registration;
import java.util.List;
import java.util.Map.Entry;
+import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class NeutronSecurityGroupDataChangeListener implements
- DataChangeListener, AutoCloseable {
+public class NeutronSecurityGroupDataChangeListener implements ClusteredDataChangeListener, AutoCloseable {
private static final Logger LOG = LoggerFactory
.getLogger(NeutronSecurityGroupDataChangeListener.class);
import java.util.Map.Entry;
+import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
import com.google.common.collect.ImmutableBiMap;
-public class NeutronSecurityRuleDataChangeListener implements DataChangeListener, AutoCloseable {
+public class NeutronSecurityRuleDataChangeListener implements ClusteredDataChangeListener, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(NeutronSecurityRuleDataChangeListener.class);
import java.util.Map.Entry;
import java.util.Set;
+import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
import com.google.common.collect.ImmutableBiMap;
-public class NeutronSubnetChangeListener implements DataChangeListener, AutoCloseable{
+public class NeutronSubnetChangeListener implements ClusteredDataChangeListener, AutoCloseable{
private static final Logger LOG = LoggerFactory.getLogger(NeutronSubnetChangeListener.class);
private static final ImmutableBiMap<Class<? extends IpVersionBase>,Integer> IPV_MAP
@Override
public java.lang.AutoCloseable createInstance() {
- NetvirtProvider provider = new NetvirtProvider(bundleContext);
+ NetvirtProvider provider = new NetvirtProvider(bundleContext, getClusteringEntityOwnershipServiceDependency());
BindingAwareBroker localBroker = getBrokerDependency();
localBroker.registerProvider(provider);
return provider;
import config { prefix config; revision-date 2013-04-05; }
import opendaylight-md-sal-binding { prefix md-sal-binding; revision-date 2013-10-28;}
+ import opendaylight-entity-ownership-service {prefix eos; revision-date 2015-08-10;}
description
"Service definition for netvirt project";
}
}
}
+ container clustering-entity-ownership-service {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity eos:entity-ownership-service;
+ }
+ }
+ }
}
}
}