apache / logging-log4j2

Apache Log4j 2 is a versatile, feature-rich, efficient logging API and backend for Java.
https://logging.apache.org/log4j/2.x/
Apache License 2.0
3.36k stars 1.6k forks source link

SocketAppenderReconnectTest is unreliable #3004

Open garydgregory opened 1 day ago

garydgregory commented 1 day ago

Description

SocketAppenderReconnectTest is unreliable

SocketAppenderReconnectTest.lambda$verifyLoggingSuccess$2:360 » AppenderLogging Error writing to TCP:localhost:53217 for connection localhost/127.0.0.1:53217

Configuration

Version: 2.x at 01125b11a7c52af12204a1c4a646158f63b2d6eb

Operating system: Microsoft Windows [Version 10.0.19045.4780

JDK: Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937) Maven home: C:\java\apache-maven-3.9.9 Java version: 17.0.12, vendor: Eclipse Adoptium, runtime: C:\Program Files\Eclipse Adoptium\jdk-17.0.12.7-hotspot Default locale: en_US, platform encoding: UTF-8 OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

Logs

[ERROR] Tests run: 3, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 7.934 s <<< FAILURE! -- in org.apache.logging.log4j.core.appender.SocketAppenderReconnectTest
[ERROR] org.apache.logging.log4j.core.appender.SocketAppenderReconnectTest.repeating_reconnect_failures_should_be_propagated -- Time elapsed: 2.457 s <<< ERROR!
org.apache.logging.log4j.core.appender.AppenderLoggingException: Error writing to TCP:localhost:53217 for connection localhost/127.0.0.1:53217
        at org.apache.logging.log4j.core.net.TcpSocketManager.write(TcpSocketManager.java:299)
        at org.apache.logging.log4j.core.appender.OutputStreamManager.write(OutputStreamManager.java:202)
        at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.writeByteArrayToManager(AbstractOutputStreamAppender.java:236)
        at org.apache.logging.log4j.core.appender.SocketAppender.directEncodeEvent(SocketAppender.java:598)
        at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.tryAppend(AbstractOutputStreamAppender.java:220)
        at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:211)
        at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:160)
        at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:133)
        at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:124)
        at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:88)
        at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:714)
        at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:672)
        at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:648)
        at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:584)
        at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:92)
        at org.apache.logging.log4j.core.Logger.log(Logger.java:240)
        at org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2908)
        at org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2861)
        at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2843)
        at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2622)
        at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:2569)
        at org.apache.logging.log4j.spi.AbstractLogger.info(AbstractLogger.java:1572)
        at org.apache.logging.log4j.core.appender.SocketAppenderReconnectTest.lambda$verifyLoggingSuccess$2(SocketAppenderReconnectTest.java:360)
        at org.awaitility.core.CallableCondition$ConditionEvaluationWrapper.eval(CallableCondition.java:99)
        at org.awaitility.core.ConditionAwaiter$ConditionPoller.call(ConditionAwaiter.java:248)
        at org.awaitility.core.ConditionAwaiter$ConditionPoller.call(ConditionAwaiter.java:235)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.net.SocketException: Connection reset by peer
        at java.base/sun.nio.ch.NioSocketImpl.implWrite(NioSocketImpl.java:425)
        at java.base/sun.nio.ch.NioSocketImpl.write(NioSocketImpl.java:445)
        at java.base/sun.nio.ch.NioSocketImpl$2.write(NioSocketImpl.java:831)
        at java.base/java.net.Socket$SocketOutputStream.write(Socket.java:1035)
        at org.apache.logging.log4j.core.net.TcpSocketManager.writeAndFlush(TcpSocketManager.java:308)
        at org.apache.logging.log4j.core.net.TcpSocketManager.write(TcpSocketManager.java:269)
        ... 29 more

Reproduction

mvn clean install
vy commented 1 day ago

@garydgregory, as @ppkarwasz noted in his dev@ response to you, our Develocity integration provides a dashboard where all flaky tests are visible. I don't see how creating an issue for each will help, but I guess you have a plan.

For the record, I will try to take care of SocketAppenderReconnectTest.

garydgregory commented 1 day ago

Personal communications are just that, they do not help the community.

My plan as it is is to signal to folks who are trying to do a simple "mvn clean install" to expect unreliable builds.

This is endlessly frustrating as the build has become more and more unreliable over time. A year or two ago, it was rare to get a failure, now it happens all the time.

I have not been able to successfully validate a release candidate in a long time. On macOS, on Windows, and on Unbuntu.

vy commented 1 day ago

@garydgregory, I understand your rightful frustration. We will extremely appreciate yours PRs addressing those flaky tests, it will be a great win for the community.