BUG-3860 : fixed config through RESTCONF 65/23265/2
authorDana Kutenicsova <dkutenic@cisco.com>
Thu, 25 Jun 2015 11:07:13 +0000 (13:07 +0200)
committerDana Kutenicsova <dkutenic@cisco.com>
Mon, 29 Jun 2015 11:06:36 +0000 (13:06 +0200)
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 02978342ce9a6c30ddcb5d6f3c5d595b5246d9f8..0344c0f2d27fea28421432e526ac21df1152abc9 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;
@@ -96,6 +97,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,
@@ -181,9 +183,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
@@ -202,6 +202,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