All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.twitter.heron.spi.common.Key Maven / Gradle / Ivy

//  Copyright 2017 Twitter. 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.
package com.twitter.heron.spi.common;

import com.twitter.heron.common.basics.ByteAmount;

/**
 * Enum of all configuration key values. The following methods exist:
 *
 * name() - return a string representation of the member name (e.g. HERON_HOME)
 * value() - return a key value bound to the enum (e.g. heron.directory.home)
 * getDefault() - return the default value bound to the enum
 * getType() - return the type of the key entry
 */
@SuppressWarnings({"checkstyle:MethodParamPad", "checkstyle:LineLength"})
public enum Key {

  //keys for heron environment
  HERON_HOME               ("heron.directory.home",      "/usr/local/heron"),
  HERON_BIN                ("heron.directory.bin",       "${HERON_HOME}/bin"),
  HERON_CONF               ("heron.directory.conf",      "${HERON_HOME}/conf"),
  HERON_LIB                ("heron.directory.lib",       "${HERON_HOME}/lib"),
  HERON_DIST               ("heron.directory.dist",      "${HERON_HOME}/dist"),
  HERON_ETC                ("heron.directory.etc",       "${HERON_HOME}/etc"),
  JAVA_HOME                ("heron.directory.java.home", "${JAVA_HOME}"),

  //keys for heron configuration files
  CLUSTER_YAML             ("heron.config.file.cluster.yaml",   "${HERON_CONF}/cluster.yaml"),
  CLIENT_YAML              ("heron.config.file.client.yaml",    "${HERON_CONF}/client.yaml"),
  HEALTHMGR_YAML           ("heron.config.file.healthmgr.yaml", "${HERON_CONF}/healthmgr.yaml"),
  METRICS_YAML             ("heron.config.file.metrics.yaml",   "${HERON_CONF}/metrics_sinks.yaml"),
  PACKING_YAML             ("heron.config.file.packing.yaml",   "${HERON_CONF}/packing.yaml"),
  SCHEDULER_YAML           ("heron.config.file.scheduler.yaml", "${HERON_CONF}/scheduler.yaml"),
  STATEMGR_YAML            ("heron.config.file.statemgr.yaml",  "${HERON_CONF}/statemgr.yaml"),
  SYSTEM_YAML              ("heron.config.file.system.yaml",    "${HERON_CONF}/heron_internals.yaml"),
  UPLOADER_YAML            ("heron.config.file.uploader.yaml",  "${HERON_CONF}/uploader.yaml"),
  STATEFUL_YAML            ("heron.config.file.stateful.yaml",  "${HERON_CONF}/stateful.yaml"),

  //keys for config provided in the command line
  CLUSTER                  ("heron.config.cluster",             Type.STRING),
  ROLE                     ("heron.config.role",                Type.STRING),
  ENVIRON                  ("heron.config.environ",             Type.STRING),
  SUBMIT_USER              ("heron.config.submit_user",         Type.STRING),
  DRY_RUN                  ("heron.config.dry_run",             Boolean.FALSE),
  DRY_RUN_FORMAT_TYPE      ("heron.config.dry_run_format_type", Type.DRY_RUN_FORMAT_TYPE),
  VERBOSE                  ("heron.config.verbose",             Boolean.FALSE),
  CONFIG_PROPERTY          ("heron.config.property",            Type.STRING),

  //keys for release/build information
  BUILD_VERSION            ("heron.build.version",   Type.STRING),
  BUILD_TIME               ("heron.build.time",      Type.STRING),
  BUILD_TIMESTAMP          ("heron.build.timestamp", Type.STRING),
  BUILD_HOST               ("heron.build.host",      Type.STRING),
  BUILD_USER               ("heron.build.user",      Type.STRING),

  //keys for config provided user classes
  UPLOADER_CLASS           ("heron.class.uploader",                        Type.STRING),
  LAUNCHER_CLASS           ("heron.class.launcher",                        Type.STRING),
  SCHEDULER_CLASS          ("heron.class.scheduler",                       Type.STRING),
  PACKING_CLASS            ("heron.class.packing.algorithm",               Type.STRING),
  REPACKING_CLASS          ("heron.class.repacking.algorithm",             Type.STRING),
  STATE_MANAGER_CLASS      ("heron.class.state.manager",                   Type.STRING),
  AURORA_CONTROLLER_CLASS  ("heron.class.scheduler.aurora.controller.cli", Boolean.TRUE),

  //keys for scheduler config
  SCHEDULER_IS_SERVICE     ("heron.scheduler.is.service", Boolean.TRUE),
  SCHEDULER_PROPERTIES     ("heron.scheduler.properties", Type.PROPERTIES),

  //keys for config provided user binaries and jars
  SCHEDULER_JAR            ("heron.jars.scheduler", "${HERON_LIB}/scheduler/heron-scheduler.jar"),

  //keys for config provided files and directories
  INTERNALS_CONFIG_FILE    ("heron.internals.config.file", Type.STRING),

  //keys for packages URIs
  CORE_PACKAGE_URI         ("heron.package.core.uri", "${HERON_DIST}/heron-core.tar.gz"),
  TOPOLOGY_PACKAGE_URI     ("heron.package.topology.uri", Type.STRING),

  //keys for topology
  TOPOLOGY_ID              ("heron.topology.id",              Type.STRING),
  TOPOLOGY_NAME            ("heron.topology.name",            Type.STRING),
  TOPOLOGY_DEFINITION_FILE ("heron.topology.definition.file", Type.STRING),
  TOPOLOGY_DEFINITION      ("heron.topology.definition",      Type.STRING),
  TOPOLOGY_BINARY_FILE     ("heron.topology.binary.file",     Type.STRING),
  TOPOLOGY_PACKAGE_FILE    ("heron.topology.package.file",    Type.STRING),
  TOPOLOGY_PACKAGE_TYPE    ("heron.topology.package.type",    Type.PACKAGE_TYPE),
  TOPOLOGY_CONTAINER_ID    ("heron.topology.container.id",    Type.STRING),

  //keys for proxy config during submission
  SCHEDULER_PROXY_CONNECTION_STRING("heron.proxy.connection.string", Type.STRING),
  SCHEDULER_PROXY_CONNECTION_TYPE  ("heron.proxy.connection.type",   Type.STRING),

  //keys for storing state"),
  STATEMGR_CONNECTION_STRING("heron.statemgr.connection.string", Type.STRING),
  STATEMGR_ROOT_PATH        ("heron.statemgr.root.path",         Type.STRING),

  //keys for config provided default values for resources
  STMGR_RAM                 ("heron.resources.stmgr.ram",     ByteAmount.fromBytes(1073741824)),
  INSTANCE_RAM              ("heron.resources.instance.ram",  ByteAmount.fromBytes(1073741824)),
  INSTANCE_CPU              ("heron.resources.instance.cpu",  1.0),
  INSTANCE_DISK             ("heron.resources.instance.disk", ByteAmount.fromBytes(1073741824)),

  //keys for checkpoint management
  STATEFUL_STORAGE_CLASSNAME               ("heron.statefulstorage.classname", Type.STRING),
  STATEFUL_STORAGE_CONF                    ("heron.statefulstorage.config", Type.MAP),
  STATEFUL_STORAGE_CUSTOM_CLASSPATH        ("heron.statefulstorage.custom.classpath", Type.STRING),

  // keys for health manager
  HEALTHMGR_MODE             ("heron.topology.healthmgr.mode", Type.STRING),

  //keys for config provided paths
  INSTANCE_CLASSPATH         ("heron.classpath.instance",             "${HERON_LIB}/instance/*"),
  HEALTHMGR_CLASSPATH        ("heron.classpath.healthmgr",            "${HERON_LIB}/healthmgr/*"),
  METRICSMGR_CLASSPATH       ("heron.classpath.metrics.manager",      "${HERON_LIB}/metricsmgr/*"),
  METRICSCACHEMGR_CLASSPATH  ("heron.classpath.metricscache.manager", "${HERON_LIB}/metricscachemgr/*"),
  PACKING_CLASSPATH          ("heron.classpath.packing",              "${HERON_LIB}/packing/*"),
  SCHEDULER_CLASSPATH        ("heron.classpath.scheduler",            "${HERON_LIB}/scheduler/*"),
  STATEMGR_CLASSPATH         ("heron.classpath.statemgr",             "${HERON_LIB}/statemgr/*"),
  UPLOADER_CLASSPATH         ("heron.classpath.uploader",             "${HERON_LIB}/uploader/*"),
  CKPTMGR_CLASSPATH          ("heron.classpath.ckptmgr",              "${HERON_LIB}/ckptmgr/*"),
  STATEFULSTORAGE_CLASSPATH  ("heron.classpath.statefulstorage",      "${HERON_LIB}/statefulstorage/*"),

  //keys for run time config
  TOPOLOGY_CLASSPATH             ("heron.runtime.topology.class.path",             Type.STRING),
  SCHEDULER_STATE_MANAGER_ADAPTOR("heron.runtime.scheduler.state.manager.adaptor", Type.STRING),
  SCHEDULER_SHUTDOWN             ("heron.runtime.scheduler.shutdown",              Type.STRING),
  PACKING_CLASS_INSTANCE         ("heron.runtime.packing.class.instance",          Type.STRING),
  LAUNCHER_CLASS_INSTANCE        ("heron.runtime.launcher.class.instance",         Type.STRING),
  COMPONENT_RAMMAP               ("heron.runtime.component.rammap",                Type.STRING),
  COMPONENT_JVM_OPTS_IN_BASE64   ("heron.runtime.component.jvm.opts.in.base64",    Type.STRING),
  INSTANCE_JVM_OPTS_IN_BASE64    ("heron.runtime.instance.jvm.opts.in.base64",     Type.STRING),
  NUM_CONTAINERS                 ("heron.runtime.num.containers",                  Type.INTEGER),

  //release info
  HERON_RELEASE_PACKAGE          ("heron.release.package",         Type.STRING),
  HERON_RELEASE_PACKAGE_ROLE     ("heron.release.package.role",    Type.STRING),
  HERON_RELEASE_PACKAGE_NAME     ("heron.release.package.name",    Type.STRING),
  HERON_RELEASE_PACKAGE_VERSION  ("heron.release.package.version", Type.STRING),
  HERON_UPLOADER_VERSION         ("heron.uploader.version",        Type.STRING),

  //keys for config provided paths
  HERON_CLUSTER_HOME     ("heron.directory.cluster.home",      "./heron-core"),
  HERON_CLUSTER_CONF     ("heron.directory.cluster.conf",      "./heron-conf"),
  // TODO: rename below to heron.directory.cluster.java.home, coordinate change with twitter configs
  HERON_CLUSTER_JAVA_HOME("heron.directory.sandbox.java.home", "/usr/lib/jvm/default-java"),

  //keys for heron configuration files on the cluster
  OVERRIDE_YAML("heron.config.file.override.yaml",  "${HERON_CONF}/override.yaml"),

  //keys for config provided user binaries
  EXECUTOR_BINARY       ("heron.binaries.executor",        "${HERON_BIN}/heron-executor"),
  STMGR_BINARY          ("heron.binaries.stmgr",           "${HERON_BIN}/heron-stmgr"),
  TMASTER_BINARY        ("heron.binaries.tmaster",         "${HERON_BIN}/heron-tmaster"),
  SHELL_BINARY          ("heron.binaries.shell",           "${HERON_BIN}/heron-shell"),
  PYTHON_INSTANCE_BINARY("heron.binaries.python.instance", "${HERON_BIN}/heron-python-instance"),
  DOWNLOADER_BINARY     ("heron.binaries.downloader",      "${HERON_BIN}/heron-downloader");


  private final String value;
  private final Object defaultValue;
  private final Type type;

  public enum Type {
    BOOLEAN,
    BYTE_AMOUNT,
    DOUBLE,
    DRY_RUN_FORMAT_TYPE,
    INTEGER,
    LONG,
    STRING,
    PACKAGE_TYPE,
    PROPERTIES,
    MAP,
    UNKNOWN
  }

  Key(String value, Type type) {
    this.value = value;
    this.type = type;
    this.defaultValue = null;
  }

  Key(String value, String defaultValue) {
    this.value = value;
    this.type = Type.STRING;
    this.defaultValue = defaultValue;
  }

  Key(String value, Double defaultValue) {
    this.value = value;
    this.type = Type.DOUBLE;
    this.defaultValue = defaultValue;
  }

  Key(String value, Boolean defaultValue) {
    this.value = value;
    this.type = Type.BOOLEAN;
    this.defaultValue = defaultValue;
  }

  Key(String value, ByteAmount defaultValue) {
    this.value = value;
    this.type = Type.BYTE_AMOUNT;
    this.defaultValue = defaultValue;
  }

  /**
   * Get the key value for this enum (i.e., heron.directory.home)
   * @return key value
   */
  public String value() {
    return value;
  }

  public Type getType() {
    return type;
  }

  /**
   * Return the default value
   */
  public Object getDefault() {
    return this.defaultValue;
  }

  public String getDefaultString() {
    if (type != Type.STRING) {
      throw new IllegalAccessError(String.format(
          "Config Key %s is type %s, getDefaultString() not supported", this.name(), this.type));
    }
    return (String) this.defaultValue;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy