This is an automated email from the ASF dual-hosted git repository.
dsmiley pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new 4d8057abbe4 SOLR-17458: OTEL metrics: some renames (#3826)
4d8057abbe4 is described below
commit 4d8057abbe4da68d19de6a847eba204f13b9734a
Author: David Smiley <[email protected]>
AuthorDate: Fri Nov 7 17:30:12 2025 -0500
SOLR-17458: OTEL metrics: some renames (#3826)
Units: index & disk size metric units changes from bytes (long) to
megabytes (double).
Affects: solr_disk_space, solr_core_disk_space, solr_core_index_size,
solr_core_replication_index_size, solr_core_indexsearcher_index_commit_size
Renames:
* solr_executor to solr_core_executor or solr_node_executor
* solr_replication to solr_core_replication
* solr_field_cache to solr_core_field_cache
* solr_searcher to solr_core_indexsearcher
* solr_indexwriter to solr_core_indexwriter
* solr_searcher_timer to solr_core_indexsearcher_open_time and
solr_core_indexsearcher_open_warmup_time
* attribute executor_name to name
When aggregating core metrics to the node level:
* don't strip off these attributes: internal, replica_type
* keep solr_core prefix, even when aggregated to node, since they relate to
cores
Moved instrumentedExecutorService() to SolrMetricsContext
---
.../solr/cluster/placement/impl/MetricImpl.java | 16 +++----
.../cluster/placement/impl/NodeMetricImpl.java | 4 +-
.../cluster/placement/impl/ReplicaMetricImpl.java | 2 +-
.../java/org/apache/solr/core/CoreContainer.java | 16 +++----
.../src/java/org/apache/solr/core/SolrCore.java | 51 ++++++++++++----------
.../apache/solr/handler/ReplicationHandler.java | 35 +++++++++------
.../solr/handler/admin/CoreAdminHandler.java | 17 ++++----
.../handler/component/HttpShardHandlerFactory.java | 5 +--
.../apache/solr/metrics/SolrMetricsContext.java | 13 ++++++
.../instruments/AttributedInstrumentFactory.java | 23 +++++-----
.../org/apache/solr/search/SolrFieldCacheBean.java | 4 +-
.../org/apache/solr/search/SolrIndexSearcher.java | 26 ++++++-----
.../org/apache/solr/search/stats/StatsCache.java | 2 +-
.../org/apache/solr/update/SolrIndexWriter.java | 11 ++---
.../org/apache/solr/update/UpdateShardHandler.java | 9 ++--
.../org/apache/solr/util/stats/MetricUtils.java | 36 ++++-----------
.../stats/OtelInstrumentedExecutorService.java | 29 ++++++------
.../cloud/CloudExitableDirectoryReaderTest.java | 4 +-
.../org/apache/solr/cloud/MigrateReplicasTest.java | 4 +-
.../org/apache/solr/cloud/ReplaceNodeTest.java | 4 +-
.../apache/solr/cloud/TestBaseStatsCacheCloud.java | 8 ++--
.../impl/CollectionMetricsBuilderTest.java | 25 +++++------
.../solr/handler/RequestHandlerMetricsTest.java | 10 +++--
.../solr/handler/admin/StatsReloadRaceTest.java | 2 +-
.../solr/metrics/SolrMetricsIntegrationTest.java | 4 +-
.../apache/solr/search/TestMainQueryCaching.java | 2 +-
.../apache/solr/search/TestSolrFieldCacheBean.java | 4 +-
.../apache/solr/update/SolrIndexMetricsTest.java | 16 +++----
.../stats/OtelInstrumentedExecutorServiceTest.java | 26 ++++++-----
.../solr/client/solrj/impl/NodeValueFetcher.java | 11 +++--
solr/solrj/gradle.lockfile | 7 +++
.../apache/solr/cluster/placement/Builders.java | 2 +-
.../org/apache/solr/util/SolrMetricTestUtils.java | 9 +++-
33 files changed, 230 insertions(+), 207 deletions(-)
diff --git
a/solr/core/src/java/org/apache/solr/cluster/placement/impl/MetricImpl.java
b/solr/core/src/java/org/apache/solr/cluster/placement/impl/MetricImpl.java
index 7cc5d7eb347..b3c5782bd13 100644
--- a/solr/core/src/java/org/apache/solr/cluster/placement/impl/MetricImpl.java
+++ b/solr/core/src/java/org/apache/solr/cluster/placement/impl/MetricImpl.java
@@ -23,8 +23,6 @@ import org.apache.solr.cluster.placement.Metric;
/** Base class for {@link Metric} implementations. */
public abstract class MetricImpl<T> implements Metric<T> {
- public static final double GB = 1024 * 1024 * 1024;
-
/**
* Identity converter. It returns the raw value unchanged IFF the value's
type can be cast to the
* generic type of this attribute, otherwise it returns null.
@@ -40,25 +38,25 @@ public abstract class MetricImpl<T> implements Metric<T> {
};
/**
- * Bytes to gigabytes converter. Supports converting number or string
representations of raw
- * values expressed in bytes.
+ * Megabytes to gigabytes converter. Supports converting number or string
representations of raw
+ * values expressed in megabytes.
*/
- public static final Function<Object, Double> BYTES_TO_GB_CONVERTER =
+ public static final Function<Object, Double> MB_TO_GB_CONVERTER =
v -> {
- double sizeInBytes;
+ double sizeInMB;
if (!(v instanceof Number)) {
if (v == null) {
return null;
}
try {
- sizeInBytes = Double.parseDouble(String.valueOf(v));
+ sizeInMB = Double.parseDouble(String.valueOf(v));
} catch (Exception nfe) {
return null;
}
} else {
- sizeInBytes = ((Number) v).doubleValue();
+ sizeInMB = ((Number) v).doubleValue();
}
- return sizeInBytes / GB;
+ return sizeInMB / 1024.0;
};
protected final String name;
diff --git
a/solr/core/src/java/org/apache/solr/cluster/placement/impl/NodeMetricImpl.java
b/solr/core/src/java/org/apache/solr/cluster/placement/impl/NodeMetricImpl.java
index 2e62ffab60c..75fac2406d0 100644
---
a/solr/core/src/java/org/apache/solr/cluster/placement/impl/NodeMetricImpl.java
+++
b/solr/core/src/java/org/apache/solr/cluster/placement/impl/NodeMetricImpl.java
@@ -26,11 +26,11 @@ public class NodeMetricImpl<T> extends MetricImpl<T>
implements NodeMetric<T> {
/** Total disk space in GB. */
public static final NodeMetricImpl<Double> TOTAL_DISK_GB =
- new NodeMetricImpl<>("totaldisk", BYTES_TO_GB_CONVERTER);
+ new NodeMetricImpl<>("totaldisk", MB_TO_GB_CONVERTER);
/** Free (usable) disk space in GB. */
public static final NodeMetricImpl<Double> FREE_DISK_GB =
- new NodeMetricImpl<>("freedisk", BYTES_TO_GB_CONVERTER);
+ new NodeMetricImpl<>("freedisk", MB_TO_GB_CONVERTER);
/** Number of all cores. */
public static final NodeMetricImpl<Integer> NUM_CORES =
diff --git
a/solr/core/src/java/org/apache/solr/cluster/placement/impl/ReplicaMetricImpl.java
b/solr/core/src/java/org/apache/solr/cluster/placement/impl/ReplicaMetricImpl.java
index a7b98e0daf8..2cb0b785809 100644
---
a/solr/core/src/java/org/apache/solr/cluster/placement/impl/ReplicaMetricImpl.java
+++
b/solr/core/src/java/org/apache/solr/cluster/placement/impl/ReplicaMetricImpl.java
@@ -26,7 +26,7 @@ import org.apache.solr.cluster.placement.ReplicaMetric;
public class ReplicaMetricImpl<T> extends MetricImpl<T> implements
ReplicaMetric<T> {
/** Replica index size in GB. */
public static final ReplicaMetricImpl<Double> INDEX_SIZE_GB =
- new ReplicaMetricImpl<>("sizeGB", "solr_core_index_size_bytes",
BYTES_TO_GB_CONVERTER);
+ new ReplicaMetricImpl<>("sizeGB", "solr_core_index_size_megabytes",
MB_TO_GB_CONVERTER);
public ReplicaMetricImpl(String name, String internalName) {
super(name, internalName);
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index a5b6b1ce69c..f9c88031ab6 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -913,17 +913,17 @@ public class CoreContainer {
Path dataHome =
cfg.getSolrDataHome() != null ? cfg.getSolrDataHome() :
cfg.getCoreRootDirectory();
- solrMetricsContext.observableLongGauge(
+ solrMetricsContext.observableDoubleGauge(
"solr_disk_space",
"Disk metrics for Solr's data home directory (" + dataHome + ")",
measurement -> {
try {
var fileStore = Files.getFileStore(dataHome);
measurement.record(
- fileStore.getTotalSpace(),
+ MetricUtils.bytesToMegabytes(fileStore.getTotalSpace()),
containerAttrs.toBuilder().put(TYPE_ATTR,
"total_space").build());
measurement.record(
- fileStore.getUsableSpace(),
+ MetricUtils.bytesToMegabytes(fileStore.getUsableSpace()),
containerAttrs.toBuilder().put(TYPE_ATTR,
"usable_space").build());
} catch (IOException e) {
throw new SolrException(
@@ -932,7 +932,7 @@ public class CoreContainer {
e);
}
},
- OtelUnit.BYTES);
+ OtelUnit.MEGABYTES);
SolrFieldCacheBean fieldCacheBean = new SolrFieldCacheBean();
fieldCacheBean.initializeMetrics(
@@ -940,13 +940,13 @@ public class CoreContainer {
// setup executor to load cores in parallel
coreLoadExecutor =
- MetricUtils.instrumentedExecutorService(
+ solrMetricsContext.instrumentedExecutorService(
ExecutorUtil.newMDCAwareFixedThreadPool(
cfg.getCoreLoadThreadCount(isZooKeeperAware()),
new SolrNamedThreadFactory("coreLoadExecutor")),
- solrMetricsContext,
- SolrInfoBean.Category.CONTAINER,
- "coreLoadExecutor");
+ "solr_node_executor",
+ "coreLoadExecutor",
+ SolrInfoBean.Category.CONTAINER);
coreSorter =
loader.newInstance(
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java
b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index 5beca634fe3..5c719e26745 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -181,6 +181,7 @@ import
org.apache.solr.util.circuitbreaker.CircuitBreakerRegistry;
import org.apache.solr.util.plugin.NamedListInitializedPlugin;
import org.apache.solr.util.plugin.PluginInfoInitialized;
import org.apache.solr.util.plugin.SolrCoreAware;
+import org.apache.solr.util.stats.MetricUtils;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.data.Stat;
import org.eclipse.jetty.io.RuntimeIOException;
@@ -489,7 +490,7 @@ public class SolrCore implements SolrInfoBean, Closeable {
}
/**
- * Recalculates the index size.
+ * Calculates the index size.
*
* <p>Should only be called from {@code getIndexSize}.
*
@@ -515,6 +516,7 @@ public class SolrCore implements SolrInfoBean, Closeable {
return size;
}
+ /** The index size in bytes, of the index that the current searcher is
pointed to. */
public long getIndexSize() {
SolrRequestInfo requestInfo = SolrRequestInfo.getRequestInfo();
if (requestInfo != null) {
@@ -1345,10 +1347,6 @@ public class SolrCore implements SolrInfoBean, Closeable
{
.put(CATEGORY_ATTR, Category.CORE.toString())
.build();
- var baseSearcherTimerMetric =
- parentContext.longHistogram(
- "solr_searcher_timer", "Timer for opening new searchers",
OtelUnit.MILLISECONDS);
-
newSearcherCounter =
new AttributedLongCounter(
parentContext.longCounter(
@@ -1370,13 +1368,19 @@ public class SolrCore implements SolrInfoBean,
Closeable {
newSearcherTimer =
new AttributedLongTimer(
- baseSearcherTimerMetric,
- Attributes.builder().putAll(baseSearcherAttributes).put(TYPE_ATTR,
"new").build());
+ parentContext.longHistogram(
+ "solr_core_indexsearcher_open_time",
+ "Time to open new searchers",
+ OtelUnit.MILLISECONDS),
+ baseSearcherAttributes);
newSearcherWarmupTimer =
new AttributedLongTimer(
- baseSearcherTimerMetric,
- Attributes.builder().putAll(baseSearcherAttributes).put(TYPE_ATTR,
"warmup").build());
+ parentContext.longHistogram(
+ "solr_core_indexsearcher_open_warmup_time",
+ "Time to warmup new searchers",
+ OtelUnit.MILLISECONDS),
+ baseSearcherAttributes);
observables.add(
parentContext.observableLongGauge(
@@ -1387,10 +1391,10 @@ public class SolrCore implements SolrInfoBean,
Closeable {
})));
observables.add(
- parentContext.observableLongGauge(
+ parentContext.observableDoubleGauge(
"solr_core_disk_space",
"Solr core disk space metrics",
- (observableLongMeasurement -> {
+ (observableDoubleMeasurement -> {
// initialize disk total / free metrics
Path dataDirPath = Path.of(dataDir);
@@ -1405,29 +1409,32 @@ public class SolrCore implements SolrInfoBean,
Closeable {
.put(TYPE_ATTR, "usable_space")
.build();
try {
- observableLongMeasurement.record(
- Files.getFileStore(dataDirPath).getTotalSpace(),
totalSpaceAttributes);
+ observableDoubleMeasurement.record(
+
MetricUtils.bytesToMegabytes(Files.getFileStore(dataDirPath).getTotalSpace()),
+ totalSpaceAttributes);
} catch (IOException e) {
- observableLongMeasurement.record(0L, totalSpaceAttributes);
+ observableDoubleMeasurement.record(0.0, totalSpaceAttributes);
}
try {
- observableLongMeasurement.record(
- Files.getFileStore(dataDirPath).getUsableSpace(),
usableSpaceAttributes);
+ observableDoubleMeasurement.record(
+
MetricUtils.bytesToMegabytes(Files.getFileStore(dataDirPath).getUsableSpace()),
+ usableSpaceAttributes);
} catch (IOException e) {
- observableLongMeasurement.record(0L, usableSpaceAttributes);
+ observableDoubleMeasurement.record(0.0, usableSpaceAttributes);
}
}),
- OtelUnit.BYTES));
+ OtelUnit.MEGABYTES));
observables.add(
- parentContext.observableLongGauge(
+ parentContext.observableDoubleGauge(
"solr_core_index_size",
"Index size for a Solr core",
- (observableLongMeasurement -> {
+ (observableDoubleMeasurement -> {
if (!isClosed())
- observableLongMeasurement.record(getIndexSize(),
baseGaugeCoreAttributes);
+ observableDoubleMeasurement.record(
+ MetricUtils.bytesToMegabytes(getIndexSize()),
baseGaugeCoreAttributes);
}),
- OtelUnit.BYTES));
+ OtelUnit.MEGABYTES));
parentContext.observableLongGauge(
"solr_core_segments",
diff --git a/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
b/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
index a1781fddddd..888e371426a 100644
--- a/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
@@ -32,6 +32,7 @@ import static
org.apache.solr.handler.admin.api.ReplicationAPIBase.TLOG_FILE;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.metrics.BatchCallback;
+import io.opentelemetry.api.metrics.ObservableDoubleMeasurement;
import io.opentelemetry.api.metrics.ObservableLongMeasurement;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -114,6 +115,7 @@ import org.apache.solr.util.NumberUtils;
import org.apache.solr.util.PropertiesInputStream;
import org.apache.solr.util.RefCounted;
import org.apache.solr.util.plugin.SolrCoreAware;
+import org.apache.solr.util.stats.MetricUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
@@ -850,59 +852,64 @@ public class ReplicationHandler extends RequestHandlerBase
.build();
super.initializeMetrics(parentContext, replicationAttributes);
- ObservableLongMeasurement indexSizeMetric =
- solrMetricsContext.longGaugeMeasurement(
- "solr_replication_index_size", "Size of the index in bytes",
OtelUnit.BYTES);
+ ObservableDoubleMeasurement indexSizeMetric =
+ solrMetricsContext.doubleGaugeMeasurement(
+ "solr_core_replication_index_size",
+ "Size of the index in megabytes",
+ OtelUnit.MEGABYTES);
ObservableLongMeasurement indexVersionMetric =
solrMetricsContext.longGaugeMeasurement(
- "solr_replication_index_version", "Current index version");
+ "solr_core_replication_index_version", "Current index version");
ObservableLongMeasurement indexGenerationMetric =
solrMetricsContext.longGaugeMeasurement(
- "solr_replication_index_generation", "Current index generation");
+ "solr_core_replication_index_generation", "Current index
generation");
ObservableLongMeasurement isLeaderMetric =
solrMetricsContext.longGaugeMeasurement(
- "solr_replication_is_leader", "Whether this node is a leader (1)
or not (0)");
+ "solr_core_replication_is_leader", "Whether this node is a leader
(1) or not (0)");
ObservableLongMeasurement isFollowerMetric =
solrMetricsContext.longGaugeMeasurement(
- "solr_replication_is_follower", "Whether this node is a follower
(1) or not (0)");
+ "solr_core_replication_is_follower", "Whether this node is a
follower (1) or not (0)");
ObservableLongMeasurement replicationEnabledMetric =
solrMetricsContext.longGaugeMeasurement(
- "solr_replication_is_enabled", "Whether replication is enabled (1)
or not (0)");
+ "solr_core_replication_is_enabled", "Whether replication is
enabled (1) or not (0)");
ObservableLongMeasurement isPollingDisabledMetric =
solrMetricsContext.longGaugeMeasurement(
- "solr_replication_is_polling_disabled", "Whether polling is
disabled (1) or not (0)");
+ "solr_core_replication_is_polling_disabled",
+ "Whether polling is disabled (1) or not (0)");
ObservableLongMeasurement isReplicatingMetric =
solrMetricsContext.longGaugeMeasurement(
- "solr_replication_is_replicating", "Whether replication is in
progress (1) or not (0)");
+ "solr_core_replication_is_replicating",
+ "Whether replication is in progress (1) or not (0)");
ObservableLongMeasurement timeElapsedMetric =
solrMetricsContext.longGaugeMeasurement(
- "solr_replication_time_elapsed",
+ "solr_core_replication_time_elapsed",
"Time elapsed during replication in seconds",
OtelUnit.SECONDS);
ObservableLongMeasurement bytesDownloadedMetric =
solrMetricsContext.longGaugeMeasurement(
- "solr_replication_downloaded_size",
+ "solr_core_replication_downloaded_size",
"Total bytes downloaded during replication",
OtelUnit.BYTES);
ObservableLongMeasurement downloadSpeedMetric =
solrMetricsContext.longGaugeMeasurement(
- "solr_replication_download_speed", "Download speed in bytes per
second");
+ "solr_core_replication_download_speed", "Download speed in bytes
per second");
metricsCallback =
solrMetricsContext.batchCallback(
() -> {
if (core != null && !core.isClosed()) {
- indexSizeMetric.record(core.getIndexSize(),
replicationAttributes);
+ indexSizeMetric.record(
+ MetricUtils.bytesToMegabytes(core.getIndexSize()),
replicationAttributes);
CommitVersionInfo vInfo = getIndexVersion();
if (vInfo != null) {
diff --git
a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
index cf31a418e80..c6d9474e0de 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
@@ -79,7 +79,6 @@ import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.security.AuthorizationContext;
import org.apache.solr.security.PermissionNameProvider;
-import org.apache.solr.util.stats.MetricUtils;
import org.apache.solr.util.tracing.TraceUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -131,18 +130,18 @@ public class CoreAdminHandler extends RequestHandlerBase
implements PermissionNa
public void initializeMetrics(SolrMetricsContext parentContext, Attributes
attributes) {
super.initializeMetrics(parentContext, attributes);
coreAdminAsyncTracker.standardExecutor =
- MetricUtils.instrumentedExecutorService(
+ solrMetricsContext.instrumentedExecutorService(
coreAdminAsyncTracker.standardExecutor,
- solrMetricsContext,
- getCategory(),
- "parallelCoreAdminExecutor");
+ "solr_node_executor",
+ "asyncCoreAdminExecutor",
+ getCategory());
coreAdminAsyncTracker.expensiveExecutor =
- MetricUtils.instrumentedExecutorService(
+ solrMetricsContext.instrumentedExecutorService(
coreAdminAsyncTracker.expensiveExecutor,
- solrMetricsContext,
- getCategory(),
- "parallelCoreExpensiveAdminExecutor");
+ "solr_node_executor",
+ "asyncCoreExpensiveAdminExecutor",
+ getCategory());
}
@Override
diff --git
a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
index 07e57fe3cb7..0a78e179019 100644
---
a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
+++
b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
@@ -61,7 +61,6 @@ import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.security.HttpClientBuilderPlugin;
import org.apache.solr.update.UpdateShardHandlerConfig;
import org.apache.solr.util.stats.InstrumentedHttpListenerFactory;
-import org.apache.solr.util.stats.MetricUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -436,7 +435,7 @@ public class HttpShardHandlerFactory extends
ShardHandlerFactory
solrMetricsContext = parentContext.getChildContext(this);
httpListenerFactory.initializeMetrics(solrMetricsContext,
Attributes.empty());
commExecutor =
- MetricUtils.instrumentedExecutorService(
- commExecutor, solrMetricsContext, SolrInfoBean.Category.QUERY,
"httpShardExecutor");
+ solrMetricsContext.instrumentedExecutorService(
+ commExecutor, "solr_core_executor", "httpShardExecutor",
SolrInfoBean.Category.QUERY);
}
}
diff --git a/solr/core/src/java/org/apache/solr/metrics/SolrMetricsContext.java
b/solr/core/src/java/org/apache/solr/metrics/SolrMetricsContext.java
index ddd069bdfeb..db338da6b37 100644
--- a/solr/core/src/java/org/apache/solr/metrics/SolrMetricsContext.java
+++ b/solr/core/src/java/org/apache/solr/metrics/SolrMetricsContext.java
@@ -35,9 +35,12 @@ import
io.opentelemetry.api.metrics.ObservableLongMeasurement;
import io.opentelemetry.api.metrics.ObservableMeasurement;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.ExecutorService;
import java.util.function.Consumer;
import org.apache.solr.common.util.IOUtils;
+import org.apache.solr.core.SolrInfoBean;
import org.apache.solr.metrics.otel.OtelUnit;
+import org.apache.solr.util.stats.OtelInstrumentedExecutorService;
/**
* This class represents a metrics context that ties together components with
the same life-cycle
@@ -253,6 +256,16 @@ public class SolrMetricsContext {
return batchCallback;
}
+ /** Returns an instrumented wrapper over the given executor service. */
+ public ExecutorService instrumentedExecutorService(
+ ExecutorService delegate,
+ String metricNamePrefix,
+ String executorName,
+ SolrInfoBean.Category category) {
+ return new OtelInstrumentedExecutorService(
+ delegate, this, metricNamePrefix, executorName, category);
+ }
+
public void unregister() {
IOUtils.closeQuietly(closeables);
closeables.clear();
diff --git
a/solr/core/src/java/org/apache/solr/metrics/otel/instruments/AttributedInstrumentFactory.java
b/solr/core/src/java/org/apache/solr/metrics/otel/instruments/AttributedInstrumentFactory.java
index 189672bcb0f..b4cd5cd514f 100644
---
a/solr/core/src/java/org/apache/solr/metrics/otel/instruments/AttributedInstrumentFactory.java
+++
b/solr/core/src/java/org/apache/solr/metrics/otel/instruments/AttributedInstrumentFactory.java
@@ -16,10 +16,8 @@
*/
package org.apache.solr.metrics.otel.instruments;
-import static org.apache.solr.handler.component.SearchHandler.INTERNAL_ATTR;
import static org.apache.solr.metrics.SolrCoreMetricManager.COLLECTION_ATTR;
import static org.apache.solr.metrics.SolrCoreMetricManager.CORE_ATTR;
-import static org.apache.solr.metrics.SolrCoreMetricManager.REPLICA_TYPE_ATTR;
import static org.apache.solr.metrics.SolrCoreMetricManager.SHARD_ATTR;
import io.opentelemetry.api.common.AttributeKey;
@@ -36,16 +34,19 @@ import org.apache.solr.metrics.otel.OtelUnit;
* Factory for creating metrics instruments that can write to either single or
dual registries (core
* and node).
*/
+// TODO consider making this a base abstraction with a simple impl and another
"Dual" one.
public class AttributedInstrumentFactory {
+ // These attributes are on a core but don't want to aggregate them.
private static final Set<AttributeKey<?>> FILTER_ATTRS_SET =
- Set.of(COLLECTION_ATTR, CORE_ATTR, SHARD_ATTR, REPLICA_TYPE_ATTR,
INTERNAL_ATTR);
+ Set.of(COLLECTION_ATTR, CORE_ATTR, SHARD_ATTR);
+
private final SolrMetricsContext primaryMetricsContext;
private final Attributes primaryAttributes;
private final boolean aggregateToNodeRegistry;
private final boolean primaryIsNodeRegistry;
- private SolrMetricsContext nodeMetricsContext = null;
- private Attributes nodeAttributes = null;
+ private final SolrMetricsContext nodeMetricsContext;
+ private final Attributes nodeAttributes;
public AttributedInstrumentFactory(
SolrMetricsContext primaryMetricsContext,
@@ -66,6 +67,9 @@ public class AttributedInstrumentFactory {
new SolrMetricsContext(
primaryMetricsContext.getMetricManager(),
SolrMetricManager.NODE_REGISTRY);
this.nodeAttributes = createNodeAttributes(primaryAttributes);
+ } else {
+ this.nodeMetricsContext = null;
+ this.nodeAttributes = null;
}
}
@@ -77,8 +81,7 @@ public class AttributedInstrumentFactory {
Attributes finalNodeAttrs = appendAttributes(nodeAttributes,
additionalAttributes);
LongCounter primaryCounter =
primaryMetricsContext.longCounter(metricName, description);
- LongCounter nodeCounter =
- nodeMetricsContext.longCounter(toNodeMetricName(metricName),
description);
+ LongCounter nodeCounter = nodeMetricsContext.longCounter(metricName,
description);
return new DualRegistryAttributedLongCounter(
primaryCounter, finalPrimaryAttrs, nodeCounter, finalNodeAttrs);
} else {
@@ -97,8 +100,7 @@ public class AttributedInstrumentFactory {
LongUpDownCounter primaryCounter =
primaryMetricsContext.longUpDownCounter(metricName, description);
- LongUpDownCounter nodeCounter =
- nodeMetricsContext.longUpDownCounter(toNodeMetricName(metricName),
description);
+ LongUpDownCounter nodeCounter =
nodeMetricsContext.longUpDownCounter(metricName, description);
return new DualRegistryAttributedLongUpDownCounter(
primaryCounter, finalPrimaryAttrs, nodeCounter, finalNodeAttrs);
} else {
@@ -117,8 +119,7 @@ public class AttributedInstrumentFactory {
Attributes finalNodeAttrs = appendAttributes(nodeAttributes,
additionalAttributes);
LongHistogram primaryHistogram =
primaryMetricsContext.longHistogram(metricName, description, unit);
- LongHistogram nodeHistogram =
- nodeMetricsContext.longHistogram(toNodeMetricName(metricName),
description, unit);
+ LongHistogram nodeHistogram =
nodeMetricsContext.longHistogram(metricName, description, unit);
return new DualRegistryAttributedLongTimer(
primaryHistogram, finalPrimaryAttrs, nodeHistogram, finalNodeAttrs);
} else {
diff --git a/solr/core/src/java/org/apache/solr/search/SolrFieldCacheBean.java
b/solr/core/src/java/org/apache/solr/search/SolrFieldCacheBean.java
index 883dcaf66a0..fb8d92120a2 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrFieldCacheBean.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrFieldCacheBean.java
@@ -60,10 +60,10 @@ public class SolrFieldCacheBean implements SolrInfoBean {
this.solrMetricsContext = parentContext;
var solrCacheStats =
solrMetricsContext.longGaugeMeasurement(
- "solr_field_cache_entries", "Number of field cache entries");
+ "solr_core_field_cache_entries", "Number of field cache entries");
var solrCacheSize =
solrMetricsContext.longGaugeMeasurement(
- "solr_field_cache_size", "Size of field cache in bytes",
OtelUnit.BYTES);
+ "solr_core_field_cache_size", "Size of field cache in bytes",
OtelUnit.BYTES);
this.toClose =
solrMetricsContext.batchCallback(
() -> {
diff --git a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
index 15cf7ecc431..3604f84d0fc 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
@@ -120,6 +120,7 @@ import org.apache.solr.update.IndexFingerprint;
import org.apache.solr.update.SolrIndexConfig;
import org.apache.solr.util.IOFunction;
import org.apache.solr.util.ThreadCpuTimer;
+import org.apache.solr.util.stats.MetricUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -611,7 +612,7 @@ public class SolrIndexSearcher extends IndexSearcher
implements Closeable, SolrI
caffeineCache.initializeMetrics(
solrMetricsContext,
core.getCoreAttributes().toBuilder().put(NAME_ATTR,
cache.name()).build(),
- "solr_searcher_cache");
+ "solr_core_indexsearcher_cache");
}
}
initializeMetrics(solrMetricsContext, core.getCoreAttributes());
@@ -2626,12 +2627,14 @@ public class SolrIndexSearcher extends IndexSearcher
implements Closeable, SolrI
warmupTimer =
new AttributedLongTimer(
solrMetricsContext.longHistogram(
- "solr_searcher_warmup_time", "Searcher warmup time (ms)",
OtelUnit.MILLISECONDS),
+ "solr_core_indexsearcher_warmup_time",
+ "Searcher warmup time (ms)",
+ OtelUnit.MILLISECONDS),
baseAttributes);
toClose.add(
solrMetricsContext.observableLongCounter(
- "solr_searcher_live_docs_cache",
+ "solr_core_indexsearcher_live_docs_cache",
"LiveDocs cache metrics",
obs -> {
obs.record(
@@ -2647,7 +2650,7 @@ public class SolrIndexSearcher extends IndexSearcher
implements Closeable, SolrI
// reader stats (numeric)
toClose.add(
solrMetricsContext.observableLongGauge(
- "solr_searcher_index_num_docs",
+ "solr_core_indexsearcher_index_num_docs",
"Number of live docs in the index",
obs -> {
try {
@@ -2659,7 +2662,7 @@ public class SolrIndexSearcher extends IndexSearcher
implements Closeable, SolrI
toClose.add(
solrMetricsContext.observableLongGauge(
- "solr_searcher_index_docs",
+ "solr_core_indexsearcher_index_docs",
"Total number of docs in the index (including deletions)",
obs -> {
try {
@@ -2670,7 +2673,7 @@ public class SolrIndexSearcher extends IndexSearcher
implements Closeable, SolrI
// indexVersion (numeric)
toClose.add(
solrMetricsContext.observableLongGauge(
- "solr_searcher_index_version",
+ "solr_core_indexsearcher_index_version",
"Lucene index version",
obs -> {
try {
@@ -2680,20 +2683,21 @@ public class SolrIndexSearcher extends IndexSearcher
implements Closeable, SolrI
}));
// size of the currently opened commit
toClose.add(
- solrMetricsContext.observableLongGauge(
- "solr_searcher_index_commit_size_bytes",
- "Size of the current index commit (bytes)",
+ solrMetricsContext.observableDoubleGauge(
+ "solr_core_indexsearcher_index_commit_size",
+ "Size of the current index commit (megabytes)",
obs -> {
try {
long total = 0L;
for (String file : reader.getIndexCommit().getFileNames()) {
total += DirectoryFactory.sizeOf(reader.directory(), file);
}
- obs.record(total, baseAttributes);
+ obs.record(MetricUtils.bytesToMegabytes(total),
baseAttributes);
} catch (Exception e) {
// skip recording if unavailable (no nullNumber in OTel)
}
- }));
+ },
+ OtelUnit.MEGABYTES));
}
public long getWarmupTime() {
diff --git a/solr/core/src/java/org/apache/solr/search/stats/StatsCache.java
b/solr/core/src/java/org/apache/solr/search/stats/StatsCache.java
index 5f163e842af..e79051449de 100644
--- a/solr/core/src/java/org/apache/solr/search/stats/StatsCache.java
+++ b/solr/core/src/java/org/apache/solr/search/stats/StatsCache.java
@@ -336,7 +336,7 @@ public abstract class StatsCache implements
PluginInfoInitialized, SolrInfoBean
.build();
this.toClose =
solrMetricsContext.observableLongGauge(
- "solr_searcher_termstats_cache",
+ "solr_core_indexsearcher_termstats_cache",
"Operation counts for the searcher term statistics cache, reported
per operation type",
obs -> {
var cacheMetrics = getCacheMetrics();
diff --git a/solr/core/src/java/org/apache/solr/update/SolrIndexWriter.java
b/solr/core/src/java/org/apache/solr/update/SolrIndexWriter.java
index b17c5ecd74e..2f028f08587 100644
--- a/solr/core/src/java/org/apache/solr/update/SolrIndexWriter.java
+++ b/solr/core/src/java/org/apache/solr/update/SolrIndexWriter.java
@@ -258,21 +258,22 @@ public class SolrIndexWriter extends IndexWriter {
mergesCounter =
solrMetricsContext.longCounter(
- "solr_indexwriter_merges", "Number of total merge operations, " +
descSuffix);
+ "solr_core_indexwriter_merges", "Number of total merge operations,
" + descSuffix);
mergeDocsCounter =
solrMetricsContext.longCounter(
- "solr_indexwriter_merge_docs", "Number of documents involved in
merge, " + descSuffix);
+ "solr_core_indexwriter_merge_docs",
+ "Number of documents involved in merge, " + descSuffix);
mergeSegmentsCounter =
solrMetricsContext.longCounter(
- "solr_indexwriter_merge_segments",
+ "solr_core_indexwriter_merge_segments",
"Number of segments involved in merge, " + descSuffix);
flushesCounter =
solrMetricsContext.longCounter(
- "solr_indexwriter_flushes", "Number of flush to disk operations
triggered");
+ "solr_core_indexwriter_flushes", "Number of flush to disk
operations triggered");
var mergesTimerBase =
solrMetricsContext.longHistogram(
- "solr_indexwriter_merge_time",
+ "solr_core_indexwriter_merge_time",
"Time spent merging segments, " + descSuffix,
OtelUnit.MILLISECONDS);
majorMergeTimer =
diff --git a/solr/core/src/java/org/apache/solr/update/UpdateShardHandler.java
b/solr/core/src/java/org/apache/solr/update/UpdateShardHandler.java
index 3eab808565f..8410de18ffa 100644
--- a/solr/core/src/java/org/apache/solr/update/UpdateShardHandler.java
+++ b/solr/core/src/java/org/apache/solr/update/UpdateShardHandler.java
@@ -37,7 +37,6 @@ import org.apache.solr.security.HttpClientBuilderPlugin;
import org.apache.solr.update.processor.DistributedUpdateProcessor;
import org.apache.solr.update.processor.DistributingUpdateProcessorFactory;
import org.apache.solr.util.stats.InstrumentedHttpListenerFactory;
-import org.apache.solr.util.stats.MetricUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -167,11 +166,11 @@ public class UpdateShardHandler implements SolrInfoBean {
solrMetricsContext = parentContext.getChildContext(this);
trackHttpSolrMetrics.initializeMetrics(solrMetricsContext,
Attributes.empty());
updateExecutor =
- MetricUtils.instrumentedExecutorService(
- updateExecutor, solrMetricsContext, getCategory(),
"updateOnlyExecutor");
+ solrMetricsContext.instrumentedExecutorService(
+ updateExecutor, "solr_core_executor", "updateOnlyExecutor",
getCategory());
recoveryExecutor =
- MetricUtils.instrumentedExecutorService(
- recoveryExecutor, solrMetricsContext, getCategory(),
"recoveryExecutor");
+ solrMetricsContext.instrumentedExecutorService(
+ recoveryExecutor, "solr_core_executor", "recoveryExecutor",
getCategory());
}
@Override
diff --git a/solr/core/src/java/org/apache/solr/util/stats/MetricUtils.java
b/solr/core/src/java/org/apache/solr/util/stats/MetricUtils.java
index 23e6ca33ff2..5c878ab6476 100644
--- a/solr/core/src/java/org/apache/solr/util/stats/MetricUtils.java
+++ b/solr/core/src/java/org/apache/solr/util/stats/MetricUtils.java
@@ -18,24 +18,14 @@ package org.apache.solr.util.stats;
import com.codahale.metrics.Snapshot;
import com.codahale.metrics.Timer;
-import java.lang.invoke.MethodHandles;
import java.lang.management.OperatingSystemMXBean;
-import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
-import java.util.function.Predicate;
import org.apache.solr.common.util.NamedList;
-import org.apache.solr.core.SolrInfoBean;
-import org.apache.solr.metrics.SolrMetricsContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/** Metrics specific utility functions. */
public class MetricUtils {
- private static final Logger log =
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
- public static final String METRIC_NAME = "metric";
public static final String VALUE = "value";
- public static final String VALUES = "values";
private static final String MS = "_ms";
@@ -59,8 +49,6 @@ public class MetricUtils {
private static final String P999 = "p999";
private static final String P999_MS = P999 + MS;
- public static final Predicate<CharSequence> ALL_PROPERTIES = (name) -> true;
-
/**
* Adds metrics from a Timer to a NamedList, using well-known back-compat
names.
*
@@ -90,13 +78,14 @@ public class MetricUtils {
return ns / TimeUnit.MILLISECONDS.toNanos(1);
}
- // optionally convert ns to ms
- static double nsToMs(boolean convert, double value) {
- if (convert) {
- return nsToMs(value);
- } else {
- return value;
- }
+ /**
+ * Converts bytes to megabytes.
+ *
+ * @param bytes the number of bytes
+ * @return the number of megabytes
+ */
+ public static double bytesToMegabytes(long bytes) {
+ return bytes / (1024.0 * 1024.0);
}
/**
@@ -110,13 +99,4 @@ public class MetricUtils {
"com.sun.management.UnixOperatingSystemMXBean",
"com.ibm.lang.management.OperatingSystemMXBean"
};
-
- /** Returns an instrumented wrapper over the given executor service. */
- public static ExecutorService instrumentedExecutorService(
- ExecutorService delegate,
- SolrMetricsContext ctx,
- SolrInfoBean.Category category,
- String name) {
- return new OtelInstrumentedExecutorService(delegate, ctx, category, name);
- }
}
diff --git
a/solr/core/src/java/org/apache/solr/util/stats/OtelInstrumentedExecutorService.java
b/solr/core/src/java/org/apache/solr/util/stats/OtelInstrumentedExecutorService.java
index b0d76fcc43c..aaad15d6bbf 100644
---
a/solr/core/src/java/org/apache/solr/util/stats/OtelInstrumentedExecutorService.java
+++
b/solr/core/src/java/org/apache/solr/util/stats/OtelInstrumentedExecutorService.java
@@ -17,9 +17,9 @@
package org.apache.solr.util.stats;
import static org.apache.solr.metrics.SolrMetricProducer.CATEGORY_ATTR;
+import static org.apache.solr.metrics.SolrMetricProducer.NAME_ATTR;
import static org.apache.solr.metrics.SolrMetricProducer.TYPE_ATTR;
-import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import java.util.ArrayList;
import java.util.Collection;
@@ -47,8 +47,6 @@ import
org.apache.solr.metrics.otel.instruments.AttributedLongUpDownCounter;
* com.codahale.metrics.InstrumentedExecutorService.
*/
public class OtelInstrumentedExecutorService implements ExecutorService {
- public static final AttributeKey<String> EXECUTOR_NAME_ATTR =
- AttributeKey.stringKey("executor_name");
private final ExecutorService delegate;
private final String executorName;
@@ -62,8 +60,9 @@ public class OtelInstrumentedExecutorService implements
ExecutorService {
public OtelInstrumentedExecutorService(
ExecutorService delegate,
SolrMetricsContext ctx,
- SolrInfoBean.Category category,
- String executorName) {
+ String metricPrefix,
+ String executorName,
+ SolrInfoBean.Category category) {
this.delegate = delegate;
this.executorName = executorName;
this.observableMetrics = new ArrayList<>();
@@ -71,12 +70,12 @@ public class OtelInstrumentedExecutorService implements
ExecutorService {
Attributes attrs =
Attributes.builder()
.put(CATEGORY_ATTR, category.toString())
- .put(EXECUTOR_NAME_ATTR, executorName)
+ .put(NAME_ATTR, executorName)
.build();
// Each metric type needs a separate name to avoid obscuring other types
var executorTaskCounter =
- ctx.longCounter("solr_executor_tasks", "Number of ExecutorService
tasks");
+ ctx.longCounter(metricPrefix + "_tasks", "Number of ExecutorService
tasks");
this.submitted =
new AttributedLongCounter(
executorTaskCounter, attrs.toBuilder().put(TYPE_ATTR,
"submitted").build());
@@ -86,11 +85,11 @@ public class OtelInstrumentedExecutorService implements
ExecutorService {
this.running =
new AttributedLongUpDownCounter(
ctx.longUpDownCounter(
- "solr_executor_tasks_running", "Number of running
ExecutorService tasks"),
+ metricPrefix + "_tasks_running", "Number of running
ExecutorService tasks"),
attrs);
var executorTaskTimer =
ctx.longHistogram(
- "solr_executor_task_times", "Timing of ExecutorService tasks",
OtelUnit.MILLISECONDS);
+ metricPrefix + "_task_times", "Timing of ExecutorService tasks",
OtelUnit.MILLISECONDS);
this.idle =
new AttributedLongTimer(
executorTaskTimer, attrs.toBuilder().put(TYPE_ATTR,
"idle").build());
@@ -102,7 +101,7 @@ public class OtelInstrumentedExecutorService implements
ExecutorService {
ThreadPoolExecutor threadPool = (ThreadPoolExecutor) delegate;
observableMetrics.add(
ctx.observableLongGauge(
- "solr_executor_thread_pool_size",
+ metricPrefix + "_thread_pool_size",
"Thread pool size",
measurement -> {
measurement.record(
@@ -117,7 +116,7 @@ public class OtelInstrumentedExecutorService implements
ExecutorService {
final BlockingQueue<Runnable> taskQueue = threadPool.getQueue();
observableMetrics.add(
ctx.observableLongGauge(
- "solr_executor_thread_pool_tasks",
+ metricPrefix + "_thread_pool_tasks",
"Thread pool task counts",
measurement -> {
measurement.record(
@@ -136,7 +135,7 @@ public class OtelInstrumentedExecutorService implements
ExecutorService {
ForkJoinPool forkJoinPool = (ForkJoinPool) delegate;
observableMetrics.add(
ctx.observableLongGauge(
- "solr_executor_fork_join_pool_tasks",
+ metricPrefix + "_fork_join_pool_tasks",
"Fork join pool task counts",
measurement -> {
measurement.record(
@@ -148,7 +147,7 @@ public class OtelInstrumentedExecutorService implements
ExecutorService {
}));
observableMetrics.add(
ctx.observableLongGauge(
- "solr_executor_fork_join_pool_threads",
+ metricPrefix + "_fork_join_pool_threads",
"Fork join pool thread counts",
measurement -> {
measurement.record(
@@ -217,13 +216,13 @@ public class OtelInstrumentedExecutorService implements
ExecutorService {
@Override
public void shutdown() {
delegate.shutdown();
- observableMetrics.stream().forEach(IOUtils::closeQuietly);
+ IOUtils.closeQuietly(observableMetrics);
}
@Override
public List<Runnable> shutdownNow() {
List<Runnable> tasks = delegate.shutdownNow();
- observableMetrics.stream().forEach(IOUtils::closeQuietly);
+ IOUtils.closeQuietly(observableMetrics);
return tasks;
}
diff --git
a/solr/core/src/test/org/apache/solr/cloud/CloudExitableDirectoryReaderTest.java
b/solr/core/src/test/org/apache/solr/cloud/CloudExitableDirectoryReaderTest.java
index 8eb6daf2ceb..041ab757eb8 100644
---
a/solr/core/src/test/org/apache/solr/cloud/CloudExitableDirectoryReaderTest.java
+++
b/solr/core/src/test/org/apache/solr/cloud/CloudExitableDirectoryReaderTest.java
@@ -101,7 +101,7 @@ public class CloudExitableDirectoryReaderTest extends
SolrCloudTestCase {
var reader =
jetty.getCoreContainer().getMetricManager().getPrometheusMetricReader("solr.node");
- var errorsSnapshots = reader.collect((name) ->
name.equals("solr_node_requests_errors"));
+ var errorsSnapshots =
reader.collect("solr_node_requests_errors"::equals);
long errorCount = 0L;
if (errorsSnapshots.size() > 0) {
@@ -118,7 +118,7 @@ public class CloudExitableDirectoryReaderTest extends
SolrCloudTestCase {
Long old = fiveHundredsByNode.put(jetty.getNodeName(), errorCount);
assertNull("expecting uniq nodenames", old);
- var requestsSnapshots = reader.collect((name) ->
name.equals("solr_node_requests"));
+ var requestsSnapshots = reader.collect("solr_node_requests"::equals);
if (requestsSnapshots.size() > 0) {
var requestsSnapshot =
diff --git a/solr/core/src/test/org/apache/solr/cloud/MigrateReplicasTest.java
b/solr/core/src/test/org/apache/solr/cloud/MigrateReplicasTest.java
index 46e2fb41a99..80a8377e791 100644
--- a/solr/core/src/test/org/apache/solr/cloud/MigrateReplicasTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/MigrateReplicasTest.java
@@ -211,7 +211,7 @@ public class MigrateReplicasTest extends SolrCloudTestCase {
var dp =
SolrMetricTestUtils.getGaugeDatapoint(
core,
- "solr_replication_is_replicating",
+ "solr_core_replication_is_replicating",
SolrMetricTestUtils.newCloudLabelsBuilder(core)
.label("category",
SolrInfoBean.Category.REPLICATION.toString())
.label("handler", "/replication")
@@ -220,7 +220,7 @@ public class MigrateReplicasTest extends SolrCloudTestCase {
double isReplicating = dp.getValue();
assertTrue(
- "solr_replication_is_replicating should be 0 or 1, got: " +
isReplicating,
+ "solr_core_replication_is_replicating should be 0 or 1, got: " +
isReplicating,
isReplicating == 0.0 || isReplicating == 1.0);
}
}
diff --git a/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
b/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
index d031196754b..e34d8bf6fda 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
@@ -189,7 +189,7 @@ public class ReplaceNodeTest extends SolrCloudTestCase {
var dp =
SolrMetricTestUtils.getGaugeDatapoint(
core,
- "solr_replication_is_replicating",
+ "solr_core_replication_is_replicating",
SolrMetricTestUtils.newCloudLabelsBuilder(core)
.label("category",
SolrInfoBean.Category.REPLICATION.toString())
.label("handler", "/replication")
@@ -198,7 +198,7 @@ public class ReplaceNodeTest extends SolrCloudTestCase {
double isReplicating = dp.getValue();
assertTrue(
- "solr_replication_is_replicating should be 0 or 1, got: " +
isReplicating,
+ "solr_core_replication_is_replicating should be 0 or 1, got: " +
isReplicating,
isReplicating == 0.0 || isReplicating == 1.0);
}
}
diff --git
a/solr/core/src/test/org/apache/solr/cloud/TestBaseStatsCacheCloud.java
b/solr/core/src/test/org/apache/solr/cloud/TestBaseStatsCacheCloud.java
index a42e4bfb7e0..17844bc68cc 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestBaseStatsCacheCloud.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestBaseStatsCacheCloud.java
@@ -153,7 +153,7 @@ public abstract class TestBaseStatsCacheCloud extends
SolrCloudTestCase {
String output = new String(in.readAllBytes(),
StandardCharsets.UTF_8);
for (String line : output.lines().toList()) {
- if (line.startsWith("solr_searcher_termstats_cache")) {
+ if (line.startsWith("solr_core_indexsearcher_termstats_cache")) {
String type = extractTypeAttribute(line);
long value = extractMetricValue(line);
switch (type) {
@@ -242,7 +242,7 @@ public abstract class TestBaseStatsCacheCloud extends
SolrCloudTestCase {
/**
* Extract type label value from Prometheus format line
- * "solr_searcher_stats_cache{...type="lookups",...}" -> "lookups"
+ * "solr_core_indexsearcher_termstats_cache{...type="lookups",...}" ->
"lookups"
*/
private String extractTypeAttribute(String line) {
java.util.regex.Pattern pattern =
java.util.regex.Pattern.compile("\\btype=\"([^\"]+)\"");
@@ -254,8 +254,8 @@ public abstract class TestBaseStatsCacheCloud extends
SolrCloudTestCase {
}
/**
- * Extract numeric value from Prometheus format line.
"solr_searcher_stats_cache{...} 123.0" ->
- * 123
+ * Extract numeric value from Prometheus format line.
+ * "solr_core_indexsearcher_termstats_cache{...} 123.0" -> 123
*/
private long extractMetricValue(String line) {
String valueStr = line.substring(line.lastIndexOf(' ') + 1);
diff --git
a/solr/core/src/test/org/apache/solr/cluster/placement/impl/CollectionMetricsBuilderTest.java
b/solr/core/src/test/org/apache/solr/cluster/placement/impl/CollectionMetricsBuilderTest.java
index 48ca86f0151..a17032d2d09 100644
---
a/solr/core/src/test/org/apache/solr/cluster/placement/impl/CollectionMetricsBuilderTest.java
+++
b/solr/core/src/test/org/apache/solr/cluster/placement/impl/CollectionMetricsBuilderTest.java
@@ -17,23 +17,24 @@
package org.apache.solr.cluster.placement.impl;
import java.util.Arrays;
-import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.SolrTestCase;
import org.apache.solr.cluster.placement.CollectionMetrics;
import org.apache.solr.cluster.placement.ReplicaMetric;
import org.apache.solr.cluster.placement.ReplicaMetrics;
import org.apache.solr.cluster.placement.ShardMetrics;
import org.junit.Test;
-public class CollectionMetricsBuilderTest extends SolrTestCaseJ4 {
+public class CollectionMetricsBuilderTest extends SolrTestCase {
+
+ // Some arbitrary/bogus metric; doesn't matter in this unit test
+ private static final ReplicaMetric<Double> METRIC = new
ReplicaMetricImpl<>("aMetric", "aMetric");
@Test
public void testMultipleShardLeaders() {
CollectionMetricsBuilder.ReplicaMetricsBuilder r1 =
- createReplicaMetricsBuilder(
- "r1", ReplicaMetricImpl.INDEX_SIZE_GB, 1.5 * MetricImpl.GB, true);
+ createReplicaMetricsBuilder("r1", METRIC, 1.5, true);
CollectionMetricsBuilder.ReplicaMetricsBuilder r2 =
- createReplicaMetricsBuilder(
- "r2", ReplicaMetricImpl.INDEX_SIZE_GB, 2.5 * MetricImpl.GB, true);
+ createReplicaMetricsBuilder("r2", METRIC, 2.5, true);
CollectionMetrics metrics =
collectionMetricsFromShardReplicaBuilders("shard1", r1, r2);
ShardMetrics shardMetrics = metrics.getShardMetrics("shard1").get();
@@ -45,20 +46,18 @@ public class CollectionMetricsBuilderTest extends
SolrTestCaseJ4 {
// Both replicas claimed to be shard leader, so either metric value is
acceptable, and an
// exception should not be raised
- Double indexSize =
leaderMetrics.getReplicaMetric(ReplicaMetricImpl.INDEX_SIZE_GB).get();
+ Double metricVal = leaderMetrics.getReplicaMetric(METRIC).get();
assertTrue(
- "Metric value " + indexSize + " should have matched one of the
replica's values",
- indexSize.equals(1.5) || indexSize.equals(2.5));
+ "Metric value " + metricVal + " should have matched one of the
replica's values",
+ metricVal.equals(1.5) || metricVal.equals(2.5));
}
@Test
public void testNoShardLeader() {
CollectionMetricsBuilder.ReplicaMetricsBuilder r1 =
- createReplicaMetricsBuilder(
- "r1", ReplicaMetricImpl.INDEX_SIZE_GB, 1.5 * MetricImpl.GB, false);
+ createReplicaMetricsBuilder("r1", METRIC, 1.5, false);
CollectionMetricsBuilder.ReplicaMetricsBuilder r2 =
- createReplicaMetricsBuilder(
- "r2", ReplicaMetricImpl.INDEX_SIZE_GB, 2.5 * MetricImpl.GB, false);
+ createReplicaMetricsBuilder("r2", METRIC, 2.5, false);
CollectionMetrics metrics =
collectionMetricsFromShardReplicaBuilders("shard1", r1, r2);
assertTrue("Shard metrics not found",
metrics.getShardMetrics("shard1").isPresent());
diff --git
a/solr/core/src/test/org/apache/solr/handler/RequestHandlerMetricsTest.java
b/solr/core/src/test/org/apache/solr/handler/RequestHandlerMetricsTest.java
index e338939b30c..4c7685692b1 100644
--- a/solr/core/src/test/org/apache/solr/handler/RequestHandlerMetricsTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/RequestHandlerMetricsTest.java
@@ -121,30 +121,34 @@ public class RequestHandlerMetricsTest extends
SolrCloudTestCase {
(CounterSnapshot.CounterDataPointSnapshot)
SolrMetricTestUtils.getDataPointSnapshot(
nodeReader,
- "solr_node_requests",
+ "solr_core_requests",
Labels.builder()
.label("category", "QUERY")
.label("handler", "/select")
+ .label("internal", "false")
+ .label("replica_type", "NRT")
.label("otel_scope_name", "org.apache.solr")
.build());
CounterSnapshot.CounterDataPointSnapshot nodeUpdateRequests =
(CounterSnapshot.CounterDataPointSnapshot)
SolrMetricTestUtils.getDataPointSnapshot(
nodeReader,
- "solr_node_requests",
+ "solr_core_requests",
Labels.builder()
.label("category", "UPDATE")
.label("handler", "/update")
+ .label("replica_type", "NRT")
.label("otel_scope_name", "org.apache.solr")
.build());
CounterSnapshot.CounterDataPointSnapshot nodeSubmittedOps =
(CounterSnapshot.CounterDataPointSnapshot)
SolrMetricTestUtils.getDataPointSnapshot(
nodeReader,
- "solr_node_update_submitted_ops",
+ "solr_core_update_submitted_ops",
Labels.builder()
.label("category", "UPDATE")
.label("ops", "adds")
+ .label("replica_type", "NRT")
.label("otel_scope_name", "org.apache.solr")
.build());
diff --git
a/solr/core/src/test/org/apache/solr/handler/admin/StatsReloadRaceTest.java
b/solr/core/src/test/org/apache/solr/handler/admin/StatsReloadRaceTest.java
index 641a6c66ed3..f54d163ebb4 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/StatsReloadRaceTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/StatsReloadRaceTest.java
@@ -144,7 +144,7 @@ public class StatsReloadRaceTest extends SolrTestCaseJ4 {
var datapoint =
SolrMetricTestUtils.getGaugeDatapoint(
reader,
- "solr_searcher_index_version",
+ "solr_core_indexsearcher_index_version",
SolrMetricTestUtils.newStandaloneLabelsBuilder(core)
.label("category", "SEARCHER")
.build());
diff --git
a/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java
b/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java
index 8d646539c5f..dd599e1f1b4 100644
--- a/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java
@@ -84,8 +84,8 @@ public class SolrMetricsIntegrationTest extends
SolrTestCaseJ4 {
assertNotNull(getGaugeOpt(reader, "solr_cores_loaded", "permanent"));
assertNotNull(getGaugeOpt(reader, "solr_cores_loaded", "unloaded"));
- assertNotNull(getGaugeOpt(reader, "solr_disk_space_bytes", "total_space"));
- assertNotNull(getGaugeOpt(reader, "solr_disk_space_bytes",
"usable_space"));
+ assertNotNull(getGaugeOpt(reader, "solr_disk_space_megabytes",
"total_space"));
+ assertNotNull(getGaugeOpt(reader, "solr_disk_space_megabytes",
"usable_space"));
}
private static GaugeDataPointSnapshot getGaugeOpt(
diff --git
a/solr/core/src/test/org/apache/solr/search/TestMainQueryCaching.java
b/solr/core/src/test/org/apache/solr/search/TestMainQueryCaching.java
index 23349bf643b..afc8807a6e6 100644
--- a/solr/core/src/test/org/apache/solr/search/TestMainQueryCaching.java
+++ b/solr/core/src/test/org/apache/solr/search/TestMainQueryCaching.java
@@ -102,7 +102,7 @@ public class TestMainQueryCaching extends SolrTestCaseJ4 {
return (long)
SolrMetricTestUtils.getCounterDatapoint(
core,
- "solr_searcher_live_docs_cache",
+ "solr_core_indexsearcher_live_docs_cache",
SolrMetricTestUtils.newStandaloneLabelsBuilder(core)
.label("category", "SEARCHER")
.label("type", type)
diff --git
a/solr/core/src/test/org/apache/solr/search/TestSolrFieldCacheBean.java
b/solr/core/src/test/org/apache/solr/search/TestSolrFieldCacheBean.java
index 726d42d2c70..466eb3e5043 100644
--- a/solr/core/src/test/org/apache/solr/search/TestSolrFieldCacheBean.java
+++ b/solr/core/src/test/org/apache/solr/search/TestSolrFieldCacheBean.java
@@ -31,8 +31,8 @@ import org.junit.Test;
public class TestSolrFieldCacheBean extends SolrTestCaseJ4 {
- private static final String ENTRIES_METRIC_NAME = "solr_field_cache_entries";
- private static final String SIZE_BYTES_METRIC_NAME =
"solr_field_cache_size_bytes";
+ private static final String ENTRIES_METRIC_NAME =
"solr_core_field_cache_entries";
+ private static final String SIZE_BYTES_METRIC_NAME =
"solr_core_field_cache_size_bytes";
private static final String DISABLE_ENTRY_LIST_PROPERTY =
"disableSolrFieldCacheMBeanEntryList";
private static final String DISABLE_ENTRY_LIST_JMX_PROPERTY =
"disableSolrFieldCacheMBeanEntryListJmx";
diff --git
a/solr/core/src/test/org/apache/solr/update/SolrIndexMetricsTest.java
b/solr/core/src/test/org/apache/solr/update/SolrIndexMetricsTest.java
index f7d0470c88d..68d105cc7d2 100644
--- a/solr/core/src/test/org/apache/solr/update/SolrIndexMetricsTest.java
+++ b/solr/core/src/test/org/apache/solr/update/SolrIndexMetricsTest.java
@@ -64,7 +64,7 @@ public class SolrIndexMetricsTest extends SolrTestCaseJ4 {
var indexSize =
SolrMetricTestUtils.getGaugeDatapoint(
core,
- "solr_core_index_size_bytes",
+ "solr_core_index_size_megabytes",
SolrMetricTestUtils.newStandaloneLabelsBuilder(core)
.label("category", "CORE")
.build());
@@ -106,7 +106,7 @@ public class SolrIndexMetricsTest extends SolrTestCaseJ4 {
var minorMergeTimer =
SolrMetricTestUtils.getHistogramDatapoint(
core,
- "solr_indexwriter_merge_time_milliseconds",
+ "solr_core_indexwriter_merge_time_milliseconds",
SolrMetricTestUtils.newStandaloneLabelsBuilder(core)
.label(CATEGORY_ATTR.toString(),
SolrInfoBean.Category.INDEX.toString())
.label(MERGE_TYPE_ATTR.toString(), "minor")
@@ -118,7 +118,7 @@ public class SolrIndexMetricsTest extends SolrTestCaseJ4 {
var majorMergeTimer =
SolrMetricTestUtils.getHistogramDatapoint(
core,
- "solr_indexwriter_merge_time_milliseconds",
+ "solr_core_indexwriter_merge_time_milliseconds",
SolrMetricTestUtils.newStandaloneLabelsBuilder(core)
.label(CATEGORY_ATTR.toString(),
SolrInfoBean.Category.INDEX.toString())
.label(MERGE_TYPE_ATTR.toString(), "major")
@@ -131,7 +131,7 @@ public class SolrIndexMetricsTest extends SolrTestCaseJ4 {
var minorMergeDocs =
SolrMetricTestUtils.getCounterDatapoint(
core,
- "solr_indexwriter_merge_docs",
+ "solr_core_indexwriter_merge_docs",
SolrMetricTestUtils.newStandaloneLabelsBuilder(core)
.label(CATEGORY_ATTR.toString(),
SolrInfoBean.Category.INDEX.toString())
.label(MERGE_TYPE_ATTR.toString(), "minor")
@@ -146,7 +146,7 @@ public class SolrIndexMetricsTest extends SolrTestCaseJ4 {
var majorMergeDocs =
SolrMetricTestUtils.getCounterDatapoint(
core,
- "solr_indexwriter_merge_docs",
+ "solr_core_indexwriter_merge_docs",
SolrMetricTestUtils.newStandaloneLabelsBuilder(core)
.label(CATEGORY_ATTR.toString(),
SolrInfoBean.Category.INDEX.toString())
.label(MERGE_TYPE_ATTR.toString(), "major")
@@ -163,7 +163,7 @@ public class SolrIndexMetricsTest extends SolrTestCaseJ4 {
var minorSegmentsMergeMetric =
SolrMetricTestUtils.getCounterDatapoint(
core,
- "solr_indexwriter_merge_segments",
+ "solr_core_indexwriter_merge_segments",
SolrMetricTestUtils.newStandaloneLabelsBuilder(core)
.label(CATEGORY_ATTR.toString(),
SolrInfoBean.Category.INDEX.toString())
.label(MERGE_TYPE_ATTR.toString(), "minor")
@@ -179,7 +179,7 @@ public class SolrIndexMetricsTest extends SolrTestCaseJ4 {
var majorSegmentsMergeMetric =
SolrMetricTestUtils.getCounterDatapoint(
core,
- "solr_indexwriter_merge_segments",
+ "solr_core_indexwriter_merge_segments",
SolrMetricTestUtils.newStandaloneLabelsBuilder(core)
.label(CATEGORY_ATTR.toString(),
SolrInfoBean.Category.INDEX.toString())
.label(MERGE_TYPE_ATTR.toString(), "major")
@@ -196,7 +196,7 @@ public class SolrIndexMetricsTest extends SolrTestCaseJ4 {
var flushCounter =
SolrMetricTestUtils.getCounterDatapoint(
core,
- "solr_indexwriter_flushes",
+ "solr_core_indexwriter_flushes",
SolrMetricTestUtils.newStandaloneLabelsBuilder(core)
.label(CATEGORY_ATTR.toString(),
SolrInfoBean.Category.INDEX.toString())
.build());
diff --git
a/solr/core/src/test/org/apache/solr/util/stats/OtelInstrumentedExecutorServiceTest.java
b/solr/core/src/test/org/apache/solr/util/stats/OtelInstrumentedExecutorServiceTest.java
index 3ae36b14db6..e6b5f1d287b 100644
---
a/solr/core/src/test/org/apache/solr/util/stats/OtelInstrumentedExecutorServiceTest.java
+++
b/solr/core/src/test/org/apache/solr/util/stats/OtelInstrumentedExecutorServiceTest.java
@@ -44,7 +44,6 @@ public class OtelInstrumentedExecutorServiceTest extends
SolrTestCase {
public static long EXEC_TIMEOUT = 1;
public static TimeUnit EXEC_TIMEOUT_UNITS = TimeUnit.SECONDS;
public static final String REGISTRY_NAME = "solr-test-otel-registry";
- public static final String TAG_NAME = "solr-test-otel-tag";
public static final double DELTA = 2.4e-07;
public static SolrMetricsContext metricsContext;
@@ -67,10 +66,10 @@ public class OtelInstrumentedExecutorServiceTest extends
SolrTestCase {
metricsContext.getMetricManager().getPrometheusMetricReader(REGISTRY_NAME).collect();
GaugeSnapshot tasksRunning =
SolrMetricTestUtils.getMetricSnapshot(
- GaugeSnapshot.class, metrics, "solr_executor_tasks_running");
+ GaugeSnapshot.class, metrics,
"solr_node_executor_tasks_running");
CounterSnapshot taskCounters =
SolrMetricTestUtils.getMetricSnapshot(
- CounterSnapshot.class, metrics, "solr_executor_tasks");
+ CounterSnapshot.class, metrics, "solr_node_executor_tasks");
GaugeDataPointSnapshot runningTasks =
tasksRunning.getDataPoints().getFirst();
CounterDataPointSnapshot submittedTasks = getCounterData(taskCounters,
"submitted");
@@ -95,10 +94,10 @@ public class OtelInstrumentedExecutorServiceTest extends
SolrTestCase {
metricsContext.getMetricManager().getPrometheusMetricReader(REGISTRY_NAME).collect();
GaugeSnapshot tasksRunning =
SolrMetricTestUtils.getMetricSnapshot(
- GaugeSnapshot.class, metrics, "solr_executor_tasks_running");
+ GaugeSnapshot.class, metrics,
"solr_node_executor_tasks_running");
CounterSnapshot taskCounters =
SolrMetricTestUtils.getMetricSnapshot(
- CounterSnapshot.class, metrics, "solr_executor_tasks");
+ CounterSnapshot.class, metrics, "solr_node_executor_tasks");
GaugeDataPointSnapshot runningTasks =
tasksRunning.getDataPoints().getFirst();
CounterDataPointSnapshot submittedTasks = getCounterData(taskCounters,
"submitted");
@@ -129,7 +128,10 @@ public class OtelInstrumentedExecutorServiceTest extends
SolrTestCase {
HistogramSnapshot taskTimers =
metrics.stream()
.filter(
- m ->
m.getMetadata().getPrometheusName().startsWith("solr_executor_task_times"))
+ m ->
+ m.getMetadata()
+ .getPrometheusName()
+ .startsWith("solr_node_executor_task_times"))
.findFirst()
.map(HistogramSnapshot.class::cast)
.get();
@@ -163,10 +165,10 @@ public class OtelInstrumentedExecutorServiceTest extends
SolrTestCase {
metricsContext.getMetricManager().getPrometheusMetricReader(REGISTRY_NAME).collect();
GaugeSnapshot sizeGauges =
SolrMetricTestUtils.getMetricSnapshot(
- GaugeSnapshot.class, metrics, "solr_executor_thread_pool_size");
+ GaugeSnapshot.class, metrics,
"solr_node_executor_thread_pool_size");
GaugeSnapshot taskGauges =
SolrMetricTestUtils.getMetricSnapshot(
- GaugeSnapshot.class, metrics, "solr_executor_thread_pool_tasks");
+ GaugeSnapshot.class, metrics,
"solr_node_executor_thread_pool_tasks");
GaugeDataPointSnapshot poolSize = getGaugeData(sizeGauges, "size");
GaugeDataPointSnapshot corePoolSize = getGaugeData(sizeGauges, "core");
@@ -205,10 +207,10 @@ public class OtelInstrumentedExecutorServiceTest extends
SolrTestCase {
metricsContext.getMetricManager().getPrometheusMetricReader(REGISTRY_NAME).collect();
GaugeSnapshot taskGauges =
SolrMetricTestUtils.getMetricSnapshot(
- GaugeSnapshot.class, metrics,
"solr_executor_fork_join_pool_tasks");
+ GaugeSnapshot.class, metrics,
"solr_node_executor_fork_join_pool_tasks");
GaugeSnapshot threadGauges =
SolrMetricTestUtils.getMetricSnapshot(
- GaugeSnapshot.class, metrics,
"solr_executor_fork_join_pool_threads");
+ GaugeSnapshot.class, metrics,
"solr_node_executor_fork_join_pool_threads");
GaugeDataPointSnapshot stolenTasks = getGaugeData(taskGauges, "stolen");
GaugeDataPointSnapshot queuedTasks = getGaugeData(taskGauges, "queued");
@@ -224,8 +226,8 @@ public class OtelInstrumentedExecutorServiceTest extends
SolrTestCase {
}
private static ExecutorService testExecutor(String name, ExecutorService
exec) {
- return MetricUtils.instrumentedExecutorService(
- exec, metricsContext, SolrInfoBean.Category.ADMIN, name);
+ return metricsContext.instrumentedExecutorService(
+ exec, "solr_node_executor", name, SolrInfoBean.Category.ADMIN);
}
private static CounterDataPointSnapshot getCounterData(CounterSnapshot
snapshot, String type) {
diff --git
a/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/NodeValueFetcher.java
b/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/NodeValueFetcher.java
index b9a2e439d51..bd9b237cecd 100644
---
a/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/NodeValueFetcher.java
+++
b/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/NodeValueFetcher.java
@@ -64,8 +64,8 @@ public class NodeValueFetcher {
/** Various well known tags that can be fetched from a node */
public enum Metrics {
- FREEDISK("freedisk", "solr_disk_space_bytes", "type", "usable_space"),
- TOTALDISK("totaldisk", "solr_disk_space_bytes", "type", "total_space"),
+ FREEDISK("freedisk", "solr_disk_space_megabytes", "type", "usable_space"),
+ TOTALDISK("totaldisk", "solr_disk_space_megabytes", "type", "total_space"),
CORES("cores", "solr_cores_loaded") {
@Override
public Object extractFromPrometheus(List<String> prometheusLines) {
@@ -257,9 +257,8 @@ public class NodeValueFetcher {
/**
* Retrieve values that match metrics. Metrics names are structured like
below:
*
- * <p>"metrics:solr_cores_filesystem_disk_space_bytes:type=usable_space" or
- * "metrics:jvm_cpu_count". Metrics are fetched from /admin/metrics and
parsed using shared
- * utility methods.
+ * <p>"metrics:solr_disk_space_megabytes:type=usable_space" or
"metrics:jvm_cpu_count". Metrics
+ * are fetched from /admin/metrics and parsed using shared utility methods.
*/
private void getRemoteMetrics(
Set<String> requestedTagNames, SolrClientNodeStateProvider.RemoteCallCtx
ctx) {
@@ -346,7 +345,7 @@ public class NodeValueFetcher {
/**
* Create a MetricRequest from a metric tag string like
"metrics:jvm_cpu_count" or
- * "metrics:solr_cores_filesystem_disk_space_bytes:type=usable_space"
+ * "metrics:solr_disk_space_megabytes:type=usable_space"
*/
public static MetricRequest fromTag(String tag) {
String[] parts = tag.split(":");
diff --git a/solr/solrj/gradle.lockfile b/solr/solrj/gradle.lockfile
index db547de09b9..876ad1344d1 100644
--- a/solr/solrj/gradle.lockfile
+++ b/solr/solrj/gradle.lockfile
@@ -17,12 +17,18 @@
com.github.stephenc.jcip:jcip-annotations:1.0-1=compileClasspath,compileOnlyHelp
com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor
com.google.auto.value:auto-value-annotations:1.11.0=annotationProcessor,errorprone,testAnnotationProcessor
com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor
+com.google.code.findbugs:jsr305:3.0.2=spotless865458226
com.google.errorprone:error_prone_annotation:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor
+com.google.errorprone:error_prone_annotations:2.18.0=spotless865458226
com.google.errorprone:error_prone_annotations:2.41.0=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
com.google.errorprone:error_prone_check_api:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor
com.google.errorprone:error_prone_core:2.41.0=annotationProcessor,errorprone,testAnnotationProcessor
+com.google.googlejavaformat:google-java-format:1.18.1=spotless865458226
com.google.googlejavaformat:google-java-format:1.27.0=annotationProcessor,errorprone,testAnnotationProcessor
+com.google.guava:failureaccess:1.0.1=spotless865458226
com.google.guava:failureaccess:1.0.3=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
+com.google.guava:guava-parent:32.1.1-jre=spotless865458226
+com.google.guava:guava:32.1.1-jre=spotless865458226
com.google.guava:guava:33.4.8-jre=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
com.google.j2objc:j2objc-annotations:3.1=annotationProcessor,errorprone,jarValidation,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
@@ -125,6 +131,7 @@
org.apache.yetus:audience-annotations:0.12.0=permitTestUnusedDeclared
org.apache.zookeeper:zookeeper-jute:3.9.4=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
org.apache.zookeeper:zookeeper:3.9.4=jarValidation,permitTestUnusedDeclared,testCompileClasspath,testRuntimeClasspath
org.apiguardian:apiguardian-api:1.1.2=jarValidation,testRuntimeClasspath
+org.checkerframework:checker-qual:3.33.0=spotless865458226
org.codehaus.woodstox:stax2-api:4.2.2=jarValidation,testRuntimeClasspath
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
org.eclipse.jetty.ee10:jetty-ee10-webapp:12.0.27=jarValidation,testCompileClasspath,testRuntimeClasspath
diff --git
a/solr/test-framework/src/java/org/apache/solr/cluster/placement/Builders.java
b/solr/test-framework/src/java/org/apache/solr/cluster/placement/Builders.java
index cffbea31b4c..7185472b7a9 100644
---
a/solr/test-framework/src/java/org/apache/solr/cluster/placement/Builders.java
+++
b/solr/test-framework/src/java/org/apache/solr/cluster/placement/Builders.java
@@ -435,7 +435,7 @@ public class Builders {
if (initialSizeGBPerShard != null) {
replicaMetricsBuilder.addMetric(
ReplicaMetricImpl.INDEX_SIZE_GB,
- initialSizeGBPerShard.get(shardNumber - 1) *
ReplicaMetricImpl.GB);
+ initialSizeGBPerShard.get(shardNumber - 1) * 1024); // GB to
MB
}
if (leader == null && type != Replica.ReplicaType.PULL) {
leader = replicaBuilder;
diff --git
a/solr/test-framework/src/java/org/apache/solr/util/SolrMetricTestUtils.java
b/solr/test-framework/src/java/org/apache/solr/util/SolrMetricTestUtils.java
index 548195acc59..a201c9227bd 100644
--- a/solr/test-framework/src/java/org/apache/solr/util/SolrMetricTestUtils.java
+++ b/solr/test-framework/src/java/org/apache/solr/util/SolrMetricTestUtils.java
@@ -85,6 +85,11 @@ public final class SolrMetricTestUtils {
public static final String SUFFIX = "_testing";
+ /**
+ * Looks up the first {@link MetricSnapshot} named {@code metricName}, and
returns the first
+ * {@link DataPointSnapshot} having exactly these {@code labels}. Null if
not found. The result is
+ * typically casted to something useful.
+ */
public static DataPointSnapshot getDataPointSnapshot(
PrometheusMetricReader reader, String metricName, Labels labels) {
MetricSnapshots metricSnapshots = reader.collect();
@@ -228,7 +233,7 @@ public final class SolrMetricTestUtils {
SolrCore core, String cacheName, String operation) {
return SolrMetricTestUtils.getCounterDatapoint(
core,
- "solr_searcher_cache_ops",
+ "solr_core_indexsearcher_cache_ops",
SolrMetricTestUtils.newStandaloneLabelsBuilder(core)
.label("category", "CACHE")
.label("ops", operation)
@@ -244,7 +249,7 @@ public final class SolrMetricTestUtils {
.label("name", cacheName)
.label("result", result);
return SolrMetricTestUtils.getCounterDatapoint(
- core, "solr_searcher_cache_lookups", builder.build());
+ core, "solr_core_indexsearcher_cache_lookups", builder.build());
}
public static CounterSnapshot.CounterDataPointSnapshot
getCacheSearcherOpsHits(