Add NeutronLoadBalancerPoolMemberChangeListener 23/26423/3
authorFlavio Fernandes <ffernand@redhat.com>
Wed, 2 Sep 2015 22:11:28 +0000 (18:11 -0400)
committerFlavio Fernandes <ffernand@redhat.com>
Thu, 3 Sep 2015 20:09:36 +0000 (16:09 -0400)
Plus other minor fixes.

Patch set 2: resolve fixmes.

Change-Id: I75e6106f1cf5bb72370983bebe9568704dcef36a
Signed-off-by: Flavio Fernandes <ffernand@redhat.com>
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/OvsdbInventoryServiceImpl.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/translator/iaware/impl/NeutronLoadBalancerPoolChangeListener.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/translator/iaware/impl/NeutronLoadBalancerPoolMemberChangeListener.java [new file with mode: 0644]
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/translator/iaware/impl/NeutronSubnetChangeListener.java

index 6272a9101175425c39f72f19ace552bc3ee39794..cb4da7e57ad61023ad69c80c930aef5862a42f38 100644 (file)
@@ -24,6 +24,7 @@ import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronPo
 import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronRouterChangeListener;
 import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronSubnetChangeListener;
 import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronLoadBalancerPoolChangeListener;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronLoadBalancerPoolMemberChangeListener;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
@@ -103,6 +104,7 @@ public class OvsdbInventoryServiceImpl implements ConfigInterface, OvsdbInventor
         new NeutronRouterChangeListener(db);
         new NeutronFloatingIPChangeListener(db);
         new NeutronLoadBalancerPoolChangeListener(db);
+        new NeutronLoadBalancerPoolMemberChangeListener(db);
     }
 
 }
index b5ffe5c511e90123d5b74d9c5b9153766d4c9357..e8203f9250ac921edfad3a88f1d8225896fea760 100644 (file)
@@ -54,7 +54,6 @@ public class NeutronLoadBalancerPoolChangeListener implements DataChangeListener
         LOG.debug("Register listener for Neutron Load Balancer Pool model data changes");
         registration =
                 this.db.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, path, this, AsyncDataBroker.DataChangeScope.ONE);
-
     }
 
     @Override
@@ -64,9 +63,7 @@ public class NeutronLoadBalancerPoolChangeListener implements DataChangeListener
 
     @Override
     public void onDataChanged(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
-            LOG.trace("Data changes : {}",changes);
-
-        LOG.trace("Data changes : {}",changes);
+        LOG.trace("Data changes : {}", changes);
 
         Object[] subscribers = NeutronIAwareUtil.getInstances(INeutronLoadBalancerPoolAware.class, this);
         createPool(changes, subscribers);
@@ -91,11 +88,10 @@ public class NeutronLoadBalancerPoolChangeListener implements DataChangeListener
         for (Entry<InstanceIdentifier<?>, DataObject> updatePool : changes.getUpdatedData().entrySet()) {
             NeutronLoadBalancerPool loadBalancerPool = fromMd((Pools)updatePool.getValue());
             for(Object entry: subscribers){
-                INeutronLoadBalancerPoolAware subscriber = (INeutronLoadBalancerPoolAware)entry;
+                INeutronLoadBalancerPoolAware subscriber = (INeutronLoadBalancerPoolAware) entry;
                 subscriber.neutronLoadBalancerPoolUpdated(loadBalancerPool);
             }
         }
-
     }
     private void deletePool(
             AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes,
@@ -103,7 +99,7 @@ public class NeutronLoadBalancerPoolChangeListener implements DataChangeListener
         for (InstanceIdentifier<?> deletedPoolPath : changes.getRemovedPaths()) {
             NeutronLoadBalancerPool loadBalancerPool = fromMd((Pools)changes.getOriginalData().get(deletedPoolPath));
             for(Object entry: subscribers){
-                INeutronLoadBalancerPoolAware subscriber = (INeutronLoadBalancerPoolAware)entry;
+                INeutronLoadBalancerPoolAware subscriber = (INeutronLoadBalancerPoolAware) entry;
                 subscriber.neutronLoadBalancerPoolDeleted(loadBalancerPool);
             }
         }
diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/translator/iaware/impl/NeutronLoadBalancerPoolMemberChangeListener.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/translator/iaware/impl/NeutronLoadBalancerPoolMemberChangeListener.java
new file mode 100644 (file)
index 0000000..60ba9ad
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2015 Red Hat, 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.openstack.netvirt.translator.iaware.impl;
+
+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.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.NeutronLoadBalancerPoolMember;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.INeutronLoadBalancerPoolMemberAware;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.Pool;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.pool.Pools;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.pool.PoolsKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.pool.pools.Member;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.pool.pools.member.Members;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map.Entry;
+
+public class NeutronLoadBalancerPoolMemberChangeListener implements DataChangeListener, AutoCloseable {
+    private static final Logger LOG = LoggerFactory.getLogger(NeutronLoadBalancerPoolMemberChangeListener.class);
+
+    private ListenerRegistration<DataChangeListener> registration;
+    private DataBroker db;
+
+    public NeutronLoadBalancerPoolMemberChangeListener(DataBroker db){
+        this.db = db;
+        InstanceIdentifier<Members> path = InstanceIdentifier
+                .create(Neutron.class)
+                .child(Pool.class)
+                .child(Pools.class)
+                .child(Member.class)
+                .child(Members.class);
+        LOG.debug("Register listener for Neutron Load Balancer Pool Member model data changes");
+        registration =
+                this.db.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, path, this,
+                        AsyncDataBroker.DataChangeScope.ONE);
+    }
+
+    @Override
+    public void close() throws Exception {
+        registration.close();
+    }
+
+    @Override
+    public void onDataChanged(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
+        LOG.trace("Data changes : {}", changes);
+
+        Object[] subscribers = NeutronIAwareUtil.getInstances(INeutronLoadBalancerPoolMemberAware.class, this);
+        createPoolMember(changes, subscribers);
+        updatePoolMember(changes, subscribers);
+        deletePoolMember(changes, subscribers);
+    }
+
+    private void createPoolMember(
+            AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes,
+            Object[] subscribers) {
+        for (Entry<InstanceIdentifier<?>, DataObject> newPoolMember : changes.getCreatedData().entrySet()) {
+            NeutronLoadBalancerPoolMember neutronLBPoolMember = fromMd(newPoolMember.getKey(), (Members) newPoolMember.getValue());
+            for (Object entry : subscribers) {
+                INeutronLoadBalancerPoolMemberAware subscriber = (INeutronLoadBalancerPoolMemberAware) entry;
+                subscriber.neutronLoadBalancerPoolMemberCreated(neutronLBPoolMember);
+            }
+        }
+    }
+    private void updatePoolMember(
+            AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes,
+            Object[] subscribers) {
+        for (Entry<InstanceIdentifier<?>, DataObject> updatePoolMember : changes.getUpdatedData().entrySet()) {
+            NeutronLoadBalancerPoolMember neutronLBPoolMember =
+                    fromMd(updatePoolMember.getKey(), (Members) updatePoolMember.getValue());
+            for(Object entry: subscribers){
+                INeutronLoadBalancerPoolMemberAware subscriber = (INeutronLoadBalancerPoolMemberAware) entry;
+                subscriber.neutronLoadBalancerPoolMemberUpdated(neutronLBPoolMember);
+            }
+        }
+    }
+    private void deletePoolMember(
+            AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes,
+            Object[] subscribers) {
+        for (InstanceIdentifier<?> deletedPoolMemberPath : changes.getRemovedPaths()) {
+            NeutronLoadBalancerPoolMember neutronLBPoolMember =
+                    fromMd(deletedPoolMemberPath, (Members) changes.getOriginalData().get(deletedPoolMemberPath));
+            for(Object entry: subscribers){
+                INeutronLoadBalancerPoolMemberAware subscriber = (INeutronLoadBalancerPoolMemberAware) entry;
+                subscriber.neutronLoadBalancerPoolMemberDeleted(neutronLBPoolMember);
+            }
+        }
+    }
+
+    /*
+     * This method is borrowed from NeutronLoadBalancerPoolMember.java class of Neutron Northbound class.
+     * in the original location, this method is called extractFields.
+     * We will be utilizing similar code from other classes from the same package of neutron project.
+     */
+    private NeutronLoadBalancerPoolMember fromMd(InstanceIdentifier<?> iid, Members members) {
+        NeutronLoadBalancerPoolMember result = new NeutronLoadBalancerPoolMember();
+
+        final PoolsKey poolsKey = iid.firstKeyOf(Pools.class, PoolsKey.class);
+        if (poolsKey != null) {
+            result.setPoolID(poolsKey.getUuid().getValue());
+        }
+
+        result.setID(members.getUuid().getValue());
+        result.setPoolMemberAdminStateIsUp(members.isAdminStateUp());
+
+        final IpAddress memberIpAddress = members.getAddress();
+        if (memberIpAddress != null) {
+            if (memberIpAddress.getIpv4Address() != null) {
+                result.setPoolMemberAddress(memberIpAddress.getIpv4Address().getValue());
+            } else if (memberIpAddress.getIpv6Address() != null) {
+                result.setPoolMemberAddress(memberIpAddress.getIpv6Address().getValue());
+            }
+        }
+
+        result.setPoolMemberProtoPort(members.getProtocolPort());
+        result.setPoolMemberSubnetID(members.getSubnetId().getValue());
+        result.setPoolMemberTenantID(members.getTenantId().getValue());
+        result.setPoolMemberWeight(members.getWeight());
+
+        return result;
+    }
+}
+
index e945280686d26818d5788ef15850da51ed4e00f6..4ebb09db1ef251e8c7456477c4b0ee7857fa3bfb 100644 (file)
@@ -55,7 +55,7 @@ public class NeutronSubnetChangeListener implements DataChangeListener, AutoClos
     .put(IpVersionV6.class,Integer.valueOf(6))
     .build();
 
-private static final ImmutableBiMap<Class<? extends Dhcpv6Base>,String> DHCPV6_MAP
+    private static final ImmutableBiMap<Class<? extends Dhcpv6Base>,String> DHCPV6_MAP
     = new ImmutableBiMap.Builder<Class<? extends Dhcpv6Base>,String>()
     .put(Dhcpv6Off.class,"off")
     .put(Dhcpv6Stateful.class,"dhcpv6-stateful")