[
https://issues.apache.org/jira/browse/FLUME-1036?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13235093#comment-13235093
]
Hari Shreedharan commented on FLUME-1036:
-----------------------------------------
This seems to be what is happening:
* initial configuration is loaded, node starts fine. All sources and sinks are
bound and started.
* config file is changed: AbstractFileConfigurationProvider.run() finds that
the update time is > lastChangedTime, calls doLoad()
* doLoad is simply a synchronized wrapper around load(). load() creates a new
NodeConfiguration object and passes it to DefaultLogicalNodeManager(actually an
implementation of NodeConfigurationAware), and starts all of the SourceRunners
and SinkRunners, leaving the old node dangling until hopefully, at some point
it is cleaned up by GC.
We should keep track of the NodeConfiguration currently active and make sure we
kill it before attempting to start a new one.
> Reconfiguration of AVRO or NETCAT source causes port bind exception
> -------------------------------------------------------------------
>
> Key: FLUME-1036
> URL: https://issues.apache.org/jira/browse/FLUME-1036
> Project: Flume
> Issue Type: Bug
> Components: Sinks+Sources
> Affects Versions: v1.2.0
> Environment: [CentOS 6.2 64-bit]
> Reporter: Will McQueen
>
> This issue occurs with a source that has binds to a port, such as NETCAT or
> AVRO. In the steps below, I use AVRO as an example.
> Steps:
> 1. Run with a props file that includes an avro source, such as a props file
> with these contents:
> # a = agent
> # r = source
> # c = channel
> # k = sink
> a1.sources = r1
> a1.channels = c1
> a1.sinks = k1
> # ===SOURCES===
> a1.sources.r1.type = AVRO
> a1.sources.r1.bind = localhost
> a1.sources.r1.port = 1473
> a1.sources.r1.channels = c1
> # ===CHANNELS===
> a1.channels.c1.type = MEMORY
> # ===SINKS===
> a1.sinks.k1.type = LOGGER
> a1.sinks.k1.channel = c1
> 2. Run the flume node
> [will@localhost flume-1.2.0-incubating-SNAPSHOT]$ pwd
> /home/will/git/apache/flume/flume-1.2.0-incubating-SNAPSHOT
> [will@localhost flume-1.2.0-incubating-SNAPSHOT]$ bin/flume-ng node --conf
> conf --conf-file conf/a1.properties --name a1
> 3. Simulate a reconfig of a file by just touching the props file:
> [will@localhost flume-1.2.0-incubating-SNAPSHOT]$ touch conf/a1.properties
> At this point, an exception is thrown because an attempt is made to bind to
> the same port, even though the port number specified in config file didn't
> change (actually, nothing changed but the last modification time of the file).
> 2012-03-19 02:17:48,573 (lifecycleSupervisor-1-1) [ERROR -
> org.apache.flume.lifecycle.LifecycleSupervisor$MonitorRunnable.run(LifecycleSupervisor.java:210)]
> Unable to start EventDrivenSourceRunner: { source:AvroSource: {
> bindAddress:localhost port:1473 } } - Exception follows.
> org.jboss.netty.channel.ChannelException: Failed to bind to:
> localhost/127.0.0.1:1473
> at
> org.jboss.netty.bootstrap.ServerBootstrap.bind(ServerBootstrap.java:303)
> at org.apache.avro.ipc.NettyServer.<init>(NettyServer.java:85)
> at org.apache.avro.ipc.NettyServer.<init>(NettyServer.java:66)
> at org.apache.flume.source.AvroSource.start(AvroSource.java:124)
> at
> org.apache.flume.source.EventDrivenSourceRunner.start(EventDrivenSourceRunner.java:39)
> at
> org.apache.flume.lifecycle.LifecycleSupervisor$MonitorRunnable.run(LifecycleSupervisor.java:208)
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira