package com.linkedin.databus.bootstrap.common;
/*
*
* Copyright 2013 LinkedIn Corp. All rights reserved
*
* 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.
*
*/
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.log4j.Logger;
import com.linkedin.databus.client.DatabusHttpClientImpl;
import com.linkedin.databus.client.DatabusHttpClientImpl.CheckpointPersistenceStaticConfig.ProviderType;
import com.linkedin.databus2.core.BackoffTimerStaticConfigBuilder;
import com.linkedin.databus2.core.container.netty.ServerContainer;
public class BootstrapConfigBase
{
public static final String MODULE = BootstrapConfig.class.getName();
public static final Logger LOG = Logger.getLogger(MODULE);
public static final String BOOTSTRAP_DB_PROPS_OPT_LONG_NAME = "bootstrap_db_props";
public static final char BOOTSTRAP_DB_PROP_OPT_CHAR = 'p';
public static final int DEFAULT_BOOTSTRAP_HTTP_PORT = 6060;
public static final String DEFAULT_BOOTSTRAP_DB_USERNAME = "bootstrap";
public static final String DEFAULT_BOOTSTRAP_DB_PASSWORD = "bootstrap";
public static final String DEFAULT_BOOTSTRAP_DB_HOSTNAME = "localhost";
public static final String DEFAULT_BOOTSTRAP_DB_NAME = "bootstrap";
public static final long DEFAULT_BOOTSTRAP_FETCH_SIZE = 1000;
public static final int DEFAULT_BOOTSTRAP_LOG_SIZE = 10000;
public static final boolean DEFAULT_BOOTSTRAP_DB_STATE_CHECK = false;
protected String _bootstrapDBUsername = DEFAULT_BOOTSTRAP_DB_USERNAME;
protected String _bootstrapDBPassword = DEFAULT_BOOTSTRAP_DB_PASSWORD;
protected String _bootstrapDBHostname = DEFAULT_BOOTSTRAP_DB_HOSTNAME;
protected String _bootstrapDBName = DEFAULT_BOOTSTRAP_DB_NAME;
protected long _bootstrapBatchSize = DEFAULT_BOOTSTRAP_FETCH_SIZE;
protected long _bootstrapSnapshotBatchSize = 0;
protected long _bootstrapCatchupBatchSize = 0;
protected int _bootstrapLogSize = DEFAULT_BOOTSTRAP_LOG_SIZE;
protected boolean _bootstrapDBStateCheck = DEFAULT_BOOTSTRAP_DB_STATE_CHECK;
protected DatabusHttpClientImpl.Config _client;
protected ServerContainer.Config _container;
protected BackoffTimerStaticConfigBuilder _retryTimer;
@SuppressWarnings("static-access")
public static Properties loadConfigProperties(String[] args) throws IOException
{
CommandLineParser cliParser = new GnuParser();
Option dbOption = OptionBuilder.withLongOpt(BOOTSTRAP_DB_PROPS_OPT_LONG_NAME)
.withDescription("Bootstrap producer properties to use")
.hasArg()
.withArgName("property_file")
.create(BOOTSTRAP_DB_PROP_OPT_CHAR);
Options options = new Options();
options.addOption(dbOption);
CommandLine cmd = null;
try
{
cmd = cliParser.parse(options, args);
}
catch (ParseException pe)
{
throw new RuntimeException("BootstrapConfig: failed to parse command-line options.", pe);
}
Properties props = null;
if (cmd.hasOption(BOOTSTRAP_DB_PROP_OPT_CHAR))
{
String propFile = cmd.getOptionValue(BOOTSTRAP_DB_PROP_OPT_CHAR);
LOG.info("Loading bootstrap DB config from properties file " + propFile);
props = new Properties();
FileInputStream f = new FileInputStream(propFile);
try
{
props.load(f);
} finally {
if ( null != f)
f.close();
}
}
else
{
LOG.info("Using system properties for bootstrap DB config");
}
return props;
}
public BootstrapConfigBase() throws IOException
{
super();
_client = new DatabusHttpClientImpl.Config();
_container = new ServerContainer.Config();
setBootstrapHttpPort(DEFAULT_BOOTSTRAP_HTTP_PORT);
_client.getCheckpointPersistence().setType(ProviderType.FILE_SYSTEM.toString());
_client.getCheckpointPersistence().getFileSystem().setRootDirectory("./bootstrap-checkpoints");
_retryTimer = new BackoffTimerStaticConfigBuilder();
}
public String getBootstrapDBUsername()
{
return _bootstrapDBUsername;
}
public void setBootstrapDBUsername(String dbUsername)
{
_bootstrapDBUsername = dbUsername;
}
public String getBootstrapDBName()
{
return _bootstrapDBName;
}
public void setBootstrapDBName(String dbName)
{
_bootstrapDBName = dbName;
}
public String getBootstrapDBPassword()
{
return _bootstrapDBPassword;
}
public String getBootstrapDBHostname()
{
return _bootstrapDBHostname;
}
/**
* The HTTP port of the bootstrap producer or server.
*
* This property is deprecated. Please use {@link #getContainer()}.getHttpPort().
*/
@Deprecated
public int getBootstrapHttpPort()
{
return _container.getHttpPort();
}
public long getBootstrapBatchSize()
{
return _bootstrapBatchSize;
}
/**
*
* @return bootstrapSnapshotBatchSize : defaults to bootstrapBatchSize if none defined
*/
public long getBootstrapSnapshotBatchSize()
{
return _bootstrapSnapshotBatchSize > 0 ? _bootstrapSnapshotBatchSize : _bootstrapBatchSize;
}
/**
*
* @return bootstrapCatchupBatchSize : defaults to bootstrapBatchSize if none defined
*/
public long getBootstrapCatchupBatchSize()
{
return _bootstrapCatchupBatchSize > 0 ? _bootstrapCatchupBatchSize : _bootstrapBatchSize;
}
public int getBootstrapLogSize()
{
return _bootstrapLogSize;
}
/**
* Changes the HTTP port of the bootstrap producer or server.
*
* This property is deprecated. Please use {@link #getContainer()}.setHttpPort(int).
*/
@Deprecated
public void setBootstrapHttpPort(int bootstrapHttpPort)
{
getContainer().setHttpPort(bootstrapHttpPort);
}
public void setBootstrapDBPassword(String bootstrapDBPassword)
{
_bootstrapDBPassword = bootstrapDBPassword;
}
public void setBootstrapDBHostname(String bootstrapDBHostname)
{
_bootstrapDBHostname = bootstrapDBHostname;
}
public void setBootstrapCatchupBatchSize(long bootstrapBatchSize)
{
_bootstrapCatchupBatchSize = bootstrapBatchSize;
}
public void setBootstrapSnapshotBatchSize(long bootstrapBatchSize)
{
_bootstrapSnapshotBatchSize = bootstrapBatchSize;
}
public void setBootstrapBatchSize(long bootstrapBatchSize)
{
_bootstrapBatchSize = bootstrapBatchSize;
}
public void setBootstrapLogSize(int bootstrapLogSize)
{
_bootstrapLogSize = bootstrapLogSize;
}
public void setBootstrapDBStateCheck(boolean bootstrapDBStateCheck)
{
this._bootstrapDBStateCheck = bootstrapDBStateCheck;
}
public boolean getBootstrapDBStateCheck()
{
return _bootstrapDBStateCheck;
}
public DatabusHttpClientImpl.Config getClient()
{
return _client;
}
public void setClient(DatabusHttpClientImpl.Config client)
{
_client = client;
}
public ServerContainer.Config getContainer()
{
return _container;
}
public void setContainer(ServerContainer.Config container)
{
_container = container;
}
public BackoffTimerStaticConfigBuilder getRetryTimer() {
return _retryTimer;
}
public void setRetryTimer(BackoffTimerStaticConfigBuilder retryTimer) {
this._retryTimer = retryTimer;
}
}