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.
  • 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