BUG-3860 : fixed config through RESTCONF 64/23264/3
authorDana Kutenicsova <dkutenic@cisco.com>
Thu, 25 Jun 2015 11:07:13 +0000 (13:07 +0200)
committerGerrit Code Review <gerrit@opendaylight.org>
Mon, 29 Jun 2015 11:35:40 +0000 (11:35 +0000)
Not closing loc-rib caused many loc-ribs to be created
through config-pusher causing NodeModificationExceptions.

Change-Id: I9b168615875f02a40b120b13cc92e9d5bdcd42be
Signed-off-by: Dana Kutenicsova <dkutenic@cisco.com>
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/RIBImpl.java

index 0e5295ca81c4ff7dcc32c4f7abbbbdf8b1b56181..52fce6310ef6284dcc1ac10053ae1b14629fbdfa 100644 (file)
@@ -13,6 +13,7 @@ import com.google.common.base.MoreObjects.ToStringHelper;
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSet;
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map.Entry;
@@ -97,6 +98,7 @@ public final class RIBImpl extends DefaultRibReference implements AutoCloseable,
     private final RIBSupportContextRegistryImpl ribContextRegistry;
     private final EffectiveRibInWriter efWriter;
     private final DOMDataBrokerExtension service;
+    private final List<LocRibWriter> locRibs = new ArrayList<>();
 
     public RIBImpl(final RibId ribId, final AsNumber localAs, final Ipv4Address localBgpId, final Ipv4Address clusterId, final RIBExtensionConsumerContext extensions,
         final BGPDispatcher dispatcher, final ReconnectStrategyFactory tcpStrategyFactory, final BindingCodecTreeFactory codecFactory,
@@ -183,9 +185,7 @@ public final class RIBImpl extends DefaultRibReference implements AutoCloseable,
         } catch (final TransactionCommitFailedException e1) {
             LOG.error("Failed to initiate LocRIB for key {}", key, e1);
         }
-
-        // FIXME: do not lose the writer so we clean it up on shutdown
-        LocRibWriter.create(this.ribContextRegistry, key, this.createPeerChain(this), getYangRibId(), this.localAs, getService(), pd);
+        this.locRibs.add(LocRibWriter.create(this.ribContextRegistry, key, this.createPeerChain(this), getYangRibId(), this.localAs, getService(), pd));
     }
 
     @Override
@@ -204,6 +204,13 @@ public final class RIBImpl extends DefaultRibReference implements AutoCloseable,
         t.submit().get();
         this.domChain.close();
         this.efWriter.close();
+        for (final LocRibWriter locRib : this.locRibs) {
+            try {
+                locRib.close();
+            } catch (final Exception e) {
+                LOG.warn("Could not close LocalRib reference: {}", locRib);
+            }
+        }
     }
 
     @Override