[ https://issues.apache.org/jira/browse/FLUME-2894?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15529354#comment-15529354 ]
Umesh Chaudhary commented on FLUME-2894: ---------------------------------------- Wondering if we can achieve this by current data structures used in LifecycleSupervisor class. We are using HashMap as: supervisedProcesses = new HashMap<LifecycleAware, Supervisoree>(); And it is having key as LifecycleAware which is not a NamedComponent. [~bessbd] [~jholoman], Need your inputs to do this. > Flume components should stop in the correct order (graceful shutdown) > --------------------------------------------------------------------- > > Key: FLUME-2894 > URL: https://issues.apache.org/jira/browse/FLUME-2894 > Project: Flume > Issue Type: Bug > Components: Channel, Node, Sinks+Sources > Affects Versions: v1.6.0 > Reporter: Piotr Wiecek > > Flume components should be stopped in the right way: > * stop the sources (in order to not receiving further notifications), > * wait until all events within the channels are consumed by the sinks, > * stop the channels and the sinks. > Currently, the shutdown hook stops the components in a random manner. > E.g.: SINK, CHANNEL, SOURCE. > Components are stored in the HashMap: > {code:borderStyle=solid} > Map<LifecycleAware, Supervisoree> supervisedProcesses; > ... > supervisedProcesses = new HashMap<LifecycleAware, Supervisoree>(); > ... > @Override > public synchronized void stop() { > ... > for (final Entry<LifecycleAware, Supervisoree> entry : supervisedProcesses > .entrySet()) { > if (entry.getKey().getLifecycleState().equals(LifecycleState.START)) { > entry.getValue().status.desiredState = LifecycleState.STOP; > entry.getKey().stop(); > } > } > .... > {code} > The problems which we can have: > * not all Events will be consumed (Sink will be stopped first) > * Source will continue to accept messages even though other components are > stopped -- This message was sent by Atlassian JIRA (v6.3.4#6332)