BUG-185: include the ability to configure multiple peers 67/3667/5
authorRobert Varga <rovarga@cisco.com>
Thu, 12 Dec 2013 08:30:51 +0000 (09:30 +0100)
committerRobert Varga <rovarga@cisco.com>
Thu, 19 Dec 2013 12:56:30 +0000 (13:56 +0100)
Change-Id: Ia09859bc7b2c9483029df0584a8630d3fb92fd9f
Signed-off-by: Robert Varga <rovarga@cisco.com>
bgp/rib-impl-config/src/main/java/org/opendaylight/controller/config/yang/bgp/rib/impl/RIBImplModule.java
bgp/rib-impl-config/src/main/yang/bgp-rib-impl.yang
bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/RIBImplModuleTest.java

index 4c9e2884935baa76320310c34f3beb5a0ec66c96..3fdcfcbd15bba8e59a0a409bb9b1eb4383164ca8 100644 (file)
@@ -9,6 +9,8 @@
  */
 package org.opendaylight.controller.config.yang.bgp.rib.impl;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.concurrent.ExecutionException;
 
 import org.opendaylight.controller.config.api.JmxAttributeValidationException;
@@ -23,6 +25,8 @@ import org.opendaylight.protocol.framework.ReconnectStrategy;
 import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.RibId;
 
+import com.google.common.base.Preconditions;
+
 /**
  *
  */
@@ -54,24 +58,26 @@ org.opendaylight.controller.config.yang.bgp.rib.impl.AbstractRIBImplModule {
 
        @Override
        public java.lang.AutoCloseable createInstance() {
-               RibImplCloseable rib = new RibImplCloseable(getRibId(), getExtensionsDependency(), getDataProviderDependency());
-               BGP bgp = getBgpDependency();
-               final BGPPeer peer = new BGPPeer(rib, "peer-" + bgp.toString());
+               final RibImplCloseable rib = new RibImplCloseable(getRibId(), getExtensionsDependency(), getDataProviderDependency());
+               final List<ListenerRegistration<BGPSessionListener>> regs = new ArrayList<>();
+               for (final BGP bgp : getBgpDependency()) {
+                       final BGPPeer peer = new BGPPeer(rib, "peer-" + bgp.toString());
 
-               ListenerRegistration<BGPSessionListener> reg = bgp
-                               .registerUpdateListener(peer,
-                                               new ReconnectStrategyFactory() {
-                                       @Override
-                                       public ReconnectStrategy createReconnectStrategy() {
-                                               return getTcpReconnectStrategyDependency();
-                                       }
-                               }, getSessionReconnectStrategyDependency());
-               rib.setListenerRegistration(reg);
+                       regs.add(Preconditions.checkNotNull(bgp
+                                       .registerUpdateListener(peer,
+                                                       new ReconnectStrategyFactory() {
+                                               @Override
+                                               public ReconnectStrategy createReconnectStrategy() {
+                                                       return getTcpReconnectStrategyDependency();
+                                               }
+                                       }, getSessionReconnectStrategyDependency())));
+               }
+               rib.setListenerRegistrations(regs);
                return rib;
        }
 
        private static final class RibImplCloseable extends RIBImpl implements AutoCloseable {
-               private ListenerRegistration<BGPSessionListener> reg;
+               private List<ListenerRegistration<BGPSessionListener>> regs;
 
                private RibImplCloseable(final RibId ribId, final RIBExtensionConsumerContext extensions, final DataProviderService dps) {
                        super(ribId, extensions, dps);
@@ -82,12 +88,14 @@ org.opendaylight.controller.config.yang.bgp.rib.impl.AbstractRIBImplModule {
                        try {
                                super.close();
                        } finally {
-                               reg.close();
+                               for (ListenerRegistration<BGPSessionListener> r : regs) {
+                                       r.close();
+                               }
                        }
                }
 
-               public void setListenerRegistration(final ListenerRegistration<BGPSessionListener> reg) {
-                       this.reg = reg;
+               public void setListenerRegistrations(final List<ListenerRegistration<BGPSessionListener>> regs) {
+                       this.regs = Preconditions.checkNotNull(regs);
                }
        }
 }
index 34e4d622afcdfd983de30527da5cbc46c5e63f62..c669a5497a3197f7d93405c2963e061e5ae4b043 100644 (file)
@@ -190,7 +190,7 @@ module bgp-rib-impl {
         case rib-impl {
             when "/config:modules/config:module/config:type = 'rib-impl'";
 
-            container bgp {
+            list bgp {
                 uses config:service-ref {
                     refine type {
                         mandatory true;
index 060beb67a52ec5eddc66275a51b0c061396f1f79..f67bcf4effea44d1f26a6f64711538433a994757 100644 (file)
@@ -51,6 +51,8 @@ import org.osgi.framework.Filter;
 import org.osgi.framework.ServiceListener;
 import org.osgi.framework.ServiceReference;
 
+import com.google.common.collect.Lists;
+
 public class RIBImplModuleTest extends AbstractConfigTest {
 
        private final String instanceName = "bgp-rib-impl";
@@ -157,7 +159,7 @@ public class RIBImplModuleTest extends AbstractConfigTest {
                ObjectName reconnectStrategyON = TimedReconnectStrategyModuleTest.createInstance(transaction, reconnectModueName, "tcp-reconnect-strategy", 100, 1000L, new BigDecimal(1.0), 5000L, 2000L, null, executorModuleName,
                                "global-event-executor2");
                mxBean.setTcpReconnectStrategy(reconnectStrategyON);
-               mxBean.setBgp(BGPImplModuleTest.createInstance(transaction, bgpModuleName, "bgp-impl1", "localhost", 1, sessionModuleName, dispatcherModuleName, threadgroupModuleName, ribExtensionsModuleName, extensionModuleName));
+               mxBean.setBgp(Lists.newArrayList(BGPImplModuleTest.createInstance(transaction, bgpModuleName, "bgp-impl1", "localhost", 1, sessionModuleName, dispatcherModuleName, threadgroupModuleName, ribExtensionsModuleName, extensionModuleName)));
                mxBean.setExtensions(createRibExtensionsInstance(transaction, ribExtensionsModuleName, "rib-extensions-privider1"));
                mxBean.setRibId(new RibId("test"));
                return nameCreated;