[ https://issues.apache.org/jira/browse/FLUME-3035?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Yashon updated FLUME-3035: -------------------------- Description: Configuration: *pom.xml* {code:xml} <dependency> <groupId>org.apache.flume.flume-ng-clients</groupId> <artifactId>flume-ng-log4jappender</artifactId> <version>1.7.0</version> </dependency> {code} *log4j.properties* {code} log4j.appender.flume = org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender log4j.appender.flume.Hosts = fooflumesource.com:25430 barflumesource.com:25430 log4j.appender.flume.Selector = ROUND_ROBIN log4j.appender.flume.MaxBackoff = 60000 log4j.logger.org.apache.flume.clients.log4jappender = DEBUG,flume {code} *Problem description:* Log loop print “2016-12-17 10:48:53,629 WARN NettyAvroRpcClient:634 *Using default maxIOWorkers*”,Cause stack overflow; {code} Exception in thread "main" java.lang.StackOverflowError at java.util.Calendar.setTime(Calendar.java:1770) at java.text.SimpleDateFormat.format(SimpleDateFormat.java:943) at java.text.SimpleDateFormat.format(SimpleDateFormat.java:936) at java.text.DateFormat.format(DateFormat.java:345) at org.apache.log4j.helpers.PatternParser$DatePatternConverter.convert(PatternParser.java:443) at org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:65) at org.apache.log4j.PatternLayout.format(PatternLayout.java:506) at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:310) at org.apache.log4j.WriterAppender.append(WriterAppender.java:162) at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251) at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66) at org.apache.log4j.Category.callAppenders(Category.java:206) at org.apache.log4j.Category.forcedLog(Category.java:391) at org.apache.log4j.Category.log(Category.java:856) at org.slf4j.impl.Log4jLoggerAdapter.warn(Log4jLoggerAdapter.java:400) at org.apache.flume.api.NettyAvroRpcClient.configure(NettyAvroRpcClient.java:634) at org.apache.flume.api.RpcClientFactory.getInstance(RpcClientFactory.java:90) at org.apache.flume.api.LoadBalancingRpcClient.createClient(LoadBalancingRpcClient.java:214) at org.apache.flume.api.LoadBalancingRpcClient.getClient(LoadBalancingRpcClient.java:197) at org.apache.flume.api.LoadBalancingRpcClient.append(LoadBalancingRpcClient.java:71) at org.apache.flume.clients.log4jappender.Log4jAppender.append(Log4jAppender.java:162) at org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender.append(LoadBalancingLog4jAppender.java:111) at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251) at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66) at org.apache.log4j.Category.callAppenders(Category.java:206) at org.apache.log4j.Category.forcedLog(Category.java:391) at org.apache.log4j.Category.log(Category.java:856) at org.slf4j.impl.Log4jLoggerAdapter.warn(Log4jLoggerAdapter.java:400) at org.apache.flume.api.NettyAvroRpcClient.configure(NettyAvroRpcClient.java:634) at org.apache.flume.api.RpcClientFactory.getInstance(RpcClientFactory.java:90) at org.apache.flume.api.LoadBalancingRpcClient.createClient(LoadBalancingRpcClient.java:214) at org.apache.flume.api.LoadBalancingRpcClient.getClient(LoadBalancingRpcClient.java:197) at org.apache.flume.api.LoadBalancingRpcClient.append(LoadBalancingRpcClient.java:71) at org.apache.flume.clients.log4jappender.Log4jAppender.append(Log4jAppender.java:162) at org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender.append(LoadBalancingLog4jAppender.java:111) at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251) at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66) at org.apache.log4j.Category.callAppenders(Category.java:206) at org.apache.log4j.Category.forcedLog(Category.java:391) at org.apache.log4j.Category.log(Category.java:856) at org.slf4j.impl.Log4jLoggerAdapter.warn(Log4jLoggerAdapter.java:400) {code} *Problem analysis:* {code:title=NettyAvroRpcClient.java|borderStyle=solid} // Some comments here public synchronized void configure(Properties properties) throws FlumeException { //=====Ignore the above code======= String maxIoWorkersStr = properties.getProperty(RpcClientConfigurationConstants.MAX_IO_WORKERS); if (!StringUtils.isEmpty(maxIoWorkersStr)) { try { maxIoWorkers = Integer.parseInt(maxIoWorkersStr); } catch (NumberFormatException ex) { logger.warn("Invalid maxIOWorkers:" + maxIoWorkersStr + " Using " + "default maxIOWorkers."); maxIoWorkers = -1; } } // When maxIoWorkersStr is null,maxIoWorkers less than 1,then print log into dead loop; if (maxIoWorkers < 1) { logger.warn("Using default maxIOWorkers"); maxIoWorkers = -1; } this.connect(); } {code} *Temporary solution:* {code:title=LoadBalancingLog4jAppender.java|borderStyle=solid} private Properties getProperties(String hosts, String selector, String maxBackoff, long timeout) throws FlumeException { //=====Ignore the above code======= props.setProperty(RpcClientConfigurationConstants.MAX_IO_WORKERS,(Runtime.getRuntime() .availableProcessors() * 2)+""); return props; } {code} was: Configuration: *pom.xml* {code:xml} <dependency> <groupId>org.apache.flume.flume-ng-clients</groupId> <artifactId>flume-ng-log4jappender</artifactId> <version>1.7.0</version> </dependency> {code} *log4j.properties* {code} log4j.appender.flume = org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender log4j.appender.flume.Hosts = fooflumesource.com:25430 barflumesource.com:25430 log4j.appender.flume.Selector = ROUND_ROBIN log4j.appender.flume.MaxBackoff = 60000 log4j.logger.org.apache.flume.clients.log4jappender = DEBUG,flume {code} Problem description: Log loop print “2016-12-17 10:48:53,629 WARN NettyAvroRpcClient:634 *Using default maxIOWorkers*”,Cause stack overflow; {code} Exception in thread "main" java.lang.StackOverflowError at java.util.Calendar.setTime(Calendar.java:1770) at java.text.SimpleDateFormat.format(SimpleDateFormat.java:943) at java.text.SimpleDateFormat.format(SimpleDateFormat.java:936) at java.text.DateFormat.format(DateFormat.java:345) at org.apache.log4j.helpers.PatternParser$DatePatternConverter.convert(PatternParser.java:443) at org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:65) at org.apache.log4j.PatternLayout.format(PatternLayout.java:506) at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:310) at org.apache.log4j.WriterAppender.append(WriterAppender.java:162) at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251) at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66) at org.apache.log4j.Category.callAppenders(Category.java:206) at org.apache.log4j.Category.forcedLog(Category.java:391) at org.apache.log4j.Category.log(Category.java:856) at org.slf4j.impl.Log4jLoggerAdapter.warn(Log4jLoggerAdapter.java:400) at org.apache.flume.api.NettyAvroRpcClient.configure(NettyAvroRpcClient.java:634) at org.apache.flume.api.RpcClientFactory.getInstance(RpcClientFactory.java:90) at org.apache.flume.api.LoadBalancingRpcClient.createClient(LoadBalancingRpcClient.java:214) at org.apache.flume.api.LoadBalancingRpcClient.getClient(LoadBalancingRpcClient.java:197) at org.apache.flume.api.LoadBalancingRpcClient.append(LoadBalancingRpcClient.java:71) at org.apache.flume.clients.log4jappender.Log4jAppender.append(Log4jAppender.java:162) at org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender.append(LoadBalancingLog4jAppender.java:111) at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251) at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66) at org.apache.log4j.Category.callAppenders(Category.java:206) at org.apache.log4j.Category.forcedLog(Category.java:391) at org.apache.log4j.Category.log(Category.java:856) at org.slf4j.impl.Log4jLoggerAdapter.warn(Log4jLoggerAdapter.java:400) at org.apache.flume.api.NettyAvroRpcClient.configure(NettyAvroRpcClient.java:634) at org.apache.flume.api.RpcClientFactory.getInstance(RpcClientFactory.java:90) at org.apache.flume.api.LoadBalancingRpcClient.createClient(LoadBalancingRpcClient.java:214) at org.apache.flume.api.LoadBalancingRpcClient.getClient(LoadBalancingRpcClient.java:197) at org.apache.flume.api.LoadBalancingRpcClient.append(LoadBalancingRpcClient.java:71) at org.apache.flume.clients.log4jappender.Log4jAppender.append(Log4jAppender.java:162) at org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender.append(LoadBalancingLog4jAppender.java:111) at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251) at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66) at org.apache.log4j.Category.callAppenders(Category.java:206) at org.apache.log4j.Category.forcedLog(Category.java:391) at org.apache.log4j.Category.log(Category.java:856) at org.slf4j.impl.Log4jLoggerAdapter.warn(Log4jLoggerAdapter.java:400) {code} Problem analysis: {code:title=NettyAvroRpcClient.java|borderStyle=solid} // Some comments here public synchronized void configure(Properties properties) throws FlumeException { //=====Ignore the above code======= String maxIoWorkersStr = properties.getProperty(RpcClientConfigurationConstants.MAX_IO_WORKERS); if (!StringUtils.isEmpty(maxIoWorkersStr)) { try { maxIoWorkers = Integer.parseInt(maxIoWorkersStr); } catch (NumberFormatException ex) { logger.warn("Invalid maxIOWorkers:" + maxIoWorkersStr + " Using " + "default maxIOWorkers."); maxIoWorkers = -1; } } // When maxIoWorkersStr is null,maxIoWorkers less than 1,then print log into dead loop; if (maxIoWorkers < 1) { logger.warn("Using default maxIOWorkers"); maxIoWorkers = -1; } this.connect(); } {code} Temporary solution: {code:title=LoadBalancingLog4jAppender.java|borderStyle=solid} private Properties getProperties(String hosts, String selector, String maxBackoff, long timeout) throws FlumeException { //=====Ignore the above code======= props.setProperty(RpcClientConfigurationConstants.MAX_IO_WORKERS,(Runtime.getRuntime() .availableProcessors() * 2)+""); return props; } {code} > Log loop print “Using default maxIOWorkers”,Cause stack overflow > ---------------------------------------------------------------- > > Key: FLUME-3035 > URL: https://issues.apache.org/jira/browse/FLUME-3035 > Project: Flume > Issue Type: Bug > Components: Client SDK > Affects Versions: v1.7.0 > Environment: - jdk version:jdk1.8 > - software platform:win10/CentOs 7 > Reporter: Yashon > Labels: log4jappender, maven, maxIoWorkers > Original Estimate: 3h > Remaining Estimate: 3h > > Configuration: > *pom.xml* > {code:xml} > <dependency> > <groupId>org.apache.flume.flume-ng-clients</groupId> > <artifactId>flume-ng-log4jappender</artifactId> > <version>1.7.0</version> > </dependency> > {code} > *log4j.properties* > {code} > log4j.appender.flume = > org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender > log4j.appender.flume.Hosts = fooflumesource.com:25430 barflumesource.com:25430 > log4j.appender.flume.Selector = ROUND_ROBIN > log4j.appender.flume.MaxBackoff = 60000 > log4j.logger.org.apache.flume.clients.log4jappender = DEBUG,flume > {code} > *Problem description:* > Log loop print “2016-12-17 10:48:53,629 WARN NettyAvroRpcClient:634 *Using > default maxIOWorkers*”,Cause stack overflow; > {code} > Exception in thread "main" java.lang.StackOverflowError > at java.util.Calendar.setTime(Calendar.java:1770) > at java.text.SimpleDateFormat.format(SimpleDateFormat.java:943) > at java.text.SimpleDateFormat.format(SimpleDateFormat.java:936) > at java.text.DateFormat.format(DateFormat.java:345) > at > org.apache.log4j.helpers.PatternParser$DatePatternConverter.convert(PatternParser.java:443) > at > org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:65) > at org.apache.log4j.PatternLayout.format(PatternLayout.java:506) > at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:310) > at org.apache.log4j.WriterAppender.append(WriterAppender.java:162) > at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251) > at > org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66) > at org.apache.log4j.Category.callAppenders(Category.java:206) > at org.apache.log4j.Category.forcedLog(Category.java:391) > at org.apache.log4j.Category.log(Category.java:856) > at org.slf4j.impl.Log4jLoggerAdapter.warn(Log4jLoggerAdapter.java:400) > at > org.apache.flume.api.NettyAvroRpcClient.configure(NettyAvroRpcClient.java:634) > at > org.apache.flume.api.RpcClientFactory.getInstance(RpcClientFactory.java:90) > at > org.apache.flume.api.LoadBalancingRpcClient.createClient(LoadBalancingRpcClient.java:214) > at > org.apache.flume.api.LoadBalancingRpcClient.getClient(LoadBalancingRpcClient.java:197) > at > org.apache.flume.api.LoadBalancingRpcClient.append(LoadBalancingRpcClient.java:71) > at > org.apache.flume.clients.log4jappender.Log4jAppender.append(Log4jAppender.java:162) > at > org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender.append(LoadBalancingLog4jAppender.java:111) > at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251) > at > org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66) > at org.apache.log4j.Category.callAppenders(Category.java:206) > at org.apache.log4j.Category.forcedLog(Category.java:391) > at org.apache.log4j.Category.log(Category.java:856) > at org.slf4j.impl.Log4jLoggerAdapter.warn(Log4jLoggerAdapter.java:400) > at > org.apache.flume.api.NettyAvroRpcClient.configure(NettyAvroRpcClient.java:634) > at > org.apache.flume.api.RpcClientFactory.getInstance(RpcClientFactory.java:90) > at > org.apache.flume.api.LoadBalancingRpcClient.createClient(LoadBalancingRpcClient.java:214) > at > org.apache.flume.api.LoadBalancingRpcClient.getClient(LoadBalancingRpcClient.java:197) > at > org.apache.flume.api.LoadBalancingRpcClient.append(LoadBalancingRpcClient.java:71) > at > org.apache.flume.clients.log4jappender.Log4jAppender.append(Log4jAppender.java:162) > at > org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender.append(LoadBalancingLog4jAppender.java:111) > at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251) > at > org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66) > at org.apache.log4j.Category.callAppenders(Category.java:206) > at org.apache.log4j.Category.forcedLog(Category.java:391) > at org.apache.log4j.Category.log(Category.java:856) > at org.slf4j.impl.Log4jLoggerAdapter.warn(Log4jLoggerAdapter.java:400) > {code} > *Problem analysis:* > {code:title=NettyAvroRpcClient.java|borderStyle=solid} > // Some comments here > public synchronized void configure(Properties properties) > throws FlumeException { > //=====Ignore the above code======= > String maxIoWorkersStr = > properties.getProperty(RpcClientConfigurationConstants.MAX_IO_WORKERS); > if (!StringUtils.isEmpty(maxIoWorkersStr)) { > try { > maxIoWorkers = Integer.parseInt(maxIoWorkersStr); > } catch (NumberFormatException ex) { > logger.warn("Invalid maxIOWorkers:" + maxIoWorkersStr + " Using " + > "default maxIOWorkers."); > maxIoWorkers = -1; > } > } > // When maxIoWorkersStr is null,maxIoWorkers less than 1,then print log > into dead loop; > if (maxIoWorkers < 1) { > logger.warn("Using default maxIOWorkers"); > maxIoWorkers = -1; > } > this.connect(); > } > {code} > *Temporary solution:* > {code:title=LoadBalancingLog4jAppender.java|borderStyle=solid} > private Properties getProperties(String hosts, String selector, > String maxBackoff, long timeout) throws FlumeException { > //=====Ignore the above code======= > props.setProperty(RpcClientConfigurationConstants.MAX_IO_WORKERS,(Runtime.getRuntime() > .availableProcessors() * 2)+""); > return props; > } > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)