From f0fac1d509b34972a90a4c81ac0e7ceaddf72b5a Mon Sep 17 00:00:00 2001 From: Ron Dagostino Date: Wed, 19 Apr 2023 19:45:26 -0400 Subject: [PATCH] [LI-CHERRY-PICK] KAFKA-14887: FinalizedFeatureChangeListener should not shut down when ZK session expires FinalizedFeatureChangeListener shuts the broker down when it encounters an issue trying to process feature change events. However, it does not distinguish between issues related to feature changes actually failing and other exceptions like ZooKeeper session expiration. This introduces the possibility that Zookeeper session expiration could cause the broker to shutdown, which is not intended. This patch updates the code to distinguish between these two types of exceptions. In the case of something like a ZK session expiration it logs a warning and continues. We shutdown the broker only for FeatureCacheUpdateException. Reviewers: Kamal Chandraprakash , Christo Lolov , Colin P. McCabe --- .../kafka/server/FinalizedFeatureChangeListener.scala | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/core/src/main/scala/kafka/server/FinalizedFeatureChangeListener.scala b/core/src/main/scala/kafka/server/FinalizedFeatureChangeListener.scala index 8f10ab661a895..799574a0402c5 100644 --- a/core/src/main/scala/kafka/server/FinalizedFeatureChangeListener.scala +++ b/core/src/main/scala/kafka/server/FinalizedFeatureChangeListener.scala @@ -153,10 +153,12 @@ class FinalizedFeatureChangeListener(private val finalizedFeatureCache: Finalize // safe to ignore the exception if the thread is being shutdown. We raise the exception // here again, because, it is ignored by ShutdownableThread if it is shutting down. throw ie - case e: Exception => { - error("Failed to process feature ZK node change event. The broker will eventually exit.", e) + case cacheUpdateException: FeatureCacheUpdateException => + error("Failed to process feature ZK node change event. The broker will eventually exit.", cacheUpdateException) throw new FatalExitError(1) - } + case e: Exception => + // do not exit for exceptions unrelated to cache change processing (e.g. ZK session expiration) + warn("Unexpected exception in feature ZK node change event processing; will continue processing.", e) } } }