Package org.apache.storm.daemon.supervisor

# Class BasicContainer

java.lang.Object
org.apache.storm.daemon.supervisor.Container
org.apache.storm.daemon.supervisor.BasicContainer

All Implemented Interfaces:
  `Killable`

public class BasicContainer extends Container
A container that runs processes on the local box.

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from class org.apache.storm.daemon.supervisor.Container

  `Container.ContainerType`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected boolean`
  `exitedEarly`
  `protected final double`
  `hardMemoryLimitMultiplier`
  `protected final long`
  `hardMemoryLimitOver`
  `protected final LocalState`
  `localState`
  `protected final long`
  `lowMemoryThresholdMb`
  `protected final long`
  `mediumMemoryGracePeriodMs`
  `protected final long`
  `mediumMemoryThresholdMb`
  `protected long`
  `memoryLimitExceededStart`
  `protected long`
  `memoryLimitMb`
  `protected final String`
  `profileCmd`
  `protected final String`
  `stormHome`

  ### Fields inherited from class org.apache.storm.daemon.supervisor.Container

  `assignment, conf, containerMemoryTracker, ops, port, resourceIsolationManager, runAsUser, supervisorId, supervisorPort, symlinksDisabled, topoConf, topologyId, type, workerId`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `BasicContainer(Container.ContainerType type, Map<String,Object> conf, String supervisorId, int supervisorPort, int port, LocalAssignment assignment, ResourceIsolationInterface resourceIsolationManager, LocalState localState, String workerId, StormMetricsRegistry metricsRegistry, ContainerMemoryTracker containerMemoryTracker)`
  Create a new BasicContainer.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `cleanUpForRestart()`
  Clean up the container partly preparing for restart.
  `protected void`
  `createNewWorkerId()`
  Create a new worker ID for this process and store in in this object and in the local state.
  `boolean`
  `didMainProcessExit()`
  Return true if the main process exited, else false.
  `protected List<String>`
  `frameworkClasspath(SimpleVersion topoVersion)`
  `static List<String>`
  `getDependencyLocationsFor(Map<String,Object> conf, String topologyId, AdvancedFSOps ops, String stormRoot)`
  `long`
  `getMemoryReservationMb()`
  Get the current memory reservation of this container.
  `long`
  `getMemoryUsageMb()`
  Get the current memory usage of this container.
  `static String`
  `getStormVersionFor(Map<String,Object> conf, String topologyId, AdvancedFSOps ops, String stormRoot)`
  `protected String`
  `getWildcardDir(File dir)`
  Returns a path with a wildcard as the final element, so that the JVM will expand that to all JARs in the directory.
  `protected String`
  `getWorkerClassPath(String stormJar, List<String> dependencyLocations, SimpleVersion topoVersion)`
  Compute the classpath for the worker process.
  `protected String`
  `getWorkerLogWriter(SimpleVersion topoVersion)`
  `protected String`
  `getWorkerMain(SimpleVersion topoVersion)`
  `boolean`
  `isMemoryLimitViolated(LocalAssignment withUpdatedLimits)`
  Check if the container is over its memory limit AND needs to be killed.
  `protected String`
  `javaCmd(String cmd)`
  `protected String`
  `javaLibraryPath(String stormRoot, Map<String,Object> conf)`
  Compute the java.library.path that should be used for the worker.
  `void`
  `launch()`
  Launch the process for the first time.
  `void`
  `relaunch()`
  Restart the processes in this container.
  `boolean`
  `runProfiling(ProfileRequest request, boolean stop)`
  Run a profiling request.
  `protected List<String>`
  `substituteChildopts(Object value)`
  `protected List<String>`
  `substituteChildopts(Object value, int memOnheap, int memOffHeap)`

  ### Methods inherited from class org.apache.storm.daemon.supervisor.Container

  `areAllProcessesDead, cleanUp, createArtifactsLink, createBlobstoreLinks, deleteSavedWorkerUser, forceKill, getTotalTopologyMemoryReserved, getTotalTopologyMemoryUsed, getTotalWorkersForThisTopology, getWorkerId, getWorkerUser, kill, readHeartbeat, readTopoConf, saveWorkerUser, setup, toString, updateMemoryAccounting, writeLogMetadata`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- ## Field Details

  - ### localState

    protected final LocalState localState

  - ### profileCmd

    protected final String profileCmd

  - ### stormHome

    protected final String stormHome

  - ### hardMemoryLimitMultiplier

    protected final double hardMemoryLimitMultiplier

  - ### hardMemoryLimitOver

    protected final long hardMemoryLimitOver

  - ### lowMemoryThresholdMb

    protected final long lowMemoryThresholdMb

  - ### mediumMemoryThresholdMb

    protected final long mediumMemoryThresholdMb

  - ### mediumMemoryGracePeriodMs

    protected final long mediumMemoryGracePeriodMs

  - ### exitedEarly

    protected volatile boolean exitedEarly

  - ### memoryLimitMb

    protected volatile long memoryLimitMb

  - ### memoryLimitExceededStart

    protected volatile long memoryLimitExceededStart

- ## Constructor Details

  - ### BasicContainer

    public BasicContainer(Container.ContainerType type, Map<String,Object> conf, String supervisorId, int supervisorPort, int port, LocalAssignment assignment, ResourceIsolationInterface resourceIsolationManager, LocalState localState, String workerId, StormMetricsRegistry metricsRegistry, ContainerMemoryTracker containerMemoryTracker) throws IOException
    Create a new BasicContainer.
    Parameters:
      `type` - the type of container being made.
      `conf` - the supervisor config
      `supervisorId` - the ID of the supervisor this is a part of.
      `supervisorPort` - the thrift server port of the supervisor this is a part of.
      `port` - the port the container is on. Should be <= 0 if only a partial recovery
      `assignment` - the assignment for this container. Should be null if only a partial recovery.
      `resourceIsolationManager` - used to isolate resources for a container can be null if no isolation is used.
      `localState` - the local state of the supervisor. May be null if partial recovery
      `workerId` - the id of the worker to use. Must not be null if doing a partial recovery.
      `metricsRegistry` - The metrics registry.
      `containerMemoryTracker` - The shared memory tracker for the supervisor's containers
    Throws:
      `IOException`

- ## Method Details

  - ### getDependencyLocationsFor

    public static List<String> getDependencyLocationsFor(Map<String,Object> conf, String topologyId, AdvancedFSOps ops, String stormRoot) throws IOException
    Throws:
      `IOException`

  - ### getStormVersionFor

    public static String getStormVersionFor(Map<String,Object> conf, String topologyId, AdvancedFSOps ops, String stormRoot) throws IOException
    Throws:
      `IOException`

  - ### createNewWorkerId

    protected void createNewWorkerId()
    Create a new worker ID for this process and store in in this object and in the local state. Never call this if a worker is currently up and running. We will lose track of the process.

  - ### cleanUpForRestart

    public void cleanUpForRestart() throws IOException
    Description copied from class: `Container`
    Clean up the container partly preparing for restart. By default delete all of the temp directories we are going to get a new worker_id anyways. POST CONDITION: the workerId will be set to null
    Overrides:
      `cleanUpForRestart` in class `Container`
    Throws:
      `IOException` - on any error

  - ### relaunch

    public void relaunch() throws IOException
    Description copied from class: `Container`
    Restart the processes in this container. PREREQUISITE: cleanUpForRestart has run and passed
    Specified by:
      `relaunch` in class `Container`
    Throws:
      `IOException` - on any error

  - ### didMainProcessExit

    public boolean didMainProcessExit()
    Description copied from class: `Container`
    Return true if the main process exited, else false. This is just best effort return false if unknown.
    Specified by:
      `didMainProcessExit` in class `Container`

  - ### runProfiling

    public boolean runProfiling(ProfileRequest request, boolean stop) throws IOException, InterruptedException
    Description copied from class: `Container`
    Run a profiling request.
    Specified by:
      `runProfiling` in class `Container`
    Parameters:
      `request` - the request to run
      `stop` - is this a stop request?
    Returns:
      true if it succeeded, else false
    Throws:
      `IOException` - on any error
      `InterruptedException` - if running the command is interrupted.

  - ### javaLibraryPath

    protected String javaLibraryPath(String stormRoot, Map<String,Object> conf)
    Compute the java.library.path that should be used for the worker. This helps it to load JNI libraries that are packaged in the uber jar.
    Parameters:
      `stormRoot` - the root directory of the worker process
      `conf` - the config for the supervisor.
    Returns:
      the java.library.path/LD_LIBRARY_PATH to use so native libraries load correctly.

  - ### getWildcardDir

    protected String getWildcardDir(File dir)
    Returns a path with a wildcard as the final element, so that the JVM will expand that to all JARs in the directory.
    Parameters:
      `dir` - the directory to which a wildcard will be appended
    Returns:
      the path with wildcard ("*") suffix

  - ### frameworkClasspath

    protected List<String> frameworkClasspath(SimpleVersion topoVersion)

  - ### getWorkerMain

    protected String getWorkerMain(SimpleVersion topoVersion)

  - ### getWorkerLogWriter

    protected String getWorkerLogWriter(SimpleVersion topoVersion)

  - ### getWorkerClassPath

    protected String getWorkerClassPath(String stormJar, List<String> dependencyLocations, SimpleVersion topoVersion)
    Compute the classpath for the worker process.
    Parameters:
      `stormJar` - the topology jar
      `dependencyLocations` - any dependencies from the topology
      `topoVersion` - the version of the storm framework to use
    Returns:
      the full classpath

  - ### substituteChildopts

    protected List<String> substituteChildopts(Object value)

  - ### substituteChildopts

    protected List<String> substituteChildopts(Object value, int memOnheap, int memOffHeap)

  - ### javaCmd

    protected String javaCmd(String cmd)

  - ### isMemoryLimitViolated

    public boolean isMemoryLimitViolated(LocalAssignment withUpdatedLimits) throws IOException
    Description copied from class: `Container`
    Check if the container is over its memory limit AND needs to be killed. This does not necessarily mean that it just went over the limit.
    Overrides:
      `isMemoryLimitViolated` in class `Container`
    Throws:
      `IOException` - on any error

  - ### getMemoryUsageMb

    public long getMemoryUsageMb()
    Description copied from class: `Container`
    Get the current memory usage of this container.
    Overrides:
      `getMemoryUsageMb` in class `Container`

  - ### getMemoryReservationMb

    public long getMemoryReservationMb()
    Description copied from class: `Container`
    Get the current memory reservation of this container.
    Overrides:
      `getMemoryReservationMb` in class `Container`

  - ### launch

    public void launch() throws IOException
    Description copied from class: `Container`
    Launch the process for the first time. PREREQUISITE: setup has run and passed
    Specified by:
      `launch` in class `Container`
    Throws:
      `IOException` - on any error