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

dsmiley pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/branch_9x by this push:
     new ec6dc118771 Added SingleOrderedMap.of(...) for immutable empty or 
single pair (#2932)
ec6dc118771 is described below

commit ec6dc1187719c1301aef75f0b3829ff1d24a7ad1
Author: Renato Haeberli <[email protected]>
AuthorDate: Sat Jan 11 21:20:00 2025 +0100

    Added SingleOrderedMap.of(...) for immutable empty or single pair (#2932)
    
    SimpleFacets:  use this, avoiding needless new NamedList creation
    tidy
    (cherry picked from commit 6c02da2ee1334be9274857cb8d7fa24f9e93500e)
---
 .../java/org/apache/solr/request/SimpleFacets.java  | 12 ++++++------
 .../apache/solr/common/util/SimpleOrderedMap.java   | 21 +++++++++++++++++++++
 2 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/request/SimpleFacets.java 
b/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
index 276626123f5..02a7f493e63 100644
--- a/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
+++ b/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
@@ -872,12 +872,12 @@ public class SimpleFacets {
    * @see #getFieldMissingCount
    * @see #getFacetTermEnumCounts
    */
-  public NamedList<Object> getFacetFieldCounts() throws IOException, 
SyntaxError {
+  public SimpleOrderedMap<Object> getFacetFieldCounts() throws IOException, 
SyntaxError {
 
-    NamedList<Object> res = new SimpleOrderedMap<>();
     String[] facetFs = global.getParams(FacetParams.FACET_FIELD);
+
     if (null == facetFs) {
-      return res;
+      return SimpleOrderedMap.of();
     }
 
     // Passing a negative number for FACET_THREADS implies an unlimited number 
of threads is
@@ -892,6 +892,7 @@ public class SimpleFacets {
       fdebugParent.putInfoItem("maxThreads", maxThreads);
     }
 
+    SimpleOrderedMap<Object> res;
     try {
       // Loop over fields; submit to executor, keeping the future
       for (String f : facetFs) {
@@ -915,10 +916,8 @@ public class SimpleFacets {
                   result.add(key, getTermCounts(facetValue, parsed));
                 }
                 return result;
-              } catch (SolrException se) {
+              } catch (SolrException | 
ExitableDirectoryReader.ExitingReaderException se) {
                 throw se;
-              } catch (ExitableDirectoryReader.ExitingReaderException timeout) 
{
-                throw timeout;
               } catch (Exception e) {
                 throw new SolrException(
                     ErrorCode.SERVER_ERROR, "Exception during facet.field: " + 
facetValue, e);
@@ -933,6 +932,7 @@ public class SimpleFacets {
         futures.add(runnableFuture);
       } // facetFs loop
 
+      res = new SimpleOrderedMap<>();
       // Loop over futures to get the values. The order is the same as facetFs 
but shouldn't matter.
       for (Future<NamedList<?>> future : futures) {
         res.addAll(future.get());
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 6e6dd15438a..20178a252e3 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
@@ -34,6 +34,9 @@ import java.util.Map;
  * serialized. It aims to minimize overhead and to be efficient at adding new 
elements.
  */
 public class SimpleOrderedMap<T> extends NamedList<T> {
+
+  private static final SimpleOrderedMap<Object> EMPTY = new 
SimpleOrderedMap<>(List.of());
+
   /** Creates an empty instance */
   public SimpleOrderedMap() {
     super();
@@ -67,4 +70,22 @@ public class SimpleOrderedMap<T> extends NamedList<T> {
     newList.addAll(nvPairs);
     return new SimpleOrderedMap<>(newList);
   }
+
+  /**
+   * Returns a shared, empty, and immutable instance of SimpleOrderedMap.
+   *
+   * @return Empty SimpleOrderedMap (immutable)
+   */
+  public static SimpleOrderedMap<Object> of() {
+    return EMPTY;
+  }
+
+  /**
+   * Returns an immutable instance of SimpleOrderedMap with a single key-value 
pair.
+   *
+   * @return SimpleOrderedMap containing one key-value pair
+   */
+  public static <T> SimpleOrderedMap<T> of(String name, T val) {
+    return new SimpleOrderedMap<>(List.of(name, val));
+  }
 }

Reply via email to