Fixing NPE when adding linkstate routes. 89/3789/1
authorDana Kutenicsova <dkutenic@cisco.com>
Tue, 17 Dec 2013 12:47:09 +0000 (13:47 +0100)
committerDana Kutenicsova <dkutenic@cisco.com>
Tue, 17 Dec 2013 12:47:09 +0000 (13:47 +0100)
Change-Id: If0f6fdbe1b38af0c2ceb72550a0941dcf52479e2
Signed-off-by: Dana Kutenicsova <dkutenic@cisco.com>
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/RIBImpl.java
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractAdjRIBsIn.java
framework/src/main/java/org/opendaylight/protocol/framework/AbstractProtocolSession.java

index d2531b3bb68b53370890f51f0fa15b8518f24d37..1f0a7c512edf99134fa8caacb7a0f7509a58a595 100644 (file)
@@ -65,79 +65,78 @@ public class RIBImpl extends DefaultRibReference {
        synchronized void updateTables(final BGPPeer peer, final Update message) {
                final DataModificationTransaction trans = this.dps.beginTransaction();
 
-               if (EOR.equals(message)) {
-                       final AdjRIBsIn ari = this.tables.getOrCreate(trans, this,
-                                       new TablesKey(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class));
-                       if (ari != null) {
-                               ari.markUptodate(trans, peer);
-                       } else {
-                               LOG.debug("End-of-RIB for IPv4 Unicast ignored");
-                       }
-                       return;
-               }
-
-               final WithdrawnRoutes wr = message.getWithdrawnRoutes();
-               if (wr != null) {
-                       final AdjRIBsIn ari = this.tables.getOrCreate(trans, this,
-                                       new TablesKey(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class));
-                       if (ari != null) {
-                               ari.removeRoutes(
-                                               trans,
-                                               peer,
-                                               new MpUnreachNlriBuilder().setAfi(Ipv4AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class).setWithdrawnRoutes(
-                                                               new WithdrawnRoutesBuilder().setDestinationType(
-                                                                               new DestinationIpv4CaseBuilder().setDestinationIpv4(
-                                                                                               new DestinationIpv4Builder().setIpv4Prefixes(wr.getWithdrawnRoutes()).build()).build()).build()).build());
-                       } else {
-                               LOG.debug("Not removing objects from unhandled IPv4 Unicast");
+               if (!EOR.equals(message)) {
+                       final WithdrawnRoutes wr = message.getWithdrawnRoutes();
+                       if (wr != null) {
+                               final AdjRIBsIn ari = this.tables.getOrCreate(trans, this,
+                                               new TablesKey(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class));
+                               if (ari != null) {
+                                       ari.removeRoutes(
+                                                       trans,
+                                                       peer,
+                                                       new MpUnreachNlriBuilder().setAfi(Ipv4AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class).setWithdrawnRoutes(
+                                                                       new WithdrawnRoutesBuilder().setDestinationType(
+                                                                                       new DestinationIpv4CaseBuilder().setDestinationIpv4(
+                                                                                                       new DestinationIpv4Builder().setIpv4Prefixes(wr.getWithdrawnRoutes()).build()).build()).build()).build());
+                               } else {
+                                       LOG.debug("Not removing objects from unhandled IPv4 Unicast");
+                               }
                        }
-               }
 
-               final PathAttributes attrs = message.getPathAttributes();
-               final PathAttributes2 mpu = attrs.getAugmentation(PathAttributes2.class);
-               if (mpu != null) {
-                       final MpUnreachNlri nlri = mpu.getMpUnreachNlri();
+                       final PathAttributes attrs = message.getPathAttributes();
+                       final PathAttributes2 mpu = attrs.getAugmentation(PathAttributes2.class);
+                       if (mpu != null) {
+                               final MpUnreachNlri nlri = mpu.getMpUnreachNlri();
 
-                       final AdjRIBsIn ari = this.tables.getOrCreate(trans, this, new TablesKey(nlri.getAfi(), nlri.getSafi()));
-                       if (ari != null) {
-                               ari.removeRoutes(trans, peer, nlri);
-                       } else {
-                               LOG.debug("Not removing objects from unhandled NLRI {}", nlri);
+                               final AdjRIBsIn ari = this.tables.getOrCreate(trans, this, new TablesKey(nlri.getAfi(), nlri.getSafi()));
+                               if (ari != null) {
+                                       ari.removeRoutes(trans, peer, nlri);
+                               } else {
+                                       LOG.debug("Not removing objects from unhandled NLRI {}", nlri);
+                               }
                        }
-               }
 
-               final Nlri ar = message.getNlri();
-               if (ar != null) {
-                       final AdjRIBsIn ari = this.tables.getOrCreate(trans, this,
-                                       new TablesKey(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class));
-                       if (ari != null) {
-                               ari.addRoutes(
-                                               trans,
-                                               peer,
-                                               new MpReachNlriBuilder().setAfi(Ipv4AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class).setCNextHop(
-                                                               attrs.getCNextHop()).setAdvertizedRoutes(
-                                                               new AdvertizedRoutesBuilder().setDestinationType(
-                                                                               new DestinationIpv4CaseBuilder().setDestinationIpv4(
-                                                                                               new DestinationIpv4Builder().setIpv4Prefixes(ar.getNlri()).build()).build()).build()).build(),
-                                               attrs);
-                       } else {
-                               LOG.debug("Not adding objects from unhandled IPv4 Unicast");
+                       final Nlri ar = message.getNlri();
+                       if (ar != null) {
+                               final AdjRIBsIn ari = this.tables.getOrCreate(trans, this,
+                                               new TablesKey(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class));
+                               if (ari != null) {
+                                       ari.addRoutes(
+                                                       trans,
+                                                       peer,
+                                                       new MpReachNlriBuilder().setAfi(Ipv4AddressFamily.class).setSafi(UnicastSubsequentAddressFamily.class).setCNextHop(
+                                                                       attrs.getCNextHop()).setAdvertizedRoutes(
+                                                                       new AdvertizedRoutesBuilder().setDestinationType(
+                                                                                       new DestinationIpv4CaseBuilder().setDestinationIpv4(
+                                                                                                       new DestinationIpv4Builder().setIpv4Prefixes(ar.getNlri()).build()).build()).build()).build(),
+                                                       attrs);
+                               } else {
+                                       LOG.debug("Not adding objects from unhandled IPv4 Unicast");
+                               }
                        }
-               }
-
-               final PathAttributes1 mpr = message.getPathAttributes().getAugmentation(PathAttributes1.class);
-               if (mpr != null) {
-                       final MpReachNlri nlri = mpr.getMpReachNlri();
 
-                       final AdjRIBsIn ari = this.tables.getOrCreate(trans, this, new TablesKey(nlri.getAfi(), nlri.getSafi()));
-                       if (ari != null) {
-                               if (message.equals(ari.endOfRib())) {
-                                       ari.markUptodate(trans, peer);
+                       final PathAttributes1 mpr = message.getPathAttributes().getAugmentation(PathAttributes1.class);
+                       if (mpr != null) {
+                               final MpReachNlri nlri = mpr.getMpReachNlri();
+
+                               final AdjRIBsIn ari = this.tables.getOrCreate(trans, this, new TablesKey(nlri.getAfi(), nlri.getSafi()));
+                               if (ari != null) {
+                                       if (message.equals(ari.endOfRib())) {
+                                               ari.markUptodate(trans, peer);
+                                       } else {
+                                               ari.addRoutes(trans, peer, nlri, attrs);
+                                       }
                                } else {
-                                       ari.addRoutes(trans, peer, nlri, attrs);
+                                       LOG.debug("Not adding objects from unhandled NLRI {}", nlri);
                                }
+                       }
+               } else {
+                       final AdjRIBsIn ari = this.tables.getOrCreate(trans, this,
+                                       new TablesKey(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class));
+                       if (ari != null) {
+                               ari.markUptodate(trans, peer);
                        } else {
-                               LOG.debug("Not adding objects from unhandled NLRI {}", nlri);
+                               LOG.debug("End-of-RIB for IPv4 Unicast ignored");
                        }
                }
 
index e10fd08e54301409bc3fd83ba69a75aa4a435563..c44569297a576393f364d501adf75bd69880c649 100644 (file)
@@ -150,7 +150,8 @@ public abstract class AbstractAdjRIBsIn<I, D extends DataObject> implements AdjR
 
        private void setUptodate(final DataModificationTransaction trans, final Boolean uptodate) {
                final Tables t = (Tables) trans.readOperationalData(this.basePath);
-               if (t == null || !uptodate.equals(t.isUptodate())) {
+               Preconditions.checkState(t != null);
+               if (!uptodate.equals(t.isUptodate())) {
                        LOG.debug("Table {} switching uptodate to {}", t, uptodate);
                        trans.putOperationalData(this.basePath, new TablesBuilder(t).setUptodate(uptodate).build());
                }
index af917cad1a09265ab48d21142666da8c9f846775..de77907a0a33c3e0b951403866e0b5721b3f71d2 100644 (file)
@@ -35,14 +35,14 @@ public abstract class AbstractProtocolSession<M> extends SimpleChannelInboundHan
 
        @Override
        public final void channelInactive(final ChannelHandlerContext ctx) {
-               LOG.debug("Channel inactive.");
+               LOG.debug("Channel {} inactive.", ctx.channel());
                endOfInput();
        }
 
        @Override
        protected final void channelRead0(final ChannelHandlerContext ctx, final Object msg) {
                LOG.debug("Message was received: {}", msg);
-               handleMessage((M)msg);
+               handleMessage((M) msg);
        }
 
        @Override