You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by tf...@apache.org on 2023/03/16 18:10:11 UTC

[solr] branch main updated: SOLR-16704: Add simple search benchmark to benchmark module (#1464)

This is an automated email from the ASF dual-hosted git repository.

tflobbe 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 1f02581680a SOLR-16704: Add simple search benchmark to benchmark module (#1464)
1f02581680a is described below

commit 1f02581680ace6e39331fb42399ac18fb9ad517c
Author: Tomas Eduardo Fernandez Lobbe <tf...@apache.org>
AuthorDate: Thu Mar 16 11:10:04 2023 -0700

    SOLR-16704: Add simple search benchmark to benchmark module (#1464)
---
 solr/CHANGES.txt                                   |  5 ++
 .../org/apache/solr/bench/MiniClusterState.java    | 13 +++-
 .../org/apache/solr/bench/search/SimpleSearch.java | 78 ++++++++++++++++++++++
 3 files changed, 95 insertions(+), 1 deletion(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 478689ece1a..8f54153a212 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -48,6 +48,11 @@ Improvements
 Bug Fixes
 ---------------------
 
+Other Changes
+---------------------
+
+* SOLR-16704: Add simple search benchmark to benchmark module (Tomás Fernández Löbbe)
+
 ==================  9.2.0 ==================
 
 New Features
diff --git a/solr/benchmark/src/java/org/apache/solr/bench/MiniClusterState.java b/solr/benchmark/src/java/org/apache/solr/bench/MiniClusterState.java
index c8a8eee4058..2e2e1c0e44b 100755
--- a/solr/benchmark/src/java/org/apache/solr/bench/MiniClusterState.java
+++ b/solr/benchmark/src/java/org/apache/solr/bench/MiniClusterState.java
@@ -113,6 +113,8 @@ public class MiniClusterState {
     private SplittableRandom random;
     private String workDir;
 
+    private boolean useHttp1 = false;
+
     /**
      * Tear down.
      *
@@ -273,7 +275,7 @@ public class MiniClusterState {
         nodes.add(runner.getBaseUrl().toString());
       }
 
-      client = new Http2SolrClient.Builder().build();
+      client = new Http2SolrClient.Builder().useHttp1_1(useHttp1).build();
 
       log("done starting mini cluster");
       log("");
@@ -318,6 +320,15 @@ public class MiniClusterState {
       }
     }
 
+    /** Setting useHttp1 to true will make the {@link #client} use http1 */
+    public void setUseHttp1(boolean useHttp1) {
+      if (client != null) {
+        throw new IllegalStateException(
+            "You can only change this setting before starting the Mini Cluster");
+      }
+      this.useHttp1 = useHttp1;
+    }
+
     /**
      * Index.
      *
diff --git a/solr/benchmark/src/java/org/apache/solr/bench/search/SimpleSearch.java b/solr/benchmark/src/java/org/apache/solr/bench/search/SimpleSearch.java
new file mode 100644
index 00000000000..b4c1aa7c261
--- /dev/null
+++ b/solr/benchmark/src/java/org/apache/solr/bench/search/SimpleSearch.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.solr.bench.search;
+
+import java.io.IOException;
+import org.apache.solr.bench.MiniClusterState;
+import org.apache.solr.client.solrj.SolrQuery;
+import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.request.CollectionAdminRequest;
+import org.apache.solr.client.solrj.request.QueryRequest;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Level;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.Threads;
+import org.openjdk.jmh.annotations.Warmup;
+
+@Fork(value = 1)
+@Warmup(time = 5, iterations = 9)
+@Measurement(time = 5, iterations = 9)
+@Threads(value = 16)
+public class SimpleSearch {
+
+  static final String COLLECTION = "c1";
+
+  @State(Scope.Benchmark)
+  public static class BenchState {
+
+    QueryRequest q = new QueryRequest(new SolrQuery("q", "id:0")); // no match is OK
+
+    @Setup(Level.Trial)
+    public void setupTrial(MiniClusterState.MiniClusterBenchState miniClusterState)
+        throws Exception {
+      miniClusterState.setUseHttp1(true);
+      miniClusterState.startMiniCluster(1);
+      miniClusterState.createCollection(COLLECTION, 1, 1);
+
+      //      Docs docs = Docs.docs().field("id", integers().incrementing());
+
+      //      miniClusterState.index(COLLECTION, docs, 30 * 1000);
+      String base = miniClusterState.nodes.get(0);
+      q.setBasePath(base);
+    }
+
+    @Setup(Level.Iteration)
+    public void setupIteration(MiniClusterState.MiniClusterBenchState miniClusterState)
+        throws SolrServerException, IOException {
+      // Reload the collection/core to drop existing caches
+      CollectionAdminRequest.Reload reload = CollectionAdminRequest.reloadCollection(COLLECTION);
+      reload.setBasePath(miniClusterState.nodes.get(0));
+      miniClusterState.client.request(reload);
+    }
+  }
+
+  @Benchmark
+  public Object query(
+      BenchState benchState, MiniClusterState.MiniClusterBenchState miniClusterState)
+      throws SolrServerException, IOException {
+    return miniClusterState.client.request(benchState.q, COLLECTION);
+  }
+}