You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2021/04/29 13:44:51 UTC

[lucene-solr] branch branch_8x updated: SOLR-15337: cleanup CHANGES.txt

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

noble pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/branch_8x by this push:
     new 22141da  SOLR-15337: cleanup CHANGES.txt
22141da is described below

commit 22141da55d86d859ef35d08dae08b4fe82e3b729
Author: Noble Paul <no...@gmail.com>
AuthorDate: Thu Apr 29 23:44:02 2021 +1000

    SOLR-15337: cleanup CHANGES.txt
---
 solr/CHANGES.txt                                   |   2 +
 .../org/apache/solr/core/OverlaidConfigNode.java   | 108 +++++++++++++++++++++
 .../src/java/org/apache/solr/core/SolrConfig.java  |  95 ++----------------
 3 files changed, 116 insertions(+), 89 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index df34c40..d942240 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -48,6 +48,8 @@ Improvements
 
 * SOLR-15155: Let CloudHttp2SolrClient accept an external Http2SolrClient Builder (Tomás Fernández Löbbe)
 
+* SOLR-15337: Avoid XPath in solrconfig.xml parsing (noble)
+
 Optimizations
 ---------------------
 * SOLR-15079: Block Collapse - Faster collapse code when groups are co-located via Block Join style nested doc indexing.
diff --git a/solr/core/src/java/org/apache/solr/core/OverlaidConfigNode.java b/solr/core/src/java/org/apache/solr/core/OverlaidConfigNode.java
new file mode 100644
index 0000000..39d8abc
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/core/OverlaidConfigNode.java
@@ -0,0 +1,108 @@
+/*
+ * 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.core;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+import org.apache.solr.cluster.api.SimpleMap;
+import org.apache.solr.common.ConfigNode;
+
+/**A config node impl which has an overlay
+ *
+ */
+class OverlaidConfigNode implements ConfigNode {
+
+  private final ConfigOverlay overlay;
+  private final String _name;
+  private final ConfigNode delegate;
+  private final OverlaidConfigNode parent;
+
+  OverlaidConfigNode(ConfigOverlay overlay, String name, OverlaidConfigNode parent, ConfigNode delegate) {
+    this.overlay = overlay;
+    this._name = name;
+    this.delegate = delegate;
+    this.parent = parent;
+  }
+
+  private List<String> path(List<String> path) {
+    if(path== null) path = new ArrayList<>(5);
+    try {
+      if (parent != null) return parent.path(path);
+    } finally {
+      path.add(_name);
+    }
+    return path;
+  }
+
+  @Override
+  public ConfigNode get(String name) {
+    return wrap(delegate.get(name), name);
+  }
+
+  private ConfigNode wrap(ConfigNode n, String name) {
+    return new OverlaidConfigNode(overlay, name,this, n);
+  }
+
+  @Override
+  public ConfigNode get(String name, Predicate<ConfigNode> test) {
+    return wrap(delegate.get(name, test), name);
+  }
+
+  @Override
+  public String txt() {
+    return overlayText(delegate.txt(), null);
+  }
+
+  @Override
+  public ConfigNode get(String name, int idx) {
+    return wrap(delegate.get(name, idx), name);
+  }
+
+  @Override
+  public String name() {
+    return delegate.name();
+  }
+  @Override
+  public SimpleMap<String> attributes() {
+    return delegate.attributes();
+  }
+
+  @Override
+  public boolean exists() {
+    return delegate.exists();
+  }
+
+  @Override
+  public String attr(String name) {
+    return overlayText(delegate.attr(name),name);
+  }
+
+  private String overlayText(String def, String appendToPath) {
+    List<String> path = path(null);
+    if(appendToPath !=null) path.add(appendToPath);
+    Object val = overlay.getXPathProperty(path);
+    return val ==null? def: val.toString();
+  }
+
+  @Override
+  public void forEachChild(Function<ConfigNode, Boolean> fun) {
+    delegate.forEachChild(fun);
+  }
+}
diff --git a/solr/core/src/java/org/apache/solr/core/SolrConfig.java b/solr/core/src/java/org/apache/solr/core/SolrConfig.java
index 35775e1..66693f2 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrConfig.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrConfig.java
@@ -17,7 +17,6 @@
 package org.apache.solr.core;
 
 
-import javax.xml.parsers.ParserConfigurationException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -55,7 +54,6 @@ import org.apache.lucene.util.Version;
 import org.apache.solr.client.solrj.io.stream.expr.Expressible;
 import org.apache.solr.cloud.RecoveryStrategy;
 import org.apache.solr.cloud.ZkSolrResourceLoader;
-import org.apache.solr.cluster.api.SimpleMap;
 import org.apache.solr.common.ConfigNode;
 import org.apache.solr.common.MapSerializable;
 import org.apache.solr.common.SolrException;
@@ -87,7 +85,6 @@ import org.apache.solr.util.DataConfigNode;
 import org.apache.solr.util.circuitbreaker.CircuitBreakerManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.xml.sax.SAXException;
 
 import static org.apache.solr.common.params.CommonParams.NAME;
 import static org.apache.solr.common.params.CommonParams.PATH;
@@ -152,7 +149,7 @@ public class SolrConfig implements MapSerializable {
    * @param name        the configuration name used by the loader if the stream is null
    */
   public SolrConfig(Path instanceDir, String name)
-      throws ParserConfigurationException, IOException, SAXException {
+      throws IOException {
     this(new SolrResourceLoader(instanceDir), name, true, null);
   }
 
@@ -200,6 +197,7 @@ public class SolrConfig implements MapSerializable {
    * @param isConfigsetTrusted  false if configset was uploaded using unsecured configset upload API, true otherwise
    * @param substitutableProperties optional properties to substitute into the XML
    */
+  @SuppressWarnings("unchecked")
   private SolrConfig(SolrResourceLoader loader, String name, boolean isConfigsetTrusted, Properties substitutableProperties)
       throws IOException {
     this.resourceLoader = loader;
@@ -577,13 +575,9 @@ public class SolrConfig implements MapSerializable {
 
   public List<PluginInfo> readPluginInfos(SolrPluginInfo info, boolean requireName, boolean requireClass) {
     ArrayList<PluginInfo> result = new ArrayList<>();
-    try {
-      for (ConfigNode node : info.configReader.apply(this)) {
-        PluginInfo pluginInfo = new PluginInfo(node, "[solrconfig.xml] " + info.tag, requireName, requireClass);
-        if (pluginInfo.isEnabled()) result.add(pluginInfo);
-      }
-    } catch (RuntimeException e) {
-      throw e;
+    for (ConfigNode node : info.configReader.apply(this)) {
+      PluginInfo pluginInfo = new PluginInfo(node, "[solrconfig.xml] " + info.tag, requireName, requireClass);
+      if (pluginInfo.isEnabled()) result.add(pluginInfo);
     }
     return result;
   }
@@ -1055,87 +1049,10 @@ public class SolrConfig implements MapSerializable {
       //there is no overlay
       return root.get(name);
     }
-    return new OverlaidConfigNode(name, null,root.get(name));
+    return new OverlaidConfigNode(overlay, name, null,root.get(name));
   }
 
   public ConfigNode get(String name, Predicate<ConfigNode> test) {
     return root.get(name, test);
   }
-   private class OverlaidConfigNode implements ConfigNode {
-
-    private final String _name;
-    private final ConfigNode delegate;
-    private final OverlaidConfigNode parent;
-
-     private OverlaidConfigNode(String name, OverlaidConfigNode parent, ConfigNode delegate) {
-       this._name = name;
-       this.delegate = delegate;
-       this.parent = parent;
-     }
-
-     private List<String> path(List<String> path) {
-       if(path== null) path = new ArrayList<>(5);
-       try {
-         if (parent != null) return parent.path(path);
-       } finally {
-         path.add(_name);
-       }
-       return path;
-     }
-
-     @Override
-    public ConfigNode get(String name) {
-      return wrap(delegate.get(name), name);
-    }
-
-    private ConfigNode wrap(ConfigNode n, String name) {
-      return new OverlaidConfigNode(name,this, n);
-    }
-
-    @Override
-    public ConfigNode get(String name, Predicate<ConfigNode> test) {
-      return wrap(delegate.get(name, test), name);
-    }
-
-     @Override
-     public String txt() {
-       return overlayText(delegate.txt(), null);
-     }
-
-     @Override
-    public ConfigNode get(String name, int idx) {
-      return wrap(delegate.get(name, idx), name);
-    }
-
-    @Override
-    public String name() {
-      return delegate.name();
-    }
-    @Override
-    public SimpleMap<String> attributes() {
-      return delegate.attributes();
-    }
-
-     @Override
-     public boolean exists() {
-       return delegate.exists();
-     }
-
-     @Override
-     public String attr(String name) {
-       return overlayText(delegate.attr(name),name);
-     }
-
-     private String overlayText(String def, String appendToPath) {
-       List<String> path = path(null);
-       if(appendToPath !=null) path.add(appendToPath);
-       Object val = overlay.getXPathProperty(path);
-       return val ==null? def: val.toString();
-     }
-
-     @Override
-    public void forEachChild(Function<ConfigNode, Boolean> fun) {
-       delegate.forEachChild(fun);
-    }
-  }
 }