1 package org.opendaylight.bgpmanager.thrift.server.implementation;
3 import org.apache.thrift.server.THsHaServer;
4 import org.apache.thrift.server.TServer;
5 import org.apache.thrift.server.TSimpleServer;
6 import org.apache.thrift.server.TThreadPoolServer;
7 import org.apache.thrift.transport.*;
8 import org.opendaylight.bgpmanager.BgpManager;
9 import org.opendaylight.bgpmanager.FibDSWriter;
10 import org.opendaylight.bgpmanager.thrift.common.Constants;
11 import org.opendaylight.bgpmanager.thrift.gen.BgpUpdater;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
15 public class BgpThriftService {
17 private static final Logger logger = LoggerFactory.getLogger(BgpThriftService.class);
20 //private int serverType;
21 private int maxWorkerThreads;
22 private int minWorkerThreads;
23 private TServerTransport serverTransport;
24 //private TNonblockingServerTransport serverTransport;
25 private TServer server;
26 private BgpUpdateHandler notificationHandler;
27 private BgpManager bgpManager;
29 public BgpThriftService(BgpManager bgpMgr, FibDSWriter dsWriter) {
31 notificationHandler = new BgpUpdateHandler(bgpManager, dsWriter);
32 //fibDSWriter = dsWriter;
37 logger.info("BGP Thrift Server starting.");
38 startBgpThriftServer();
42 logger.info("BGP Thrift Server stopping.");
43 stopBgpThriftServer();
47 * Destroy method called up after the bundle has been stopped
49 public void destroy() {
50 logger.debug("BGP Thrift Server destroy ");
54 * Loading the parameters required for a connection
57 private void loadParameters() {
58 port = Integer.getInteger(Constants.PROP_BGP_THRIFT_PORT, Constants.BGP_SERVICE_PORT);
59 maxWorkerThreads = Integer.getInteger(Constants.PROP_MAX_WORKER_THREADS,
60 Constants.DEFAULT_MAX_WORKER_THREADS);
61 minWorkerThreads = Integer.getInteger(Constants.PROP_MIN_WORKER_THREADS,
62 Constants.DEFAULT_MIN_WORKER_THREADS);
67 public void startBgpThriftServer() {
69 new Thread(new ThriftRunnable()).start();
72 public void stopBgpThriftServer() {
74 logger.debug("Server stopping");
76 if (serverTransport != null) {
77 serverTransport.close();
81 } catch (Exception e) {
82 logger.error("Error while stopping the server - {} {}", getClass().getName(), e.getMessage());
86 private class ThriftRunnable implements Runnable {
89 //notificationHandler = new BgpUpdateHandler(bgpManager);
92 serverTransport = new TServerSocket(port);
93 //serverTransport = new TNonblockingServerSocket(port);
94 logger.info("Server Socket on Port {} ", port);
95 } catch (TTransportException e) {
99 /* This may need to change. Right now, its as good as a blocking server for each client (client would be
100 single - qbgp). We may want to change the server to TSimpleServer which queues up the notifications and
101 let worker threads process notifications based on rd.
103 server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport)
104 .maxWorkerThreads(maxWorkerThreads).minWorkerThreads(minWorkerThreads)
105 .processor(new BgpUpdater.Processor<BgpUpdateHandler>(notificationHandler)));
107 THsHaServer.Args args = new THsHaServer.Args(serverTransport);
108 args.workerThreads(10);
109 server = new THsHaServer(args.processor(new BgpUpdater.Processor<BgpUpdateHandler>(notificationHandler)));*/