This is an automated email from the ASF dual-hosted git repository. swebb2066 pushed a commit to branch remove_async_dispatch_thread_logging_test in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
commit 5f839d4b42cbc0308b51940fea744360adda639e Author: Stephen Webb <[email protected]> AuthorDate: Fri Sep 26 13:23:24 2025 +1000 Improve AsyncAppender unit test reliability --- src/main/cpp/asyncappender.cpp | 23 ++++++++++++++++++++++- src/test/cpp/asyncappendertestcase.cpp | 13 +------------ 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/main/cpp/asyncappender.cpp b/src/main/cpp/asyncappender.cpp index cec9f359..ab7adb35 100644 --- a/src/main/cpp/asyncappender.cpp +++ b/src/main/cpp/asyncappender.cpp @@ -227,7 +227,7 @@ struct AsyncAppender::AsyncAppenderPriv : public AppenderSkeleton::AppenderSkele /** * Used to ensure the dispatch thread does not wait when a logging thread is waiting. */ - int blockedCount{0}; + alignas(hardware_constructive_interference_size) int blockedCount{0}; }; @@ -285,6 +285,7 @@ void AsyncAppender::append(const spi::LoggingEventPtr& event, Pool& p) if (priv->bufferSize <= 0) { priv->appenders.appendLoopOnAppenders(event, p); + return; } // Get a copy of this thread's diagnostic context @@ -525,6 +526,9 @@ DiscardSummary::createEvent(::LOG4CXX_NS::helpers::Pool& p, void AsyncAppender::dispatch() { size_t discardCount = 0; + size_t iterationCount = 0; + size_t waitCount = 0; + size_t blockedCount = 0; std::vector<size_t> pendingCountHistogram(priv->bufferSize, 0); bool isActive = true; @@ -537,7 +541,9 @@ void AsyncAppender::dispatch() std::this_thread::yield(); // Wait a bit if (priv->dispatchedCount == priv->commitCount) { + ++waitCount; std::unique_lock<std::mutex> lock(priv->bufferMutex); + blockedCount += priv->blockedCount; priv->bufferNotEmpty.wait(lock, [this]() -> bool { return 0 < priv->blockedCount || priv->dispatchedCount != priv->commitCount || priv->closed; } ); @@ -587,11 +593,26 @@ void AsyncAppender::dispatch() } } } + ++iterationCount; } if (LogLog::isDebugEnabled()) { Pool p; LogString msg(LOG4CXX_STR("AsyncAppender")); +#ifdef _DEBUG + msg += LOG4CXX_STR(" iterationCount "); + StringHelper::toString(iterationCount, p, msg); + msg += LOG4CXX_STR(" waitCount "); + StringHelper::toString(waitCount, p, msg); + msg += LOG4CXX_STR(" blockedCount "); + StringHelper::toString(blockedCount, p, msg); + msg += LOG4CXX_STR(" eventCount "); + StringHelper::toString(priv->eventCount, p, msg); + msg += LOG4CXX_STR(" commitCount "); + StringHelper::toString(priv->commitCount, p, msg); +#endif + msg += LOG4CXX_STR(" dispatchedCount "); + StringHelper::toString(priv->dispatchedCount, p, msg); msg += LOG4CXX_STR(" discardCount "); StringHelper::toString(discardCount, p, msg); msg += LOG4CXX_STR(" pendingCountHistogram"); diff --git a/src/test/cpp/asyncappendertestcase.cpp b/src/test/cpp/asyncappendertestcase.cpp index 206efc1f..374387b0 100644 --- a/src/test/cpp/asyncappendertestcase.cpp +++ b/src/test/cpp/asyncappendertestcase.cpp @@ -87,18 +87,6 @@ class BlockableVectorAppender : public VectorAppender { std::lock_guard<std::mutex> lock( blocker ); VectorAppender::append(event, p); - - // - // if fatal, echo messages for testLoggingInDispatcher - // - if (event->getLevel() == Level::getInfo()) - { - LoggerPtr logger = Logger::getLoggerLS(event->getLoggerName()); - LOG4CXX_LOGLS(logger, Level::getError(), event->getMessage()); - LOG4CXX_LOGLS(logger, Level::getWarn(), event->getMessage()); - LOG4CXX_LOGLS(logger, Level::getInfo(), event->getMessage()); - LOG4CXX_LOGLS(logger, Level::getDebug(), event->getMessage()); - } } std::mutex& getBlocker() @@ -349,6 +337,7 @@ class AsyncAppenderTestCase : public AppenderSkeletonTestCase async->close(); const std::vector<spi::LoggingEventPtr>& events = blockableAppender->getVector(); LOGUNIT_ASSERT(!events.empty()); + LOGUNIT_ASSERT(events.size() <= 142); LoggingEventPtr initialEvent = events.front(); LoggingEventPtr discardEvent = events.back(); LOGUNIT_ASSERT(initialEvent->getMessage() == LOG4CXX_STR("Hello, World"));
