/*
* Copyright 2014 University of Southern California
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package edu.usc.pgroup.floe.coordinator;
import edu.usc.pgroup.floe.config.ConfigProperties;
import edu.usc.pgroup.floe.config.FloeConfig;
import edu.usc.pgroup.floe.thriftgen.TCoordinator;
import org.apache.commons.configuration.Configuration;
import org.apache.thrift.TProcessor;
import org.apache.thrift.server.THsHaServer;
import org.apache.thrift.server.TServer;
import org.apache.thrift.transport.TNonblockingServerSocket;
import org.apache.thrift.transport.TNonblockingServerTransport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Alok Kumbhare
*/
public final class CoordinatorService {
/**
* the global logger instance.
*/
private static final Logger LOGGER =
LoggerFactory.getLogger(CoordinatorService.class);
/**
* Hiding default constructor.
*/
private CoordinatorService() {
}
/**
* Main function.
*
* @param args commandline arguments.
*/
public static void main(final String[] args) {
initializeCoordinator();
startThriftServer();
}
/**
* Initializes the Coordinator which will handle all internal coordination
* and monitoring tasks.
* CoordinatorHandler on the other hand is responsible for receiving user
* commands from the client.
*/
private static void initializeCoordinator() {
LOGGER.info("Initializing coordinator");
Coordinator.getInstance(); //This will initialize the coordinator.
}
/**
* starts the server.
*/
private static void startThriftServer() {
//Start the server
LOGGER.info("Starting thrift server.");
try {
Configuration config = FloeConfig.getConfig();
//Transport
int port = config.getInt(ConfigProperties.COORDINATOR_PORT);
LOGGER.info("Listening on port: " + port);
TNonblockingServerTransport serverSocket =
new TNonblockingServerSocket(port);
//Processor
TProcessor processor =
new TCoordinator.Processor(new CoordinatorHandler());
//Arguments
THsHaServer.Args args = new THsHaServer.Args(serverSocket);
args.workerThreads(config.getInt(
ConfigProperties.COORDINATOR_SERVICE_THREAD_COUNT));
args.processor(processor);
//Server
TServer server = new THsHaServer(args);
//Serve
server.serve();
} catch (Exception e) {
LOGGER.error("Exception: " + e.getMessage());
e.printStackTrace();
}
}
}