Class BasicContainer

All Implemented Interfaces:

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

    • getDependencyLocationsFor

      public static List<String> getDependencyLocationsFor(Map<String,Object> conf, String topologyId, AdvancedFSOps ops, String stormRoot) throws IOException
    • getStormVersionFor

      public static String getStormVersionFor(Map<String,Object> conf, String topologyId, AdvancedFSOps ops, String stormRoot) 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
      cleanUpForRestart in class Container
      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
      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
      request - the request to run
      stop - is this a stop request?
      true if it succeeded, else false
      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.
      stormRoot - the root directory of the worker process
      conf - the config for the supervisor.
      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.
      dir - the directory to which a wildcard will be appended
      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.
      stormJar - the topology jar
      dependencyLocations - any dependencies from the topology
      topoVersion - the version of the storm framework to use
      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.
      isMemoryLimitViolated in class Container
      IOException - on any error
    • getMemoryUsageMb

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

      public long getMemoryReservationMb()
      Description copied from class: Container
      Get the current memory reservation of this container.
      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
      IOException - on any error