Opening update server port with specified IP address (if configured) 01/69801/7
authorSiva Kumar Perumalla <sivakumar.perumalla@gmail.com>
Thu, 22 Mar 2018 16:10:42 +0000 (21:40 +0530)
committerSam Hague <shague@redhat.com>
Wed, 28 Mar 2018 15:27:47 +0000 (15:27 +0000)
update server port shall depend on EoS-entity-BGP.

Change-Id: Iad8bb1e1daf318c811453c2ddd622fb7e6187390
Signed-off-by: Siva Kumar Perumalla <sivakumar.perumalla@gmail.com>
bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/BgpConfigurationManager.java
bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/thrift/server/BgpThriftService.java

index 16105dc3109e212b6ab46be414bfdf83d9a7084a..455bbda103f3b80d8113324ca3ae95db5a30fdf3 100755 (executable)
@@ -8,12 +8,14 @@
 package org.opendaylight.netvirt.bgpmanager;
 
 import com.google.common.base.Optional;
+import com.google.common.net.InetAddresses;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
 import io.netty.util.concurrent.GlobalEventExecutor;
 import java.io.IOException;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.net.InetAddress;
+import java.net.InetSocketAddress;
 import java.net.NetworkInterface;
 import java.net.SocketException;
 import java.util.ArrayList;
@@ -178,7 +180,7 @@ public class BgpConfigurationManager {
     private volatile Bgp config;
     private final BgpRouter bgpRouter;
     private final BgpSyncHandle bgpSyncHandle = new BgpSyncHandle();
-    private BgpThriftService updateServer;
+    private volatile BgpThriftService bgpThriftService = null;
 
     private final CountDownLatch initer = new CountDownLatch(1);
 
@@ -243,7 +245,7 @@ public class BgpConfigurationManager {
         String updatePort = getProperty(UPDATE_PORT, DEF_UPORT);
         hostStartup = getProperty(CONFIG_HOST, DEF_CHOST);
         portStartup = getProperty(CONFIG_PORT, DEF_CPORT);
-        LOG.info("UpdateServer at localhost:{}, ConfigServer at {}:{}", updatePort, hostStartup, portStartup);
+        LOG.info("ConfigServer at {}:{}", hostStartup, portStartup);
         VtyshCli.setHostAddr(hostStartup);
         ClearBgpCli.setHostAddr(hostStartup);
         bgpRouter = BgpRouter.newInstance(this::getConfig, this::isBGPEntityOwner);
@@ -261,8 +263,19 @@ public class BgpConfigurationManager {
             final WaitingServiceTracker<IBgpManager> tracker = WaitingServiceTracker.create(
                     IBgpManager.class, bundleContext);
             bgpManager = tracker.waitForService(WaitingServiceTracker.FIVE_MINUTES);
-            updateServer = new BgpThriftService(Integer.parseInt(updatePort), bgpManager, this);
-            updateServer.start();
+            if (InetAddresses.isInetAddress(getBgpSdncMipIp())) {
+                InetSocketAddress bgpThriftServerSocketAddr = new InetSocketAddress(getBgpSdncMipIp(),
+                        Integer.parseInt(updatePort));
+                bgpThriftService = new BgpThriftService(bgpThriftServerSocketAddr, bgpManager, this);
+                if (isBGPEntityOwner()) {
+                    //I am EoS owner of BGP, opening bgp thrift UPDATE-SERVER port.
+                    LOG.info("BGP Configuration manager initialized: UPDATE-SERVER started");
+                    bgpThriftService.start();
+                }
+                LOG.info("UPDATE server started :ip:port={}:{}", getBgpSdncMipIp(), updatePort);
+            } else {
+                LOG.error("Failed to init UPDATE server invalid ip:port={}:{}", getBgpSdncMipIp(), updatePort);
+            }
             LOG.info("BgpConfigurationManager initialized. IBgpManager={}", bgpManager);
         });
     }
@@ -338,8 +351,14 @@ public class BgpConfigurationManager {
     public void close() {
         executor.shutdown();
 
-        if (updateServer != null) {
-            updateServer.stop();
+        if (bgpThriftService != null) {
+            bgpThriftService.stop();
+            bgpThriftService = null;
+        }
+
+        if (isBgpConnected()) {
+            //disconnect the CONFIG SERVER port (which was )opened during I was Owner
+            bgpRouter.disconnect();
         }
 
         if (candidateRegistration != null) {
@@ -382,11 +401,25 @@ public class BgpConfigurationManager {
 
             if (ownershipChange.getState() == EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED) {
                 LOG.trace("This PL is the Owner");
-                activateMIP();
+                if (bgpThriftService != null) {
+                    //opening UPDATE-SERVER port.
+                    bgpThriftService.start();
+                } else {
+                    LOG.error("I am the owner of BGP entity, but bgpThriftService is not initialized yet");
+                }
                 bgpRestarted();
             } else {
                 LOG.debug("Not owner: hasOwner: {}, isOwner: {}", ownershipChange.getState().hasOwner(),
                         ownershipChange.getState().isOwner());
+                if ((bgpThriftService != null) && (bgpThriftService.isBgpThriftServiceStarted())) {
+                    //close the bgp Thrift Update-SERVER port opened on non-Entity Owner
+                    bgpThriftService.stop();
+                    bgpThriftService = null;
+                }
+                if (isBgpConnected()) {
+                    //disconnect the CONFIG SERVER port (which was )opened during I was Owner
+                    bgpRouter.disconnect();
+                }
             }
         });
     }
index 5b29df4d6add3590a768ade7c2b8b45f04b7df44..236bf8c38cd39505a5b0460d3a9c56864a51f254 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.netvirt.bgpmanager.thrift.server;
 
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import java.net.InetSocketAddress;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
@@ -35,7 +36,7 @@ import org.slf4j.LoggerFactory;
 public class BgpThriftService {
     private static final Logger LOG = LoggerFactory.getLogger(BgpThriftService.class);
 
-    private final int ourPort;
+    private final InetSocketAddress bgpThriftServerSocketAddr;
     private final IBgpManager bgpManager;
     private final BgpConfigurationManager bgpConfigManager;
     private volatile TServer server;
@@ -44,8 +45,9 @@ public class BgpThriftService {
     private static ExecutorService threadPool = Executors.newFixedThreadPool(1, thriftServerThreadFactory);
     private volatile Future ft;
 
-    public BgpThriftService(int ourPort, IBgpManager bm, BgpConfigurationManager bgpConfigManager) {
-        this.ourPort = ourPort;
+    public BgpThriftService(InetSocketAddress bgpThriftServerSocketAddr, IBgpManager bm,
+                            BgpConfigurationManager bgpConfigManager) {
+        this.bgpThriftServerSocketAddr = bgpThriftServerSocketAddr;
         bgpManager = bm;
         this.bgpConfigManager = bgpConfigManager;
     }
@@ -74,7 +76,7 @@ public class BgpThriftService {
             try {
                 BgpUpdater.Processor processor = new BgpUpdater.Processor(this);
 
-                TNonblockingServerTransport trans = new TNonblockingServerSocket(ourPort);
+                TNonblockingServerTransport trans = new TNonblockingServerSocket(bgpThriftServerSocketAddr);
                 TThreadedSelectorServer.Args args = new TThreadedSelectorServer.Args(trans);
                 args.transportFactory(new TFramedTransport.Factory());
                 args.protocolFactory(new TBinaryProtocol.Factory());
@@ -196,6 +198,10 @@ public class BgpThriftService {
         ft = threadPool.submit(new BgpUpdateServer());
     }
 
+    public boolean isBgpThriftServiceStarted() {
+        return ((ft == null) ? false : true);
+    }
+
     public synchronized void stop() {
         if (server != null) {
             server.stop();
@@ -204,5 +210,6 @@ public class BgpThriftService {
         if (ft != null && !ft.isDone()) {
             ft.cancel(true);
         }
+        ft = null;
     }
 }