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 ff60c851d5f SimpleOrderedMap MapWriter constructor (#3235)
ff60c851d5f is described below

commit ff60c851d5ff78193b0b6f137c0a0cfceb42e438
Author: David Smiley <dsmi...@apache.org>
AuthorDate: Tue Mar 11 02:16:31 2025 -0400

    SimpleOrderedMap MapWriter constructor (#3235)
    
    * SimpleOrderedMap MapWriter constructor
    * new SimpleOrderedMap(MapWriter)   ex: a SolrParams
    * deprecate SolrParams.toNamedList
    * optimize SolrParams.writeMap
    
    Bigger picture is avoiding NamedList.
    
    * comment for the array side
---
 .../apache/solr/handler/ReplicationHandler.java    |  2 +-
 .../org/apache/solr/search/TestMinHashQParser.java | 12 +++++-----
 .../update/processor/RegexBoostProcessorTest.java  | 15 +++++++------
 ...penNLPLangDetectUpdateProcessorFactoryTest.java |  3 ++-
 .../org/apache/solr/common/params/SolrParams.java  | 26 ++++++++++++----------
 .../apache/solr/common/util/SimpleOrderedMap.java  | 20 ++++++++++++++++-
 6 files changed, 50 insertions(+), 28 deletions(-)

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 9e64371a971..b8e0e6abc20 100644
--- a/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
@@ -461,7 +461,7 @@ public class ReplicationHandler extends RequestHandlerBase
         if (currentIndexFetcher != null && currentIndexFetcher != 
pollingIndexFetcher) {
           currentIndexFetcher.destroy();
         }
-        currentIndexFetcher = new IndexFetcher(solrParams.toNamedList(), this, 
core);
+        currentIndexFetcher = new IndexFetcher(new 
SimpleOrderedMap<>(solrParams), this, core);
       } else {
         currentIndexFetcher = pollingIndexFetcher;
       }
diff --git a/solr/core/src/test/org/apache/solr/search/TestMinHashQParser.java 
b/solr/core/src/test/org/apache/solr/search/TestMinHashQParser.java
index dda2ce2ad38..c4de4612bb7 100644
--- a/solr/core/src/test/org/apache/solr/search/TestMinHashQParser.java
+++ b/solr/core/src/test/org/apache/solr/search/TestMinHashQParser.java
@@ -22,6 +22,7 @@ import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.ConstantScoreQuery;
 import org.apache.lucene.search.Query;
 import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.request.SolrQueryRequest;
@@ -431,13 +432,12 @@ public class TestMinHashQParser extends SolrTestCaseJ4 {
 
   private SolrQueryRequest createRequest(String query) {
     SolrQueryRequest qr = req(query);
-    NamedList<Object> par = qr.getParams().toNamedList();
-    par.add("debug", "false");
-    par.add("rows", "30");
-    par.add("fl", "id,score");
+    ModifiableSolrParams par = ModifiableSolrParams.of(qr.getParams());
+    par.set("debug", "false");
+    par.set("rows", "30");
+    par.set("fl", "id,score");
     par.remove("qt");
-    SolrParams newp = par.toSolrParams();
-    qr.setParams(newp);
+    qr.setParams(par);
     return qr;
   }
 }
diff --git 
a/solr/core/src/test/org/apache/solr/update/processor/RegexBoostProcessorTest.java
 
b/solr/core/src/test/org/apache/solr/update/processor/RegexBoostProcessorTest.java
index b7bd389405a..a6d90e339c3 100644
--- 
a/solr/core/src/test/org/apache/solr/update/processor/RegexBoostProcessorTest.java
+++ 
b/solr/core/src/test/org/apache/solr/update/processor/RegexBoostProcessorTest.java
@@ -19,6 +19,7 @@ package org.apache.solr.update.processor;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.response.SolrQueryResponse;
@@ -32,7 +33,7 @@ import org.junit.Test;
 public class RegexBoostProcessorTest extends SolrTestCaseJ4 {
   private static RegexpBoostProcessor reProcessor;
   protected static SolrRequestParsers _parser;
-  protected static ModifiableSolrParams parameters;
+  protected static SimpleOrderedMap<String> config;
   private static RegexpBoostProcessorFactory factory;
   private SolrInputDocument document;
 
@@ -43,13 +44,13 @@ public class RegexBoostProcessorTest extends SolrTestCaseJ4 
{
     SolrCore core = h.getCore();
     _parser = new SolrRequestParsers(null);
     SolrQueryResponse resp = null;
-    parameters = new ModifiableSolrParams();
-    parameters.set(RegexpBoostProcessor.BOOST_FILENAME_PARAM, 
"regex-boost-processor-test.txt");
-    parameters.set(RegexpBoostProcessor.INPUT_FIELD_PARAM, "url");
-    parameters.set(RegexpBoostProcessor.BOOST_FIELD_PARAM, "urlboost");
+    config = new SimpleOrderedMap<>();
+    config.add(RegexpBoostProcessor.BOOST_FILENAME_PARAM, 
"regex-boost-processor-test.txt");
+    config.add(RegexpBoostProcessor.INPUT_FIELD_PARAM, "url");
+    config.add(RegexpBoostProcessor.BOOST_FIELD_PARAM, "urlboost");
     SolrQueryRequest req = _parser.buildRequestFrom(core, new 
ModifiableSolrParams(), null);
     factory = new RegexpBoostProcessorFactory();
-    factory.init(parameters.toNamedList());
+    factory.init(config);
     reProcessor = (RegexpBoostProcessor) factory.getInstance(req, resp, null);
   }
 
@@ -58,7 +59,7 @@ public class RegexBoostProcessorTest extends SolrTestCaseJ4 {
     // null static members for gc
     reProcessor = null;
     _parser = null;
-    parameters = null;
+    config = null;
     factory = null;
   }
 
diff --git 
a/solr/modules/langid/src/test/org/apache/solr/update/processor/OpenNLPLangDetectUpdateProcessorFactoryTest.java
 
b/solr/modules/langid/src/test/org/apache/solr/update/processor/OpenNLPLangDetectUpdateProcessorFactoryTest.java
index e09d8d8c743..b1b960a8326 100644
--- 
a/solr/modules/langid/src/test/org/apache/solr/update/processor/OpenNLPLangDetectUpdateProcessorFactoryTest.java
+++ 
b/solr/modules/langid/src/test/org/apache/solr/update/processor/OpenNLPLangDetectUpdateProcessorFactoryTest.java
@@ -20,6 +20,7 @@ package org.apache.solr.update.processor;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.request.SolrQueryRequest;
 import org.junit.Test;
 
@@ -41,7 +42,7 @@ public class OpenNLPLangDetectUpdateProcessorFactoryTest
     }
     SolrQueryRequest req = _parser.buildRequestFrom(h.getCore(), new 
ModifiableSolrParams(), null);
     OpenNLPLangDetectUpdateProcessorFactory factory = new 
OpenNLPLangDetectUpdateProcessorFactory();
-    factory.init(parameters.toNamedList());
+    factory.init(new SimpleOrderedMap<>(parameters));
     factory.inform(h.getCore());
     return (OpenNLPLangDetectUpdateProcessor) factory.getInstance(req, resp, 
null);
   }
diff --git a/solr/solrj/src/java/org/apache/solr/common/params/SolrParams.java 
b/solr/solrj/src/java/org/apache/solr/common/params/SolrParams.java
index 16c23dc388e..ec414d76313 100644
--- a/solr/solrj/src/java/org/apache/solr/common/params/SolrParams.java
+++ b/solr/solrj/src/java/org/apache/solr/common/params/SolrParams.java
@@ -69,18 +69,17 @@ public abstract class SolrParams
 
   @Override
   public void writeMap(EntryWriter ew) throws IOException {
-    // TODO don't call toNamedList; more efficiently implement here
-    // note: multiple values, if present, are a String[] under 1 key
-    toNamedList()
-        .forEach(
-            (k, v) -> {
-              if (v == null || "".equals(v)) return;
-              try {
-                ew.put(k, v);
-              } catch (IOException e) {
-                throw new RuntimeException("Error serializing", e);
-              }
-            });
+    for (Entry<String, String[]> entry : this) {
+      String[] value = entry.getValue();
+      // if only one value, don't wrap in an array
+      if (value.length == 1) {
+        assert value[0] != null;
+        ew.put(entry.getKey(), value[0]);
+      } else if (value.length > 1) {
+        // values shouldn't be null; not bothering to assert it
+        ew.put(entry.getKey(), value);
+      }
+    }
   }
 
   /** Returns an Iterator of {@code Map.Entry} providing a multi-map view. 
Treat it as read-only. */
@@ -434,7 +433,10 @@ public abstract class SolrParams
   /**
    * Convert this to a NamedList of unique keys with either String or String[] 
values depending on
    * how many values there are for the parameter.
+   *
+   * @deprecated see {@link SimpleOrderedMap#SimpleOrderedMap(MapWriter)}
    */
+  @Deprecated
   public NamedList<Object> toNamedList() {
     final SimpleOrderedMap<Object> result = new SimpleOrderedMap<>();
 
diff --git 
a/solr/solrj/src/java/org/apache/solr/common/util/SimpleOrderedMap.java 
b/solr/solrj/src/java/org/apache/solr/common/util/SimpleOrderedMap.java
index a30324b8719..d97990c35e9 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/SimpleOrderedMap.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/SimpleOrderedMap.java
@@ -16,6 +16,7 @@
  */
 package org.apache.solr.common.util;
 
+import java.io.IOException;
 import java.util.AbstractMap;
 import java.util.AbstractSet;
 import java.util.ArrayList;
@@ -24,6 +25,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import org.apache.solr.common.MapWriter;
+import org.apache.solr.common.params.SolrParams;
 
 /**
  * <code>SimpleOrderedMap</code> is a {@link NamedList} where access by key is 
more important than
@@ -67,7 +70,22 @@ public class SimpleOrderedMap<T> extends NamedList<T> 
implements Map<String, T>
     super(nameValuePairs);
   }
 
-  // TODO override asShallowMap in Solr 10
+  /** Can convert a {@link SolrParams} and other things. */
+  public SimpleOrderedMap(MapWriter mapWriter) {
+    try {
+      mapWriter.writeMap(
+          new EntryWriter() {
+            @SuppressWarnings("unchecked")
+            @Override
+            public EntryWriter put(CharSequence k, Object v) throws 
IOException {
+              SimpleOrderedMap.this.add(k.toString(), (T) v);
+              return this;
+            }
+          });
+    } catch (IOException e) {
+      throw new RuntimeException(e); // impossible?
+    }
+  }
 
   @Override
   public SimpleOrderedMap<T> clone() {

Reply via email to