Class Container
java.lang.Object
org.apache.storm.daemon.supervisor.Container
- All Implemented Interfaces:
Killable
- Direct Known Subclasses:
BasicContainer,LocalContainer
Represents a container that a worker will run in.
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final LocalAssignmentprotected ContainerMemoryTrackerprotected final AdvancedFSOpsprotected final intprotected final ResourceIsolationInterfaceprotected booleanprotected final Stringprotected final intprotected final booleanprotected final Stringprotected Container.ContainerTypeprotected String -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedContainer(Container.ContainerType type, Map<String, Object> conf, String supervisorId, int supervisorPort, int port, LocalAssignment assignment, ResourceIsolationInterface resourceIsolationManager, String workerId, Map<String, Object> topoConf, AdvancedFSOps ops, StormMetricsRegistry metricsRegistry, ContainerMemoryTracker containerMemoryTracker) Create a new Container. -
Method Summary
Modifier and TypeMethodDescriptionbooleanCheck whether all processes are dead.voidcleanUp()Clean up the container.voidClean up the container partly preparing for restart.protected voidCreate symlink from the containers directory/artifacts to the artifacts directory.protected voidCreate symlinks for each of the blobs from the container's directory to corresponding links in the storm dist directory.protected voidabstract booleanReturn true if the main process exited, else false.voidKill the processes in this container violently.longGet the current memory reservation of this container.longGet the current memory usage of this container.longgetTotalTopologyMemoryReserved(LocalAssignment withUpdatedLimits) Get the total memory reserved.longGet the total memory used (on and off heap).longGet the number of workers for this topology.Get the id of the container or null if there is no worker id right now.protected StringGet the user of the worker.booleanisMemoryLimitViolated(LocalAssignment withUpdatedLimits) Check if the container is over its memory limit AND needs to be killed.voidkill()Kill the processes in this container nicely.abstract voidlaunch()Launch the process for the first time.Read the Heartbeat for the current container.abstract voidrelaunch()Restart the processes in this container.abstract booleanrunProfiling(ProfileRequest request, boolean stop) Run a profiling request.protected voidsaveWorkerUser(String user) protected voidsetup()Setup the container to run.toString()protected voidprotected voidwriteLogMetadata(String user) Write out the file used by the log viewer to allow/reject log access.
-
Field Details
-
conf
-
topoConf
-
topologyId
-
supervisorId
-
supervisorPort
protected final int supervisorPort -
port
protected final int port -
assignment
-
ops
-
resourceIsolationManager
-
symlinksDisabled
protected final boolean symlinksDisabled -
workerId
-
type
-
containerMemoryTracker
-
runAsUser
protected boolean runAsUser
-
-
Constructor Details
-
Container
protected Container(Container.ContainerType type, Map<String, Object> conf, String supervisorId, int supervisorPort, int port, LocalAssignment assignment, ResourceIsolationInterface resourceIsolationManager, String workerId, Map<String, throws IOExceptionObject> topoConf, AdvancedFSOps ops, StormMetricsRegistry metricsRegistry, ContainerMemoryTracker containerMemoryTracker) Create a new Container.- Parameters:
type- the type of container being made.conf- the supervisor configsupervisorId- 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 @param 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.workerId- the id of the worker to use. Must not be null if doing a partial recovery.topoConf- the config of the topology (mostly for testing) if null and not a partial recovery the real conf is read.ops- file system operations (mostly for testing) if null a new one is mademetricsRegistry- The metrics registry.containerMemoryTracker- The shared memory tracker for the supervisor's containers- Throws:
IOException- on any error.
-
-
Method Details
-
toString
-
readTopoConf
- Throws:
IOException
-
kill
Description copied from interface:KillableKill the processes in this container nicely. kill -15 equivalent- Specified by:
killin interfaceKillable- Throws:
IOException- on any error
-
forceKill
Description copied from interface:KillableKill the processes in this container violently. kill -9 equivalent- Specified by:
forceKillin interfaceKillable- Throws:
IOException- on any error
-
readHeartbeat
Read the Heartbeat for the current container.- Returns:
- the Heartbeat
- Throws:
IOException- on any error
-
areAllProcessesDead
Description copied from interface:KillableCheck whether all processes are dead.- Specified by:
areAllProcessesDeadin interfaceKillable- Returns:
- true if all of the processes are dead, else false
- Throws:
IOException- on any error
-
cleanUp
Description copied from interface:KillableClean up the container. It is not coming back. by default do the same thing as when restarting.- Specified by:
cleanUpin interfaceKillable- Throws:
IOException- on any error
-
setup
Setup the container to run. By default this creates the needed directories/links in the local file system PREREQUISITE: All needed blobs and topology, jars/configs have been downloaded and placed in the appropriate locations- Throws:
IOException- on any error
-
writeLogMetadata
Write out the file used by the log viewer to allow/reject log access.- Parameters:
user- the user this is going to run as- Throws:
IOException- on any error
-
createArtifactsLink
Create symlink from the containers directory/artifacts to the artifacts directory.- Throws:
IOException- on any error
-
createBlobstoreLinks
Create symlinks for each of the blobs from the container's directory to corresponding links in the storm dist directory.- Throws:
IOException- on any error.
-
getWorkerUser
Get the user of the worker.- Returns:
- the user that some operations should be done as.
- Throws:
IOException- on any error
-
saveWorkerUser
- Throws:
IOException
-
deleteSavedWorkerUser
- Throws:
IOException
-
cleanUpForRestart
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- Throws:
IOException- on any error
-
isMemoryLimitViolated
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.- Throws:
IOException- on any error
-
updateMemoryAccounting
protected void updateMemoryAccounting() -
getTotalTopologyMemoryUsed
public long getTotalTopologyMemoryUsed()Get the total memory used (on and off heap). -
getTotalTopologyMemoryReserved
Get the total memory reserved.- Parameters:
withUpdatedLimits- the local assignment with shared memory- Returns:
- the total memory reserved.
-
getTotalWorkersForThisTopology
public long getTotalWorkersForThisTopology()Get the number of workers for this topology. -
getMemoryUsageMb
public long getMemoryUsageMb()Get the current memory usage of this container. -
getMemoryReservationMb
public long getMemoryReservationMb()Get the current memory reservation of this container. -
launch
Launch the process for the first time. PREREQUISITE: setup has run and passed- Throws:
IOException- on any error
-
relaunch
Restart the processes in this container. PREREQUISITE: cleanUpForRestart has run and passed- Throws:
IOException- on any error
-
didMainProcessExit
public abstract boolean didMainProcessExit()Return true if the main process exited, else false. This is just best effort return false if unknown. -
runProfiling
public abstract boolean runProfiling(ProfileRequest request, boolean stop) throws IOException, InterruptedException Run a profiling request.- Parameters:
request- the request to runstop- is this a stop request?- Returns:
- true if it succeeded, else false
- Throws:
IOException- on any errorInterruptedException- if running the command is interrupted.
-
getWorkerId
Get the id of the container or null if there is no worker id right now.
-