This is an automated email from the ASF dual-hosted git repository. kturner pushed a commit to branch 3.1 in repository https://gitbox.apache.org/repos/asf/accumulo.git
commit a143ec1f9e613ef624c13d27896ad134a651def3 Merge: aab174e83b d888cd809e Author: Keith Turner <ktur...@apache.org> AuthorDate: Wed Oct 30 22:34:47 2024 +0000 Merge branch '2.1' into 3.1 .../apache/accumulo/core/metrics/MetricsInfo.java | 39 +--- .../accumulo/server/metrics/MetricsInfoImpl.java | 227 ++++++--------------- server/compaction-coordinator/pom.xml | 4 + .../coordinator/CompactionCoordinator.java | 11 +- .../org/apache/accumulo/compactor/Compactor.java | 10 +- .../apache/accumulo/gc/SimpleGarbageCollector.java | 4 +- .../java/org/apache/accumulo/manager/Manager.java | 4 +- .../java/org/apache/accumulo/monitor/Monitor.java | 4 +- .../org/apache/accumulo/tserver/ScanServer.java | 4 +- .../org/apache/accumulo/tserver/TabletServer.java | 4 +- .../accumulo/test/functional/ZombieTServer.java | 4 +- .../accumulo/test/metrics/TestStatsDSink.java | 33 +-- 12 files changed, 124 insertions(+), 224 deletions(-) diff --cc core/src/main/java/org/apache/accumulo/core/metrics/MetricsInfo.java index 4134ccd396,beb23685f7..297745593a --- a/core/src/main/java/org/apache/accumulo/core/metrics/MetricsInfo.java +++ b/core/src/main/java/org/apache/accumulo/core/metrics/MetricsInfo.java @@@ -24,9 -24,8 +24,8 @@@ import java.util.Collections import java.util.List; import java.util.Objects; -import org.apache.accumulo.core.util.HostAndPort; +import com.google.common.net.HostAndPort; - import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Tag; public interface MetricsInfo { diff --cc server/base/src/main/java/org/apache/accumulo/server/metrics/MetricsInfoImpl.java index 9e7e799d47,5b765e747c..418dcd60c0 --- a/server/base/src/main/java/org/apache/accumulo/server/metrics/MetricsInfoImpl.java +++ b/server/base/src/main/java/org/apache/accumulo/server/metrics/MetricsInfoImpl.java @@@ -212,70 -116,64 +117,62 @@@ public class MetricsInfoImpl implement LOG.info("Metrics not initialized, metrics are disabled."); return; } - lock.lock(); - try { - if (composite != null) { - LOG.warn("metrics registry has already been initialized"); - return; - } - composite = new CompositeMeterRegistry(); - composite.config().commonTags(commonTags.values()); - - LOG.info("Metrics initialization. common tags: {}", commonTags); - - boolean jvmMetricsEnabled = - context.getConfiguration().getBoolean(Property.GENERAL_MICROMETER_JVM_METRICS_ENABLED); - - if (jvmMetricsEnabled) { - LOG.info("enabling detailed jvm, classloader, jvm gc and process metrics"); - new ClassLoaderMetrics().bindTo(composite); - new JvmMemoryMetrics().bindTo(composite); - jvmGcMetrics = new JvmGcMetrics(); - jvmGcMetrics.bindTo(composite); - new ProcessorMetrics().bindTo(composite); - new JvmThreadMetrics().bindTo(composite); - } + if (commonTags != null) { + LOG.warn("metrics registry has already been initialized"); + return; + } - MeterFilter replicationFilter = new MeterFilter() { - @Override - public DistributionStatisticConfig configure(Meter.Id id, - @NonNull DistributionStatisticConfig config) { - if (id.getName().equals("replicationQueue")) { - return DistributionStatisticConfig.builder().percentiles(0.5, 0.75, 0.9, 0.95, 0.99) - .expiry(Duration.ofMinutes(10)).build().merge(config); - } - return config; - } - }; - - // user specified registries - String userRegistryFactories = - context.getConfiguration().get(Property.GENERAL_MICROMETER_FACTORY); - - for (String factoryName : getTrimmedStrings(userRegistryFactories)) { - try { - MeterRegistry registry = getRegistryFromFactory(factoryName, context); - registry.config().commonTags(commonTags.values()); - registry.config().meterFilter(replicationFilter); - addRegistry(registry); - } catch (ReflectiveOperationException ex) { - LOG.warn("Could not load registry {}", factoryName, ex); - } - } + commonTags = List.copyOf(tags); - pendingRegistries.forEach(registry -> composite.add(registry)); + LOG.info("Metrics initialization. common tags: {}", commonTags); - LOG.info("Metrics initialization. Register producers: {}", producers); - producers.forEach(p -> p.registerMetrics(composite)); + Metrics.globalRegistry.config().commonTags(commonTags); - Metrics.globalRegistry.add(composite); + boolean jvmMetricsEnabled = + context.getConfiguration().getBoolean(Property.GENERAL_MICROMETER_JVM_METRICS_ENABLED); - } finally { - lock.unlock(); + MeterFilter replicationFilter = new MeterFilter() { + @Override + public DistributionStatisticConfig configure(Meter.Id id, + @NonNull DistributionStatisticConfig config) { + if (id.getName().equals("replicationQueue")) { + return DistributionStatisticConfig.builder().percentiles(0.5, 0.75, 0.9, 0.95, 0.99) + .expiry(Duration.ofMinutes(10)).build().merge(config); + } + return config; + } + }; + + // user specified registries + String userRegistryFactories = + context.getConfiguration().get(Property.GENERAL_MICROMETER_FACTORY); + + for (String factoryName : getTrimmedStrings(userRegistryFactories)) { + try { + MeterRegistry registry = getRegistryFromFactory(factoryName, context); + registry.config().meterFilter(replicationFilter); + registry.config().commonTags(commonTags); + Metrics.globalRegistry.add(registry); + } catch (ReflectiveOperationException ex) { + LOG.warn("Could not load registry {}", factoryName, ex); + } + } + + if (jvmMetricsEnabled) { + LOG.info("enabling detailed jvm, classloader, jvm gc and process metrics"); + new ClassLoaderMetrics().bindTo(Metrics.globalRegistry); + new JvmMemoryMetrics().bindTo(Metrics.globalRegistry); + jvmGcMetrics = new JvmGcMetrics(); + jvmGcMetrics.bindTo(Metrics.globalRegistry); + new ProcessorMetrics().bindTo(Metrics.globalRegistry); + new JvmThreadMetrics().bindTo(Metrics.globalRegistry); } + + LOG.info("Metrics initialization. Register producers: {}", producers); + producers.forEach(p -> p.registerMetrics(Metrics.globalRegistry)); } - // support for org.apache.accumulo.core.metrics.MeterRegistryFactory can be removed in 3.1 @VisibleForTesting - @SuppressWarnings("deprecation") static MeterRegistry getRegistryFromFactory(final String factoryName, final ServerContext context) throws ReflectiveOperationException { try { diff --cc server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionCoordinator.java index df11e31fd3,b6130672e1..c128c19fea --- a/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionCoordinator.java +++ b/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionCoordinator.java @@@ -18,12 -18,13 +18,13 @@@ */ package org.apache.accumulo.coordinator; -import static java.nio.charset.StandardCharsets.UTF_8; -import static org.apache.accumulo.core.util.UtilWaitThread.sleepUninterruptibly; -import static org.apache.accumulo.core.util.threads.ThreadPoolNames.COMPACTION_COORDINATOR_SUMMARY_POOL; +import static com.google.common.util.concurrent.Uninterruptibles.sleepUninterruptibly; import java.net.UnknownHostException; +import java.util.ArrayList; + import java.util.Collection; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@@ -99,9 -99,9 +100,11 @@@ import com.github.benmanes.caffeine.cac import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.LoadingCache; import com.google.common.collect.Sets; +import com.google.common.net.HostAndPort; +import com.google.common.util.concurrent.Uninterruptibles; + import io.micrometer.core.instrument.Tag; + public class CompactionCoordinator extends AbstractServer implements CompactionCoordinatorService.Iface, LiveTServerSet.Listener { @@@ -269,9 -283,7 +277,8 @@@ } MetricsInfo metricsInfo = getContext().getMetricsInfo(); - metricsInfo.addServiceTags(getApplicationName(), clientAddress, ""); + metricsInfo.addMetricsProducers(this); - metricsInfo.init(); + metricsInfo.init(getServiceTags(clientAddress)); // On a re-start of the coordinator it's possible that external compactions are in-progress. // Attempt to get the running compactions on the compactors and then resolve which tserver diff --cc server/compactor/src/main/java/org/apache/accumulo/compactor/Compactor.java index 777104d95a,c97d696a4a..b45a1879c1 --- a/server/compactor/src/main/java/org/apache/accumulo/compactor/Compactor.java +++ b/server/compactor/src/main/java/org/apache/accumulo/compactor/Compactor.java @@@ -29,8 -25,10 +29,9 @@@ import static org.apache.accumulo.core. import java.io.IOException; import java.io.UncheckedIOException; import java.net.UnknownHostException; -import java.security.SecureRandom; import java.time.Duration; import java.util.ArrayList; + import java.util.Collection; import java.util.List; import java.util.Map; import java.util.TreeMap; @@@ -676,10 -693,9 +683,9 @@@ public class Compactor extends Abstract } MetricsInfo metricsInfo = getContext().getMetricsInfo(); - metricsInfo.addServiceTags(getApplicationName(), clientAddress, queueName); - metricsInfo.addMetricsProducers(this); + metricsInfo.addMetricsProducers(this, pausedMetrics); - metricsInfo.init(); + metricsInfo.init(getServiceTags(clientAddress)); var watcher = new CompactionWatcher(getConfiguration()); var schedExecutor = ThreadPools.getServerThreadPools() diff --cc server/gc/src/main/java/org/apache/accumulo/gc/SimpleGarbageCollector.java index 3b34a0ff66,ce0e8682bb..077956b9bd --- a/server/gc/src/main/java/org/apache/accumulo/gc/SimpleGarbageCollector.java +++ b/server/gc/src/main/java/org/apache/accumulo/gc/SimpleGarbageCollector.java @@@ -155,10 -167,10 +155,10 @@@ public class SimpleGarbageCollector ext } MetricsInfo metricsInfo = getContext().getMetricsInfo(); - metricsInfo.addServiceTags(getApplicationName(), address, ""); - metricsInfo.addMetricsProducers(new GcMetrics(this)); + metricsInfo.addMetricsProducers(this, new GcMetrics(this)); - metricsInfo.init(); + metricsInfo.init( + MetricsInfo.serviceTags(getContext().getInstanceName(), getApplicationName(), address, "")); try { long delay = getStartDelay(); log.debug("Sleeping for {} milliseconds before beginning garbage collection cycles", delay); diff --cc server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java index 4ae6ee2ca2,80dd69b8cd..f25aa8f545 --- a/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java +++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java @@@ -497,9 -498,8 +497,9 @@@ public class Monitor extends AbstractSe } MetricsInfo metricsInfo = getContext().getMetricsInfo(); - metricsInfo.addServiceTags(getApplicationName(), monitorHostAndPort, ""); + metricsInfo.addMetricsProducers(this); - metricsInfo.init(); + metricsInfo.init(MetricsInfo.serviceTags(getContext().getInstanceName(), getApplicationName(), + monitorHostAndPort, "")); try { URL url = new URL(server.isSecure() ? "https" : "http", advertiseHost, server.getPort(), "/"); diff --cc server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java index 2e574f460f,1df158cf01..2b035b656d --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java @@@ -717,8 -772,9 +716,9 @@@ public class TabletServer extends Abstr this.resourceManager.getDataCache(), this.resourceManager.getSummaryCache()); metricsInfo.addMetricsProducers(this, metrics, updateMetrics, scanMetrics, mincMetrics, - ceMetrics, blockCacheMetrics); + ceMetrics, pausedMetrics, blockCacheMetrics); - metricsInfo.init(); + metricsInfo.init(MetricsInfo.serviceTags(context.getInstanceName(), getApplicationName(), + clientAddress, "")); this.compactionManager = new CompactionManager(() -> Iterators .transform(onlineTablets.snapshot().values().iterator(), Tablet::asCompactable),