Class BasicContainer

  • All Implemented Interfaces:
    Killable

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

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

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

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