You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dw...@apache.org on 2021/03/10 09:56:34 UTC
[lucene] 38/42: fix the API to show package version
This is an automated email from the ASF dual-hosted git repository.
dweiss pushed a commit to branch jira/solr14155-1
in repository https://gitbox.apache.org/repos/asf/lucene.git
commit eeac7dc6497aeca4db74acfbdc2632ca3788be61
Author: noblepaul <no...@gmail.com>
AuthorDate: Wed Jan 13 18:11:03 2021 +1100
fix the API to show package version
---
.../org/apache/solr/handler/SolrConfigHandler.java | 25 +++++++++----------
.../solr/handler/component/SearchHandler.java | 11 ++++-----
.../java/org/apache/solr/pkg/PackageListeners.java | 5 +++-
.../solr/pkg/PackageListeningClassLoader.java | 28 +++++++++++++---------
.../org/apache/solr/pkg/PackagePluginHolder.java | 6 +++--
5 files changed, 42 insertions(+), 33 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
index 0b97896..1356da5 100644
--- a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
@@ -36,6 +36,7 @@ import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
+import java.util.function.BiConsumer;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@@ -48,6 +49,7 @@ import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.io.stream.expr.Expressible;
import org.apache.solr.cloud.ZkController;
import org.apache.solr.cloud.ZkSolrResourceLoader;
+import org.apache.solr.common.MapWriter;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.cloud.ClusterState;
import org.apache.solr.common.cloud.DocCollection;
@@ -70,6 +72,7 @@ import org.apache.solr.core.SolrConfig;
import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.pkg.PackageListeners;
+import org.apache.solr.pkg.PackageLoader;
import org.apache.solr.request.LocalSolrQueryRequest;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrRequestHandler;
@@ -250,25 +253,23 @@ public class SolrConfigHandler extends RequestHandlerBase implements SolrCoreAwa
String componentName = req.getParams().get("componentName");
if (componentName != null) {
@SuppressWarnings({"rawtypes"})
- Map map = (Map) val.get(parts.get(1));
- if (map != null) {
- Object o = map.get(componentName);
- val.put(parts.get(1), makeMap(componentName, o));
+ Map pluginNameVsPluginInfo = (Map) val.get(parts.get(1));
+ if (pluginNameVsPluginInfo != null) {
+ Object pluginInfo = pluginNameVsPluginInfo.get(componentName);
+ val.put(parts.get(1), makeMap(componentName, pluginInfo));
if (req.getParams().getBool("meta", false)) {
// meta=true is asking for the package info of the plugin
// We go through all the listeners and see if there is one registered for this plugin
List<PackageListeners.Listener> listeners = req.getCore().getPackageListeners().getListeners();
for (PackageListeners.Listener listener :
listeners) {
- PluginInfo info = listener.pluginInfo();
- if(info == null) continue;
- if (info.type.equals(parts.get(1)) && info.name.equals(componentName)) {
- if (o instanceof Map) {
- @SuppressWarnings({"rawtypes"})
- Map m1 = (Map) o;
- m1.put("_packageinfo_", listener.getPackageVersion(info.cName));
+ Map<String, PackageLoader.Package.Version> infos = listener.packageDetails();
+ if(infos == null || infos.isEmpty()) continue;
+ infos.forEach((s, mapWriter) -> {
+ if(s.equals(((Map) pluginInfo).get("class"))) {
+ ((Map) pluginInfo).put("_packageinfo_", mapWriter);
}
- }
+ });
}
}
}
diff --git a/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java b/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java
index f5c2474..94b5b3e 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java
@@ -19,11 +19,7 @@ package org.apache.solr.handler.component;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.invoke.MethodHandles;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.commons.lang3.StringUtils;
@@ -31,6 +27,7 @@ import org.apache.lucene.index.ExitableDirectoryReader;
import org.apache.lucene.search.TotalHits;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.cloud.ZkController;
+import org.apache.solr.common.MapWriter;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
@@ -162,8 +159,8 @@ public class SearchHandler extends RequestHandlerBase implements SolrCoreAware,
}
@Override
- public PluginInfo pluginInfo() {
- return null;
+ public Map<String , PackageLoader.Package.Version> packageDetails() {
+ return Collections.emptyMap();
}
@Override
diff --git a/solr/core/src/java/org/apache/solr/pkg/PackageListeners.java b/solr/core/src/java/org/apache/solr/pkg/PackageListeners.java
index 25c6e4f..2b36b1e 100644
--- a/solr/core/src/java/org/apache/solr/pkg/PackageListeners.java
+++ b/solr/core/src/java/org/apache/solr/pkg/PackageListeners.java
@@ -110,7 +110,10 @@ public class PackageListeners {
/**Name of the package or null to listen to all package changes */
String packageName();
- PluginInfo pluginInfo();
+ /** fetch the package versions of class names
+ *
+ */
+ Map<String, PackageLoader.Package.Version> packageDetails();
/**A callback when the package is updated */
void changed(PackageLoader.Package pkg, Ctx ctx);
diff --git a/solr/core/src/java/org/apache/solr/pkg/PackageListeningClassLoader.java b/solr/core/src/java/org/apache/solr/pkg/PackageListeningClassLoader.java
index 75deaa1..6e57f44 100644
--- a/solr/core/src/java/org/apache/solr/pkg/PackageListeningClassLoader.java
+++ b/solr/core/src/java/org/apache/solr/pkg/PackageListeningClassLoader.java
@@ -26,9 +26,8 @@ import org.apache.solr.common.cloud.SolrClassLoader;
import org.apache.solr.core.SolrResourceLoader;
import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
/**
* A {@link SolrClassLoader} that is designed to listen to a set of packages.
@@ -41,7 +40,8 @@ public class PackageListeningClassLoader implements SolrClassLoader , PackageLis
private final Function<String, String> pkgVersionSupplier;
/** package name and the versions that we are tracking
*/
- private Map<String ,PackageAPI.PkgVersion> packageVersions = new HashMap<>(1);
+ private Map<String ,PackageAPI.PkgVersion> packageVersions = new ConcurrentHashMap<>(1);
+ private Map<String, String> classNameVsPackageName = new ConcurrentHashMap<>();
private final Runnable onReload;
/**
@@ -57,7 +57,8 @@ public class PackageListeningClassLoader implements SolrClassLoader , PackageLis
this.fallbackClassLoader = fallbackClassLoader;
this.pkgVersionSupplier = pkgVersionSupplier;
this.onReload = () -> {
- packageVersions = new HashMap<>();
+ packageVersions = new ConcurrentHashMap<>();
+ classNameVsPackageName = new ConcurrentHashMap<>();
onReload.run();
};
}
@@ -70,8 +71,9 @@ public class PackageListeningClassLoader implements SolrClassLoader , PackageLis
return fallbackClassLoader.newInstance(cname, expectedType, subpackages);
} else {
PackageLoader.Package.Version version = findPackageVersion(cName, true);
- return applyResourceLoaderAware(version, version.getLoader().newInstance(cName.className, expectedType, subpackages));
-
+ T obj = version.getLoader().newInstance(cName.className, expectedType, subpackages);
+ classNameVsPackageName.put(cName.original, cName.pkg);
+ return applyResourceLoaderAware(version, obj);
}
}
@@ -116,7 +118,9 @@ public class PackageListeningClassLoader implements SolrClassLoader , PackageLis
return fallbackClassLoader.newInstance(cname, expectedType, subPackages, params, args);
} else {
PackageLoader.Package.Version version = findPackageVersion(cName, true);
- return applyResourceLoaderAware(version, version.getLoader().newInstance(cName.className, expectedType, subPackages, params, args));
+ T obj = version.getLoader().newInstance(cName.className, expectedType, subPackages, params, args);
+ classNameVsPackageName.put(cName.original, cName.pkg);
+ return applyResourceLoaderAware(version, obj);
}
}
@@ -127,7 +131,9 @@ public class PackageListeningClassLoader implements SolrClassLoader , PackageLis
return fallbackClassLoader.findClass(cname, expectedType);
} else {
PackageLoader.Package.Version version = findPackageVersion(cName, true);
- return version.getLoader().findClass(cName.className, expectedType);
+ Class<? extends T> klas = version.getLoader().findClass(cName.className, expectedType);
+ classNameVsPackageName.put(cName.original, cName.pkg);
+ return klas;
}
}
@@ -138,8 +144,8 @@ public class PackageListeningClassLoader implements SolrClassLoader , PackageLis
}
@Override
- public PluginInfo pluginInfo() {
- return null;
+ public Map<String, PackageLoader.Package.Version> packageDetails() {
+ return Collections.emptyMap();
}
@Override
diff --git a/solr/core/src/java/org/apache/solr/pkg/PackagePluginHolder.java b/solr/core/src/java/org/apache/solr/pkg/PackagePluginHolder.java
index 1ee5cf9..2a07d0c 100644
--- a/solr/core/src/java/org/apache/solr/pkg/PackagePluginHolder.java
+++ b/solr/core/src/java/org/apache/solr/pkg/PackagePluginHolder.java
@@ -20,6 +20,8 @@ package org.apache.solr.pkg;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.util.Collections;
+import java.util.List;
+import java.util.Map;
import org.apache.lucene.util.ResourceLoaderAware;
import org.apache.solr.common.MapWriter;
@@ -58,8 +60,8 @@ public class PackagePluginHolder<T> extends PluginBag.PluginHolder<T> {
}
@Override
- public PluginInfo pluginInfo() {
- return info;
+ public Map<String, PackageLoader.Package.Version> packageDetails() {
+ return Collections.singletonMap(info.cName.original, pkgVersion);
}
@Override