Skip to content

Commit f087424

Browse files
authored
SOLR-17855: Remove Dropwizard dependency from core (#4404)
Remove Dropwizard metrics as a core dependency from Solr. In doing so, the `OVERSEERSTATUS` response no longer includes per-operation timing metrics per-operation `requests` and `errors` counts still exist. But Dropwizard 3.2.5 still exists for places that embed ZooKeeper such as solr testing framework.
1 parent dfb0be4 commit f087424

52 files changed

Lines changed: 410 additions & 743 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
title: Remove Dropwizard Metrics as a direct Solr dependency. The `OVERSEERSTATUS` response no longer includes per-operation timing metrics per-operation `requests` and `errors` counts still exist. Users needing per-operation latency can use distributed tracing as a substitute.
2+
type: removed
3+
authors:
4+
- name: Matthew Biscocho
5+
- name: Eric Pugh
6+
- name: David Smiley
7+
links:
8+
- name: SOLR-17855
9+
url: https://issues.apache.org/jira/browse/SOLR-17855

gradle/libs.versions.toml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ decompose = "3.4.0"
8282
diffplug-spotless = "8.3.0"
8383
# @keep Use for dockerfile JRE version
8484
dockerfile-baseimage-java = "25"
85-
dropwizard-metrics = "4.2.33"
8685
eclipse-ecj = "3.39.0"
8786
eclipse-jetty = "12.0.34"
8887
# @keep jgit version used by git-status.gradle
@@ -326,8 +325,6 @@ cuvs-java = { module = "com.nvidia.cuvs:cuvs-java", version.ref = "cuvs-java" }
326325
cuvs-lucene = { module = "com.nvidia.cuvs.lucene:cuvs-lucene", version.ref = "cuvs-lucene" }
327326
decompose-decompose = { module = "com.arkivanov.decompose:decompose", version.ref = "decompose" }
328327
decompose-extensions-compose = { module = "com.arkivanov.decompose:extensions-compose", version.ref = "decompose" }
329-
dropwizard-metrics-core = { module = "io.dropwizard.metrics:metrics-core", version.ref = "dropwizard-metrics" }
330-
dropwizard-metrics-jetty12-ee10 = { module = "io.dropwizard.metrics:metrics-jetty12-ee10", version.ref = "dropwizard-metrics" }
331328
eclipse-jdt-ecj = { module = "org.eclipse.jdt:ecj", version.ref = "eclipse-ecj" }
332329
eclipse-jetty-alpnjavaclient = { module = "org.eclipse.jetty:jetty-alpn-java-client", version.ref = "eclipse-jetty" }
333330
eclipse-jetty-alpnjavaserver = { module = "org.eclipse.jetty:jetty-alpn-java-server", version.ref = "eclipse-jetty" }

solr/api/gradle.lockfile

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,7 @@ com.tdunning:t-digest:3.3=jarValidation,testRuntimeClasspath
3838
commons-cli:commons-cli:1.11.0=jarValidation,testRuntimeClasspath
3939
commons-codec:commons-codec:1.21.0=jarValidation,testRuntimeClasspath
4040
commons-io:commons-io:2.21.0=jarValidation,testCompileClasspath,testRuntimeClasspath
41-
io.dropwizard.metrics:metrics-annotation:4.2.33=jarValidation,testRuntimeClasspath
42-
io.dropwizard.metrics:metrics-core:4.2.33=jarValidation,testRuntimeClasspath
43-
io.dropwizard.metrics:metrics-jetty12-ee10:4.2.33=jarValidation,testRuntimeClasspath
44-
io.dropwizard.metrics:metrics-jetty12:4.2.33=jarValidation,testRuntimeClasspath
41+
io.dropwizard.metrics:metrics-core:3.2.5=jarValidation,testRuntimeClasspath
4542
io.github.classgraph:classgraph:4.8.165=swaggerBuild
4643
io.github.eisop:dataflow-errorprone:3.41.0-eisop1=annotationProcessor,errorprone,testAnnotationProcessor
4744
io.github.java-diff-utils:java-diff-utils:4.12=annotationProcessor,errorprone,testAnnotationProcessor

solr/benchmark/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ dependencies {
4949

5050
implementation libs.apache.lucene.core
5151
implementation libs.commonsio.commonsio
52-
implementation libs.dropwizard.metrics.core
5352
implementation libs.apache.commons.math3
5453
implementation libs.jctools.core
5554
implementation libs.quicktheories.quicktheories

solr/benchmark/gradle.lockfile

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,7 @@ com.tdunning:t-digest:3.3=jarValidation,runtimeClasspath,testRuntimeClasspath
3434
commons-cli:commons-cli:1.11.0=jarValidation,runtimeClasspath,testRuntimeClasspath
3535
commons-codec:commons-codec:1.21.0=jarValidation,runtimeClasspath,testRuntimeClasspath
3636
commons-io:commons-io:2.21.0=compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
37-
io.dropwizard.metrics:metrics-annotation:4.2.33=jarValidation,runtimeClasspath,testRuntimeClasspath
38-
io.dropwizard.metrics:metrics-core:4.2.33=compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
39-
io.dropwizard.metrics:metrics-jetty12-ee10:4.2.33=jarValidation,runtimeClasspath,testRuntimeClasspath
40-
io.dropwizard.metrics:metrics-jetty12:4.2.33=jarValidation,runtimeClasspath,testRuntimeClasspath
37+
io.dropwizard.metrics:metrics-core:3.2.5=jarValidation,runtimeClasspath,testRuntimeClasspath
4138
io.github.eisop:dataflow-errorprone:3.41.0-eisop1=annotationProcessor,errorprone,testAnnotationProcessor
4239
io.github.java-diff-utils:java-diff-utils:4.12=annotationProcessor,errorprone,testAnnotationProcessor
4340
io.netty:netty-buffer:4.2.12.Final=compileClasspath,jarValidation,runtimeClasspath,testCompileClasspath,testRuntimeClasspath

solr/benchmark/src/java/org/apache/solr/bench/SolrBenchState.java

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import static org.apache.commons.io.file.PathUtils.deleteDirectory;
2020
import static org.apache.solr.bench.BaseBenchState.log;
2121

22-
import com.codahale.metrics.Meter;
2322
import java.io.IOException;
2423
import java.io.OutputStream;
2524
import java.io.PrintStream;
@@ -37,6 +36,7 @@
3736
import java.util.concurrent.Executors;
3837
import java.util.concurrent.ScheduledExecutorService;
3938
import java.util.concurrent.TimeUnit;
39+
import java.util.concurrent.atomic.AtomicLong;
4040
import org.apache.solr.client.solrj.SolrServerException;
4141
import org.apache.solr.client.solrj.jetty.HttpJettySolrClient;
4242
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
@@ -396,7 +396,8 @@ public void index(String collection, Docs docs, int docCount, boolean parallel)
396396
@SuppressForbidden(reason = "Benchmarks may use JDK ExecutorService impls")
397397
private void indexParallel(String collection, Docs docs, int docCount)
398398
throws InterruptedException {
399-
Meter meter = new Meter();
399+
AtomicLong meterCount = new AtomicLong();
400+
long meterStartNanos = System.nanoTime();
400401
ExecutorService executorService =
401402
Executors.newFixedThreadPool(
402403
Runtime.getRuntime().availableProcessors(),
@@ -406,10 +407,11 @@ private void indexParallel(String collection, Docs docs, int docCount)
406407
new SolrNamedThreadFactory("SolrJMH Indexer Progress"));
407408
scheduledExecutor.scheduleAtFixedRate(
408409
() -> {
409-
if (meter.getCount() == docCount) {
410+
long count = meterCount.get();
411+
if (count == docCount) {
410412
scheduledExecutor.shutdown();
411413
} else {
412-
log(meter.getCount() + " docs at " + meter.getMeanRate() + " doc/s");
414+
logIndexingRate(count, meterStartNanos);
413415
}
414416
},
415417
10,
@@ -427,7 +429,7 @@ public void run() {
427429
SolrInputDocument doc = docs.inputDocument();
428430
// log("add doc " + doc);
429431
updateRequest.add(doc);
430-
meter.mark();
432+
meterCount.incrementAndGet();
431433

432434
try {
433435
client.requestWithBaseUrl(url, updateRequest, collection);
@@ -451,27 +453,28 @@ public void run() {
451453

452454
private void indexBatch(String collection, Docs docs, int docCount, int batchSize)
453455
throws SolrServerException, IOException {
454-
Meter meter = new Meter();
456+
long meterCount = 0;
457+
long meterStartNanos = System.nanoTime();
455458
List<SolrInputDocument> batch = new ArrayList<>(batchSize);
456459
for (int i = 1; i <= docCount; i++) {
457460
batch.add(docs.inputDocument());
458461
if (i % batchSize == 0) {
459462
UpdateRequest updateRequest = new UpdateRequest();
460463
updateRequest.add(batch);
461464
client.requestWithBaseUrl(nodes.get(0), updateRequest, collection);
462-
meter.mark(batch.size());
465+
meterCount += batch.size();
463466
batch.clear();
464-
log(meter.getCount() + " docs at " + (long) meter.getMeanRate() + " doc/s");
467+
logIndexingRate(meterCount, meterStartNanos);
465468
}
466469
}
467470
if (!batch.isEmpty()) {
468471
UpdateRequest updateRequest = new UpdateRequest();
469472
updateRequest.add(batch);
470473
client.requestWithBaseUrl(nodes.get(0), updateRequest, collection);
471-
meter.mark(batch.size());
474+
meterCount += batch.size();
472475
batch = null;
473476
}
474-
log(meter.getCount() + " docs at " + (long) meter.getMeanRate() + " doc/s");
477+
logIndexingRate(meterCount, meterStartNanos);
475478
}
476479

477480
/**
@@ -586,4 +589,10 @@ public static Path getFile(String name) {
586589
+ " CWD="
587590
+ Path.of("").toAbsolutePath());
588591
}
592+
593+
private static void logIndexingRate(long docCount, long startNanos) {
594+
long elapsedSec = TimeUnit.NANOSECONDS.toSeconds(System.nanoTime() - startNanos);
595+
long rate = elapsedSec > 0 ? docCount / elapsedSec : 0;
596+
log(docCount + " docs at " + rate + " doc/s");
597+
}
589598
}

solr/core/build.gradle

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ dependencies {
5050
api project(':solr:solrj-zookeeper')
5151
api project(':solr:solrj-streaming')
5252

53-
implementation libs.dropwizard.metrics.core
54-
5553
implementation platform(libs.jersey.bom)
5654
runtimeOnly(libs.jersey.containers.jettyhttp, {
5755
exclude group: "org.eclipse.jetty", module: "jetty-continuation"
@@ -205,5 +203,4 @@ dependencies {
205203
testImplementation libs.apache.httpcomponents.httpclient
206204

207205
testImplementation libs.opentelemetry.sdk.testing
208-
testImplementation libs.dropwizard.metrics.core
209206
}

solr/core/gradle.lockfile

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,7 @@ com.tdunning:t-digest:3.3=compileClasspath,jarValidation,runtimeClasspath,runtim
3838
commons-cli:commons-cli:1.11.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,testCompileClasspath,testRuntimeClasspath
3939
commons-codec:commons-codec:1.21.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,testCompileClasspath,testRuntimeClasspath
4040
commons-io:commons-io:2.21.0=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,testCompileClasspath,testRuntimeClasspath
41-
io.dropwizard.metrics:metrics-annotation:4.2.33=jarValidation,testRuntimeClasspath
42-
io.dropwizard.metrics:metrics-core:4.2.33=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,testCompileClasspath,testRuntimeClasspath
43-
io.dropwizard.metrics:metrics-jetty12-ee10:4.2.33=jarValidation,testRuntimeClasspath
44-
io.dropwizard.metrics:metrics-jetty12:4.2.33=jarValidation,testRuntimeClasspath
41+
io.dropwizard.metrics:metrics-core:3.2.5=jarValidation,testCompileClasspath,testRuntimeClasspath
4542
io.github.eisop:dataflow-errorprone:3.41.0-eisop1=annotationProcessor,errorprone,testAnnotationProcessor
4643
io.github.java-diff-utils:java-diff-utils:4.12=annotationProcessor,errorprone,testAnnotationProcessor
4744
io.netty:netty-buffer:4.2.12.Final=apiHelper,compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,testCompileClasspath,testRuntimeClasspath

solr/core/src/java/org/apache/solr/cloud/Overseer.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import static org.apache.solr.common.params.CommonParams.ID;
2020

21-
import com.codahale.metrics.Timer;
2221
import io.opentelemetry.api.common.Attributes;
2322
import java.io.Closeable;
2423
import java.io.IOException;
@@ -427,7 +426,6 @@ private ClusterState processQueueItem(
427426
"Message missing " + QUEUE_OPERATION + ":" + message);
428427
}
429428
List<ZkWriteCommand> zkWriteCommands = null;
430-
final Timer.Context timerContext = stats.time(operation);
431429
try {
432430
zkWriteCommands = processMessage(clusterState, message, operation);
433431
stats.success(operation);
@@ -442,8 +440,6 @@ private ClusterState processQueueItem(
442440
message,
443441
e);
444442
stats.error(operation);
445-
} finally {
446-
timerContext.stop();
447443
}
448444
if (zkWriteCommands != null) {
449445
clusterState = zkStateWriter.enqueueUpdate(clusterState, zkWriteCommands, callback);
@@ -594,7 +590,6 @@ private List<ZkWriteCommand> processMessage(
594590
}
595591

596592
private LeaderStatus amILeader() {
597-
Timer.Context timerContext = stats.time("am_i_leader");
598593
boolean success = true;
599594
String propsId = null;
600595
try {
@@ -623,7 +618,6 @@ private LeaderStatus amILeader() {
623618
success = false;
624619
log.warn("Unexpected exception", e);
625620
} finally {
626-
timerContext.stop();
627621
if (success) {
628622
stats.success("am_i_leader");
629623
} else {

solr/core/src/java/org/apache/solr/cloud/OverseerTaskProcessor.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import static org.apache.solr.common.params.CommonAdminParams.ASYNC;
2121
import static org.apache.solr.common.params.CommonParams.ID;
2222

23-
import com.codahale.metrics.Timer;
2423
import io.opentelemetry.api.common.Attributes;
2524
import java.io.Closeable;
2625
import java.lang.invoke.MethodHandles;
@@ -497,7 +496,6 @@ public static String getLeaderId(SolrZkClient zkClient)
497496

498497
protected LeaderStatus amILeader() {
499498
String statsName = "collection_am_i_leader";
500-
Timer.Context timerContext = stats.time(statsName);
501499
boolean success = true;
502500
String propsId = null;
503501
try {
@@ -524,7 +522,6 @@ protected LeaderStatus amILeader() {
524522
success = false;
525523
Thread.currentThread().interrupt();
526524
} finally {
527-
timerContext.stop();
528525
if (success) {
529526
stats.success(statsName);
530527
} else {
@@ -577,7 +574,6 @@ public Runner(
577574
@Override
578575
public void run() {
579576
String statsName = messageHandler.getTimerName(operation);
580-
final Timer.Context timerContext = stats.time(statsName);
581577

582578
boolean success = false;
583579
final String asyncId = message.getStr(ASYNC);
@@ -590,7 +586,6 @@ public void run() {
590586
}
591587
response = messageHandler.processMessage(message, operation, lock);
592588
} finally {
593-
timerContext.stop();
594589
updateStats(statsName);
595590
}
596591

0 commit comments

Comments
 (0)