BUG 4718 - null pointer exception in NeutronSubnetChangeListener.java 73/30673/1
authorIsaku Yamahata <isaku.yamahata@intel.com>
Thu, 3 Dec 2015 22:00:20 +0000 (14:00 -0800)
committerIsaku Yamahata <isaku.yamahata@intel.com>
Thu, 3 Dec 2015 23:35:03 +0000 (15:35 -0800)
When subnet are created/deleted, the following null pointer exception
occurs.
Although the bug highlights only neutron subnet case, this patch
synchronizes null pointer checks in org.opendaylight.ovsdb.openstack.
netvirt.translator.iaware.impl.Neutron*ChangeListener.fromMd() to
the corresponding ones in
org.opendaylight.neutron.transcriber.Neutron*Interface.fromMd()

> 2015-12-03 10:18:45,889 | TRACE | lt-dispatcher-32 | NeutronSubnetChangeListener      | 267 - org.opendaylight.ovsdb.openstack.net-virt - 1.2.1.SNAPSHOT | Data changes : Translated
> DataChangeEvent{created={KeyedInstanceIdentifier{targetType=interface org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.Subnet, pat
> h=[org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron, org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.Subnets, org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.Subnet[key=SubnetKey [_uuid=Uuid [_value=0c103011-92f2-4e88-985a-10dd56b67a95]]]]}=Subnet{getAllocationPools=[AllocationPools{getEnd=10.100.0.14, getStart=10.100.0.1, augmentations={}}], getCidr=10.100.0.0/28, getDnsNameservers=[], getIpVersion=class org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.IpVersionV4, getName=, getNetworkId=Uuid [_value=17ce32b1-455e-4c2f-8819-b5a1374637ed], getTenantId=Uuid [_value=dee4a5dd-9482-4cf5-9c26-fc492cef01a2], getUuid=Uuid [_value=0c103011-92f2-4e88-985a-10dd56b67a95], isEnableDhcp=true, augmentations={}}}, updated={}, removed=[], dom=DOMImmutableDataChangeEvent [created=[/(urn:opendaylight:neutron?revision=2015-07-12)neutron/subnets/subnet/subnet[{(urn:opendaylight:neutron?revision=2015-07-12)uuid=0c103011-92f2-4e88-985a-10dd56b67a95}]/ip-version, /(urn:opendaylight:neutron?revision=2015-07-12)neutron/subnets/subnet/subnet[{(urn:opendaylight:neutron?revision=2015-07-12)uuid=0c103011-92f2-4e88-985a-10dd56b67a95}]/enable-dhcp, /(urn:opendaylight:neutron?revision=2015-07-12)neutron/subnets/subnet/subnet[{(urn:opendaylight:neutron?revision=2015-07-12)uuid=0c103011-92f2-4e88-985a-10dd56b67a95}]/network-id, /(urn:opendaylight:neutron?revision=2015-07-12)neutron/subnets/subnet/subnet[{(urn:opendaylight:neutron?revision=2015-07-12)uuid=0c103011-92f2-4e88-985a-10dd56b67a95}], /(urn:opendaylight:neutron?revision=2015-07-12)neutron/subnets/subnet/subnet[{(urn:opendaylight:neutron?revision=2015-07-12)uuid=0c103011-92f2-4e88-985a-10dd56b67a95}]/allocation-pools, /(urn:opendaylight:neutron?revision=2015-07-12)neutron/subnets/subnet/subnet[{(urn:opendaylight:neutron?revision=2015-07-12)uuid=0c103011-92f2-4e88-985a-10dd56b67a95}]/tenant-id, /(urn:opendaylight:neutron?revision=2015-07-12)neutron/subnets/subnet/subnet[{(urn:opendaylight:neutron?revision=2015-07-12)uuid=0c103011-92f2-4e88-985a-10dd56b67a95}]/uuid, /(urn:opendaylight:neutron?revision=2015-07-12)neutron/subnets/subnet/subnet[{(urn:opendaylight:neutron?revision=2015-07-12)uuid=0c103011-92f2-4e88-985a-10dd56b67a95}]/name, /(urn:opendaylight:neutron?revision=2015-07-12)neutron/subnets/subnet/subnet[{(urn:opendaylight:neutron?revision=2015-07-12)uuid=0c103011-92f2-4e88-985a-10dd56b67a95}]/dns-nameservers, /(urn:opendaylight:neutron?revision=2015-07-12)neutron/subnets/subnet/subnet[{(urn:opendaylight:neutron?revision=2015-07-12)uuid=0c103011-92f2-4e88-985a-10dd56b67a95}]/cidr], updated=[], removed=[]]}
> 2015-12-03 10:18:45,889 | ERROR | lt-dispatcher-32 | DataChangeListener               | 140 - org.opendaylight.controller.sal-distributed-datastore - 1.3.0.SNAPSHOT | Error notifying listener org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronSubnetChangeListener
> java.lang.NullPointerException
>         at org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronSubnetChangeListener.fromMd(NeutronSubnetChangeListener.java:145)[267:org.opendaylight.ovsdb.openstack.net-virt:1.2.1.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronSubnetChangeListener.createSubnet(NeutronSubnetChangeListener.java:97)[267:org.opendaylight.ovsdb.openstack.net-virt:1.2.1.SNAPSHOT]
>         at org.opendaylight.ovsdb.openstack.netvirt.translator.iaware.impl.NeutronSubnetChangeListener.onDataChanged(NeutronSubnetChangeListener.java:87)[267:org.opendaylight.ovsdb.openstack.net-virt:1.2.1.SNAPSHOT]
>         at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatingDataChangeInvoker.onDataChanged(AbstractForwardedDataBroker.java:143)[115:org.opendaylight.controller.sal-binding-broker-impl:1.3.0.SNAPSHOT]
>         at org.opendaylight.controller.cluster.datastore.DataChangeListener.dataChanged(DataChangeListener.java:66)[140:org.opendaylight.controller.sal-distributed-datastore:1.3.0.SNAPSHOT]
>         at org.opendaylight.controller.cluster.datastore.DataChangeListener.handleReceive(DataChangeListener.java:39)[140:org.opendaylight.controller.sal-distributed-datastore:1.3.0.SNAPSHOT]
>         at org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor.onReceive(AbstractUntypedActor.java:34)[136:org.opendaylight.controller.sal-clustering-commons:1.3.0.SNAPSHOT]
>         at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:167)[125:com.typesafe.akka.actor:2.3.14]
>         at akka.actor.Actor$class.aroundReceive(Actor.scala:467)[125:com.typesafe.akka.actor:2.3.14]
>         at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:97)[125:com.typesafe.akka.actor:2.3.14]
>         at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)[125:com.typesafe.akka.actor:2.3.14]
>         at akka.actor.ActorCell.invoke(ActorCell.scala:487)[125:com.typesafe.akka.actor:2.3.14]
>         at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238)[125:com.typesafe.akka.actor:2.3.14]
>         at akka.dispatch.Mailbox.run(Mailbox.scala:220)[125:com.typesafe.akka.actor:2.3.14]
>         at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397)[125:com.typesafe.akka.actor:2.3.14]
>         at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)[122:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
>         at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)[122:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
>         at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)[122:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
>         at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)[122:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]

Change-Id: Icc0957fc961aae7ef277b57df9d8ce4f4b923d24
Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com>
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
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/translator/iaware/impl/NeutronSubnetChangeListener.java

index 84f398fe9858b884c45bd30769d30f737199bfc3..faaaa835231928a8f4db884d17e2eeb908874b51 100644 (file)
@@ -129,18 +129,30 @@ public class NeutronLoadBalancerPoolChangeListener implements DataChangeListener
         NeutronLoadBalancerPool result = new NeutronLoadBalancerPool();
 
         result.setID(pool.getUuid().getValue());
-        result.setLoadBalancerPoolTenantID(pool.getTenantId().getValue());
-        result.setLoadBalancerPoolName(pool.getName());
-        result.setLoadBalancerPoolDescription(pool.getDescr());
-        result.setLoadBalancerPoolProtocol(PROTOCOL_MAP.get(pool.getProtocol()));
-        result.setLoadBalancerPoolLbAlgorithm(pool.getLbAlgorithm());
+        if (pool.getTenantId() != null) {
+            result.setLoadBalancerPoolTenantID(pool.getTenantId().getValue());
+        }
+        if (pool.getName() != null) {
+            result.setLoadBalancerPoolName(pool.getName());
+        }
+        if (pool.getDescr() != null) {
+            result.setLoadBalancerPoolDescription(pool.getDescr());
+        }
+        if (pool.getProtocol() != null) {
+            result.setLoadBalancerPoolProtocol(PROTOCOL_MAP.get(pool.getProtocol()));
+        }
+        if (pool.getLbAlgorithm() != null) {
+            result.setLoadBalancerPoolLbAlgorithm(pool.getLbAlgorithm());
+        }
 
         // TODO: setNeutronLoadBalancerPoolHealthMonitorID is a list? Fill in, when its needed.
         if (pool.getHealthmonitorId() != null) {
                result.setNeutronLoadBalancerPoolHealthMonitorID(pool.getHealthmonitorId().getValue());
         }
 
-        result.setLoadBalancerPoolAdminStateIsUp(pool.isAdminStateUp());
+        if (pool.isAdminStateUp() != null) {
+            result.setLoadBalancerPoolAdminStateIsUp(pool.isAdminStateUp());
+        }
 
         List<Neutron_ID> listeners = new ArrayList();
         if (pool.getListeners() != null) {
index b62583f63e75eb291d02724041559781874c3b8f..357e263eee0efa6ab360646f0f789f6c7f91cf74 100644 (file)
@@ -121,7 +121,9 @@ public class NeutronLoadBalancerPoolMemberChangeListener implements DataChangeLi
         }
 
         result.setID(member.getUuid().getValue());
-        result.setPoolMemberAdminStateIsUp(member.isAdminStateUp());
+        if (member.isAdminStateUp() != null) {
+            result.setPoolMemberAdminStateIsUp(member.isAdminStateUp());
+        }
 
         final IpAddress memberIpAddress = member.getAddress();
         if (memberIpAddress != null) {
@@ -132,10 +134,18 @@ public class NeutronLoadBalancerPoolMemberChangeListener implements DataChangeLi
             }
         }
 
-        result.setPoolMemberProtoPort(member.getProtocolPort());
-        result.setPoolMemberSubnetID(member.getSubnetId().getValue());
-        result.setPoolMemberTenantID(member.getTenantId().getValue());
-        result.setPoolMemberWeight(member.getWeight());
+        if (member.getProtocolPort() != null) {
+            result.setPoolMemberProtoPort(member.getProtocolPort());
+        }
+        if (member.getSubnetId() != null) {
+            result.setPoolMemberSubnetID(member.getSubnetId().getValue());
+        }
+        if (member.getTenantId() != null) {
+            result.setPoolMemberTenantID(member.getTenantId().getValue());
+        }
+        if (member.getWeight() != null) {
+            result.setPoolMemberWeight(member.getWeight());
+        }
 
         return result;
     }
index 3d9be3cb45a294b2d3914ef0f9f0dac2e6b0c1ed..916598dda6a7486f6531a58bbca6d813c80b665d 100644 (file)
@@ -142,9 +142,15 @@ public class NeutronSubnetChangeListener implements DataChangeListener, AutoClos
         result.setNetworkUUID(subnet.getNetworkId().getValue());
         result.setIpVersion(IPV_MAP.get(subnet.getIpVersion()));
         result.setCidr(subnet.getCidr());
-        result.setGatewayIP(String.valueOf(subnet.getGatewayIp().getValue()));
-        result.setIpV6RaMode(DHCPV6_MAP.get(subnet.getIpv6RaMode()));
-        result.setIpV6AddressMode(DHCPV6_MAP.get(subnet.getIpv6AddressMode()));
+        if (subnet.getGatewayIp() != null) {
+            result.setGatewayIP(String.valueOf(subnet.getGatewayIp().getValue()));
+        }
+        if (subnet.getIpv6RaMode() != null) {
+            result.setIpV6RaMode(DHCPV6_MAP.get(subnet.getIpv6RaMode()));
+        }
+        if (subnet.getIpv6AddressMode() != null) {
+            result.setIpV6AddressMode(DHCPV6_MAP.get(subnet.getIpv6AddressMode()));
+        }
         result.setEnableDHCP(subnet.isEnableDhcp());
         if (subnet.getAllocationPools() != null) {
             List<NeutronSubnetIPAllocationPool> allocationPools = new ArrayList<>();