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);
- }
- }
}