dajac commented on code in PR #13924: URL: https://github.com/apache/kafka/pull/13924#discussion_r1254371528
########## core/src/main/scala/kafka/log/LogCleanerManager.scala: ########## @@ -88,17 +88,23 @@ private[log] class LogCleanerManager(val logDirs: Seq[File], /* for coordinating the pausing and the cleaning of a partition */ private val pausedCleaningCond = lock.newCondition() + // Avoid adding legacy tags for a metric when initializing `LogCleanerManager` + GaugeMetricNameWithTag.clear() /* gauges for tracking the number of partitions marked as uncleanable for each log directory */ for (dir <- logDirs) { - metricsGroup.newGauge("uncleanable-partitions-count", + val metricTag = Map("logDirectory" -> dir.getAbsolutePath).asJava + metricsGroup.newGauge(UncleanablePartitionsCountMetricName, () => inLock(lock) { uncleanablePartitions.get(dir.getAbsolutePath).map(_.size).getOrElse(0) }, - Map("logDirectory" -> dir.getAbsolutePath).asJava + metricTag ) + GaugeMetricNameWithTag.computeIfAbsent(UncleanablePartitionsCountMetricName, k => new java.util.ArrayList[java.util.Map[String, String]]()) Review Comment: Hum... This does not seem safe. I just noticed the following failure in CI: ``` Error org.apache.kafka.server.fault.FaultHandlerException: fatalFaultHandler: Error starting LogManager: null Stacktrace org.apache.kafka.server.fault.FaultHandlerException: fatalFaultHandler: Error starting LogManager: null at java.base@17.0.7/java.util.HashMap.computeIfAbsent(HashMap.java:1221) at app//kafka.log.LogCleanerManager.$anonfun$new$1(LogCleanerManager.scala:100) at app//kafka.log.LogCleanerManager.$anonfun$new$1$adapted(LogCleanerManager.scala:94) at app//scala.collection.IterableOnceOps.foreach(IterableOnce.scala:576) at app//scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:574) at app//scala.collection.AbstractIterable.foreach(Iterable.scala:933) at app//kafka.log.LogCleanerManager.<init>(LogCleanerManager.scala:94) at app//kafka.log.LogCleaner.<init>(LogCleaner.scala:109) at app//kafka.log.LogManager.startupWithConfigOverrides(LogManager.scala:571) at app//kafka.log.LogManager.startup(LogManager.scala:504) at app//kafka.server.metadata.BrokerMetadataPublisher.initializeManagers(BrokerMetadataPublisher.scala:350) at app//kafka.server.metadata.BrokerMetadataPublisher.onMetadataUpdate(BrokerMetadataPublisher.scala:162) at app//org.apache.kafka.image.loader.MetadataLoader.initializeNewPublishers(MetadataLoader.java:301) at app//org.apache.kafka.image.loader.MetadataLoader.lambda$scheduleInitializeNewPublishers$0(MetadataLoader.java:258) at app//org.apache.kafka.queue.KafkaEventQueue$EventContext.run(KafkaEventQueue.java:127) at app//org.apache.kafka.queue.KafkaEventQueue$EventHandler.handleEvents(KafkaEventQueue.java:210) at app//org.apache.kafka.queue.KafkaEventQueue$EventHandler.run(KafkaEventQueue.java:181) at java.base@17.0.7/java.lang.Thread.run(Thread.java:833) Caused by: java.util.ConcurrentModificationException ... 18 more ``` https://ci-builds.apache.org/blue/organizations/jenkins/Kafka%2Fkafka-pr/detail/PR-13954/6/tests cc @divijvaidya -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: jira-unsubscr...@kafka.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org