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.thrift.common.Constants;
9 import org.opendaylight.bgpmanager.thrift.gen.BgpUpdater;
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
13 public class BgpThriftService {
15 private static final Logger logger = LoggerFactory.getLogger(BgpThriftService.class);
18 //private int serverType;
19 private int maxWorkerThreads;
20 private int minWorkerThreads;
21 private TServerTransport serverTransport;
22 //private TNonblockingServerTransport serverTransport;
23 private TServer server;
24 private BgpUpdateHandler notificationHandler;
26 public BgpThriftService() {
32 logger.info("BGP Thrift Server starting.");
33 startBgpThriftServer();
37 logger.info("BGP Thrift Server stopping.");
38 stopBgpThriftServer();
42 * Destroy method called up after the bundle has been stopped
44 public void destroy() {
45 logger.debug("BGP Thrift Server destroy ");
49 * Loading the parameters required for a connection
52 private void loadParameters() {
53 port = Integer.getInteger(Constants.PROP_BGP_THRIFT_PORT, Constants.BGP_SERVICE_PORT);
54 maxWorkerThreads = Integer.getInteger(Constants.PROP_MAX_WORKER_THREADS,
55 Constants.DEFAULT_MAX_WORKER_THREADS);
56 minWorkerThreads = Integer.getInteger(Constants.PROP_MIN_WORKER_THREADS,
57 Constants.DEFAULT_MIN_WORKER_THREADS);
62 public void startBgpThriftServer() {
64 new Thread(new ThriftRunnable()).start();
67 public void stopBgpThriftServer() {
69 logger.debug("Server stopping");
71 if (serverTransport != null) {
72 serverTransport.close();
76 } catch (Exception e) {
77 logger.error("Error while stopping the server - {} {}", getClass().getName(), e.getMessage());
81 private class ThriftRunnable implements Runnable {
84 notificationHandler = new BgpUpdateHandler();
87 serverTransport = new TServerSocket(port);
88 //serverTransport = new TNonblockingServerSocket(port);
89 logger.info("Server Socket on Port {} ", port);
90 } catch (TTransportException e) {
94 /* This may need to change. Right now, its as good as a blocking server for each client (client would be
95 single - qbgp). We may want to change the server to TSimpleServer which queues up the notifications and
96 let worker threads process notifications based on rd.
98 server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport)
99 .maxWorkerThreads(maxWorkerThreads).minWorkerThreads(minWorkerThreads)
100 .processor(new BgpUpdater.Processor<BgpUpdateHandler>(notificationHandler)));
102 THsHaServer.Args args = new THsHaServer.Args(serverTransport);
103 args.workerThreads(10);
104 server = new THsHaServer(args.processor(new BgpUpdater.Processor<BgpUpdateHandler>(notificationHandler)));*/