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>
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) {
}
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) {
}
}
- 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;
}
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<>();