Merge "Fixed rib-impl-config modules tests."
[bgpcep.git] / bgp / rib-impl / src / main / java / org / opendaylight / protocol / bgp / rib / impl / BGPPeer.java
index 10d3ab5965f94a012f361e6a2b29999d7ffea072..b91ad204690f3b842973f17d0901b6217cabeb93 100644 (file)
@@ -13,8 +13,8 @@ import org.opendaylight.protocol.bgp.parser.BGPSession;
 import org.opendaylight.protocol.bgp.parser.BGPSessionListener;
 import org.opendaylight.protocol.bgp.parser.BGPTerminationReason;
 import org.opendaylight.protocol.bgp.rib.spi.Peer;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.Update;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.BgpTableType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.Update;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.TablesKey;
 import org.opendaylight.yangtools.yang.binding.Notification;
 import org.slf4j.Logger;
@@ -23,14 +23,15 @@ import org.slf4j.LoggerFactory;
 import com.google.common.base.Objects;
 import com.google.common.base.Objects.ToStringHelper;
 import com.google.common.base.Preconditions;
+import com.google.common.collect.Sets;
 
 /**
  * Class representing a peer. We have a single instance for each peer, which provides translation from BGP events into
  * RIB actions.
  */
 public final class BGPPeer implements BGPSessionListener, Peer {
-       private static final Logger logger = LoggerFactory.getLogger(BGPPeer.class);
-       private Set<TablesKey> tables;
+       private static final Logger LOG = LoggerFactory.getLogger(BGPPeer.class);
+       private final Set<TablesKey> tables = Sets.newHashSet();
        private final String name;
        private final RIBImpl rib;
 
@@ -44,22 +45,21 @@ public final class BGPPeer implements BGPSessionListener, Peer {
                if (message instanceof Update) {
                        this.rib.updateTables(this, (Update) message);
                } else {
-                       logger.info("Ignoring unhandled message class " + message.getClass());
+                       LOG.info("Ignoring unhandled message class " + message.getClass());
                }
        }
 
        @Override
        public void onSessionUp(final BGPSession session) {
-               logger.info("Session with peer {} went up with tables: {}", this.name, session.getAdvertisedTableTypes());
+               LOG.info("Session with peer {} went up with tables: {}", this.name, session.getAdvertisedTableTypes());
 
                for (final BgpTableType t : session.getAdvertisedTableTypes()) {
                        this.tables.add(new TablesKey(t.getAfi(), t.getSafi()));
                }
        }
 
-       @Override
-       public void onSessionDown(final BGPSession session, final Exception e) {
-               // FIXME: support graceful restart
+       private void cleanup() {
+               // FIXME: BUG-196: support graceful restart
                for (final TablesKey key : this.tables) {
                        this.rib.clearTable(this, key);
                }
@@ -67,9 +67,16 @@ public final class BGPPeer implements BGPSessionListener, Peer {
                this.tables.clear();
        }
 
+       @Override
+       public void onSessionDown(final BGPSession session, final Exception e) {
+               LOG.info("Session with peer {} went down", this.name, e);
+               cleanup();
+       }
+
        @Override
        public void onSessionTerminated(final BGPSession session, final BGPTerminationReason cause) {
-               logger.info("Session with peer {} terminated: {}", this.name, cause);
+               LOG.info("Session with peer {} terminated: {}", this.name, cause);
+               cleanup();
        }
 
        @Override