Search in sources :

Example 1 with LifecycleComponent

use of org.apache.bookkeeper.common.component.LifecycleComponent in project bookkeeper by apache.

the class Main method doMain.

static int doMain(String[] args) {
    ServerConfiguration conf;
    // 0. parse command line
    try {
        conf = parseCommandLine(args);
    } catch (IllegalArgumentException iae) {
        return ExitCode.INVALID_CONF;
    }
    // 1. building the component stack:
    LifecycleComponent server;
    try {
        server = buildBookieServer(new BookieConfiguration(conf));
    } catch (Exception e) {
        log.error("Failed to build bookie server", e);
        return ExitCode.SERVER_EXCEPTION;
    }
    // 2. start the server
    try {
        ComponentStarter.startComponent(server).get();
    } catch (InterruptedException ie) {
        Thread.currentThread().interrupt();
        // the server is interrupted
        log.info("Bookie server is interrupted. Exiting ...");
    } catch (ExecutionException ee) {
        log.error("Error in bookie shutdown", ee.getCause());
        return ExitCode.SERVER_EXCEPTION;
    }
    return ExitCode.OK;
}
Also used : ServerLifecycleComponent(org.apache.bookkeeper.server.component.ServerLifecycleComponent) LifecycleComponent(org.apache.bookkeeper.common.component.LifecycleComponent) ServerConfiguration(org.apache.bookkeeper.conf.ServerConfiguration) ExecutionException(java.util.concurrent.ExecutionException) BookieConfiguration(org.apache.bookkeeper.server.conf.BookieConfiguration) MalformedURLException(java.net.MalformedURLException) ExecutionException(java.util.concurrent.ExecutionException) ParseException(org.apache.commons.cli.ParseException) ConfigurationException(org.apache.commons.configuration.ConfigurationException)

Example 2 with LifecycleComponent

use of org.apache.bookkeeper.common.component.LifecycleComponent in project bookkeeper by apache.

the class StreamCluster method startServer.

private LifecycleComponent startServer() throws Exception {
    int bookiePort;
    int grpcPort;
    boolean success = false;
    int retries = 0;
    while (!success) {
        synchronized (this) {
            bookiePort = nextBookiePort++;
            grpcPort = nextGrpcPort++;
        }
        LifecycleComponent server = null;
        try {
            ServerConfiguration serverConf = new ServerConfiguration();
            serverConf.loadConf(baseConf);
            serverConf.setBookiePort(bookiePort);
            File bkDir = new File(spec.storageRootDir(), "bookie_" + bookiePort);
            serverConf.setJournalDirName(bkDir.getPath());
            serverConf.setLedgerDirNames(new String[] { bkDir.getPath() });
            DistributedLogConfiguration dlConf = new DistributedLogConfiguration();
            dlConf.loadConf(serverConf);
            File rangesStoreDir = new File(spec.storageRootDir(), "ranges_" + grpcPort);
            StorageConfiguration storageConf = new StorageConfiguration(serverConf);
            storageConf.setRangeStoreDirNames(new String[] { rangesStoreDir.getPath() });
            storageConf.setServeReadOnlyTables(spec.serveReadOnlyTable);
            log.info("Attempting to start storage server at (bookie port = {}, grpc port = {})" + " : bkDir = {}, rangesStoreDir = {}, serveReadOnlyTables = {}", bookiePort, grpcPort, bkDir, rangesStoreDir, spec.serveReadOnlyTable);
            server = StorageServer.startStorageServer(serverConf, grpcPort, spec.numServers() * 2, Optional.empty());
            server.start();
            log.info("Started storage server at (bookie port = {}, grpc port = {})", bookiePort, grpcPort);
            this.rpcEndpoints.add(StorageServer.createLocalEndpoint(grpcPort, false));
            return server;
        } catch (Throwable e) {
            log.error("Failed to start storage server", e);
            if (null != server) {
                server.stop();
            }
            if (e.getCause() instanceof BindException) {
                retries++;
                if (retries > MAX_RETRIES) {
                    throw (BindException) e.getCause();
                }
            } else {
                throw e;
            }
        }
    }
    throw new IOException("Failed to start any storage server.");
}
Also used : DistributedLogConfiguration(org.apache.distributedlog.DistributedLogConfiguration) LifecycleComponent(org.apache.bookkeeper.common.component.LifecycleComponent) AbstractLifecycleComponent(org.apache.bookkeeper.common.component.AbstractLifecycleComponent) ServerConfiguration(org.apache.bookkeeper.conf.ServerConfiguration) StorageConfiguration(org.apache.bookkeeper.stream.storage.conf.StorageConfiguration) BindException(java.net.BindException) IOException(java.io.IOException) File(java.io.File) Endpoint(org.apache.bookkeeper.stream.proto.common.Endpoint)

Example 3 with LifecycleComponent

use of org.apache.bookkeeper.common.component.LifecycleComponent in project bookkeeper by apache.

the class StorageServer method startStorageServer.

public static LifecycleComponent startStorageServer(CompositeConfiguration conf, int grpcPort, int numStorageContainers, Optional<String> instanceName) throws ConfigurationException, UnknownHostException {
    BookieConfiguration bkConf = BookieConfiguration.of(conf);
    bkConf.validate();
    DLConfiguration dlConf = DLConfiguration.of(conf);
    dlConf.validate();
    StorageServerConfiguration serverConf = StorageServerConfiguration.of(conf);
    serverConf.validate();
    StorageConfiguration storageConf = new StorageConfiguration(conf);
    storageConf.validate();
    // Get my local endpoint
    Endpoint myEndpoint = createLocalEndpoint(grpcPort, false);
    // Create shared resources
    StorageResources storageResources = StorageResources.create();
    // Create the stats provider
    StatsProviderService statsProviderService = new StatsProviderService(bkConf);
    StatsLogger rootStatsLogger = statsProviderService.getStatsProvider().getStatsLogger("");
    // Create the bookie service
    BookieService bookieService = new BookieService(bkConf, rootStatsLogger);
    // Create the distributedlog namespace service
    DLNamespaceProviderService dlNamespaceProvider = new DLNamespaceProviderService(bookieService.serverConf(), dlConf, rootStatsLogger.scope("dl"));
    // Create range (stream) store
    RangeStoreBuilder rangeStoreBuilder = RangeStoreBuilder.newBuilder().withStatsLogger(rootStatsLogger.scope("storage")).withStorageConfiguration(storageConf).withStorageResources(storageResources).withNumStorageContainers(numStorageContainers).withDefaultBackendUri(dlNamespaceProvider.getDlogUri()).withStorageContainerManagerFactory((ignored, storeConf, registry) -> new HelixStorageContainerManager(bookieService.serverConf().getZkServers(), "stream/helix", storeConf, registry, myEndpoint, instanceName, rootStatsLogger.scope("helix"))).withRangeStoreFactory(new MVCCStoreFactoryImpl(dlNamespaceProvider, storageConf.getRangeStoreDirs(), storageResources, storageConf.getServeReadOnlyTables()));
    StorageService storageService = new StorageService(storageConf, rangeStoreBuilder, rootStatsLogger.scope("storage"));
    // Create gRPC server
    StatsLogger rpcStatsLogger = rootStatsLogger.scope("grpc");
    GrpcServerSpec serverSpec = GrpcServerSpec.builder().storeSupplier(storageService).storeServerConf(serverConf).endpoint(myEndpoint).statsLogger(rpcStatsLogger).build();
    GrpcService grpcService = new GrpcService(serverConf, serverSpec, rpcStatsLogger);
    // Create all the service stack
    return LifecycleComponentStack.newBuilder().withName("storage-server").addComponent(// stats provider
    statsProviderService).addComponent(// bookie server
    bookieService).addComponent(// service that provides dl namespace
    dlNamespaceProvider).addComponent(// range (stream) store
    storageService).addComponent(// range (stream) server (gRPC)
    grpcService).build();
}
Also used : ComponentStarter(org.apache.bookkeeper.common.component.ComponentStarter) Configuration(org.apache.commons.configuration.Configuration) DLNamespaceProviderService(org.apache.bookkeeper.stream.server.service.DLNamespaceProviderService) Parameter(com.beust.jcommander.Parameter) CompletableFuture(java.util.concurrent.CompletableFuture) CompositeConfiguration(org.apache.commons.configuration.CompositeConfiguration) InetAddress(java.net.InetAddress) GrpcServerSpec(org.apache.bookkeeper.stream.server.grpc.GrpcServerSpec) LifecycleComponentStack(org.apache.bookkeeper.common.component.LifecycleComponentStack) StorageServerConfiguration(org.apache.bookkeeper.stream.server.conf.StorageServerConfiguration) RangeStoreBuilder(org.apache.bookkeeper.stream.storage.RangeStoreBuilder) HelixStorageContainerManager(org.apache.bookkeeper.stream.storage.impl.sc.helix.HelixStorageContainerManager) PropertiesConfiguration(org.apache.commons.configuration.PropertiesConfiguration) StatsProviderService(org.apache.bookkeeper.stream.server.service.StatsProviderService) LifecycleComponent(org.apache.bookkeeper.common.component.LifecycleComponent) MalformedURLException(java.net.MalformedURLException) JCommander(com.beust.jcommander.JCommander) StorageResources(org.apache.bookkeeper.stream.storage.StorageResources) StorageService(org.apache.bookkeeper.stream.server.service.StorageService) BookieService(org.apache.bookkeeper.stream.server.service.BookieService) UnknownHostException(java.net.UnknownHostException) File(java.io.File) ExecutionException(java.util.concurrent.ExecutionException) BookieConfiguration(org.apache.bookkeeper.stream.server.conf.BookieConfiguration) Slf4j(lombok.extern.slf4j.Slf4j) Endpoint(org.apache.bookkeeper.stream.proto.common.Endpoint) StorageConfiguration(org.apache.bookkeeper.stream.storage.conf.StorageConfiguration) DLConfiguration(org.apache.bookkeeper.stream.server.conf.DLConfiguration) GrpcService(org.apache.bookkeeper.stream.server.service.GrpcService) StatsLogger(org.apache.bookkeeper.stats.StatsLogger) MVCCStoreFactoryImpl(org.apache.bookkeeper.stream.storage.impl.store.MVCCStoreFactoryImpl) Optional(java.util.Optional) ConfigurationException(org.apache.commons.configuration.ConfigurationException) StatsLogger(org.apache.bookkeeper.stats.StatsLogger) StorageConfiguration(org.apache.bookkeeper.stream.storage.conf.StorageConfiguration) StorageResources(org.apache.bookkeeper.stream.storage.StorageResources) HelixStorageContainerManager(org.apache.bookkeeper.stream.storage.impl.sc.helix.HelixStorageContainerManager) BookieConfiguration(org.apache.bookkeeper.stream.server.conf.BookieConfiguration) StorageService(org.apache.bookkeeper.stream.server.service.StorageService) MVCCStoreFactoryImpl(org.apache.bookkeeper.stream.storage.impl.store.MVCCStoreFactoryImpl) Endpoint(org.apache.bookkeeper.stream.proto.common.Endpoint) GrpcService(org.apache.bookkeeper.stream.server.service.GrpcService) DLNamespaceProviderService(org.apache.bookkeeper.stream.server.service.DLNamespaceProviderService) RangeStoreBuilder(org.apache.bookkeeper.stream.storage.RangeStoreBuilder) StorageServerConfiguration(org.apache.bookkeeper.stream.server.conf.StorageServerConfiguration) DLConfiguration(org.apache.bookkeeper.stream.server.conf.DLConfiguration) StatsProviderService(org.apache.bookkeeper.stream.server.service.StatsProviderService) GrpcServerSpec(org.apache.bookkeeper.stream.server.grpc.GrpcServerSpec) BookieService(org.apache.bookkeeper.stream.server.service.BookieService)

Example 4 with LifecycleComponent

use of org.apache.bookkeeper.common.component.LifecycleComponent in project bookkeeper by apache.

the class StreamCluster method startServers.

private void startServers() throws Exception {
    log.info("Starting {} storage servers.", spec.numServers());
    ExecutorService executor = Executors.newCachedThreadPool();
    List<Future<LifecycleComponent>> startFutures = Lists.newArrayList();
    for (int i = 0; i < spec.numServers(); i++) {
        Future<LifecycleComponent> future = executor.submit(() -> startServer());
        startFutures.add(future);
    }
    for (Future<LifecycleComponent> future : startFutures) {
        servers.add(future.get());
    }
    log.info("Started {} storage servers.", spec.numServers());
    executor.shutdown();
}
Also used : LifecycleComponent(org.apache.bookkeeper.common.component.LifecycleComponent) AbstractLifecycleComponent(org.apache.bookkeeper.common.component.AbstractLifecycleComponent) ExecutorService(java.util.concurrent.ExecutorService) Future(java.util.concurrent.Future) Endpoint(org.apache.bookkeeper.stream.proto.common.Endpoint)

Example 5 with LifecycleComponent

use of org.apache.bookkeeper.common.component.LifecycleComponent in project bookkeeper by apache.

the class StorageServer method doMain.

static int doMain(String[] args) {
    // register thread uncaught exception handler
    Thread.setDefaultUncaughtExceptionHandler((thread, exception) -> log.error("Uncaught exception in thread {}: {}", thread.getName(), exception.getMessage()));
    // parse the commandline
    ServerArguments arguments = new ServerArguments();
    JCommander jCommander = new JCommander(arguments);
    jCommander.setProgramName("StorageServer");
    jCommander.parse(args);
    if (arguments.help) {
        jCommander.usage();
        return ExitCode.INVALID_CONF.code();
    }
    CompositeConfiguration conf = new CompositeConfiguration();
    if (null != arguments.serverConfigFile) {
        loadConfFile(conf, arguments.serverConfigFile);
    }
    int grpcPort = arguments.port;
    LifecycleComponent storageServer;
    try {
        storageServer = startStorageServer(conf, grpcPort, 1024, Optional.empty());
    } catch (ConfigurationException e) {
        log.error("Invalid storage configuration", e);
        return ExitCode.INVALID_CONF.code();
    } catch (UnknownHostException e) {
        log.error("Unknonw host name", e);
        return ExitCode.UNKNOWN_HOSTNAME.code();
    }
    CompletableFuture<Void> liveFuture = ComponentStarter.startComponent(storageServer);
    try {
        liveFuture.get();
    } catch (InterruptedException e) {
        // the server is interrupted.
        Thread.currentThread().interrupt();
        log.info("Storage server is interrupted. Exiting ...");
    } catch (ExecutionException e) {
        log.info("Storage server is exiting ...");
    }
    return ExitCode.OK.code();
}
Also used : UnknownHostException(java.net.UnknownHostException) LifecycleComponent(org.apache.bookkeeper.common.component.LifecycleComponent) ConfigurationException(org.apache.commons.configuration.ConfigurationException) JCommander(com.beust.jcommander.JCommander) CompositeConfiguration(org.apache.commons.configuration.CompositeConfiguration) ExecutionException(java.util.concurrent.ExecutionException) Endpoint(org.apache.bookkeeper.stream.proto.common.Endpoint)

Aggregations

LifecycleComponent (org.apache.bookkeeper.common.component.LifecycleComponent)5 Endpoint (org.apache.bookkeeper.stream.proto.common.Endpoint)4 ExecutionException (java.util.concurrent.ExecutionException)3 ConfigurationException (org.apache.commons.configuration.ConfigurationException)3 JCommander (com.beust.jcommander.JCommander)2 File (java.io.File)2 MalformedURLException (java.net.MalformedURLException)2 UnknownHostException (java.net.UnknownHostException)2 AbstractLifecycleComponent (org.apache.bookkeeper.common.component.AbstractLifecycleComponent)2 ServerConfiguration (org.apache.bookkeeper.conf.ServerConfiguration)2 StorageConfiguration (org.apache.bookkeeper.stream.storage.conf.StorageConfiguration)2 CompositeConfiguration (org.apache.commons.configuration.CompositeConfiguration)2 Parameter (com.beust.jcommander.Parameter)1 IOException (java.io.IOException)1 BindException (java.net.BindException)1 InetAddress (java.net.InetAddress)1 Optional (java.util.Optional)1 CompletableFuture (java.util.concurrent.CompletableFuture)1 ExecutorService (java.util.concurrent.ExecutorService)1 Future (java.util.concurrent.Future)1