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 2019/12/25 00:49:49 UTC
[lucene-solr] 01/01: initial commit
This is an automated email from the ASF dual-hosted git repository.
noble pushed a commit to branch jira/solr14151
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
commit 2302629ee40c632ad9c3a5dd507b6425ac5db779
Author: noble <no...@apache.org>
AuthorDate: Wed Dec 25 11:46:55 2019 +1100
initial commit
---
.../solr/handler/component/SearchHandler.java | 2 +-
.../java/org/apache/solr/pkg/PackageListeners.java | 40 ++++++++++++++++++----
.../org/apache/solr/pkg/PackagePluginHolder.java | 2 +-
3 files changed, 35 insertions(+), 9 deletions(-)
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 2d4d63d..5e48262 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
@@ -154,7 +154,7 @@ public class SearchHandler extends RequestHandlerBase implements SolrCoreAware,
}
@Override
- public void changed(PackageLoader.Package pkg) {
+ public void changed(PackageLoader.Package pkg, PackageListeners.Ctx ctx) {
//we could optimize this by listening to only relevant packages,
// but it is not worth optimizing as these are lightweight objects
components = null;
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 0287f5e..5802ee0 100644
--- a/solr/core/src/java/org/apache/solr/pkg/PackageListeners.java
+++ b/solr/core/src/java/org/apache/solr/pkg/PackageListeners.java
@@ -21,8 +21,10 @@ import java.lang.invoke.MethodHandles;
import java.lang.ref.Reference;
import java.lang.ref.SoftReference;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import org.apache.solr.core.PluginInfo;
import org.apache.solr.core.SolrCore;
@@ -75,11 +77,21 @@ public class PackageListeners {
}
private synchronized void invokeListeners(PackageLoader.Package pkg) {
- for (Reference<Listener> ref : listeners) {
- Listener listener = ref.get();
- if(listener == null) continue;
- if (listener.packageName() == null || listener.packageName().equals(pkg.name())) {
- listener.changed(pkg);
+ Ctx ctx = new Ctx();
+
+ try {
+ for (Reference<Listener> ref : listeners) {
+ Listener listener = ref.get();
+ if(listener == null) continue;
+ if (listener.packageName() == null || listener.packageName().equals(pkg.name())) {
+ listener.changed(pkg, ctx);
+ }
+ }
+ } finally {
+ if(ctx.postProcessors != null){
+ for (Runnable value : ctx.postProcessors.values()) {
+ value.run();
+ }
}
}
}
@@ -96,14 +108,28 @@ public class PackageListeners {
}
+ public class Ctx {
+ private Map<String, Runnable > postProcessors;
+ public void addPostProcessor(String name, Runnable runnable){
+ if(postProcessors == null) postProcessors = new HashMap<>();
+ postProcessors.put(name, runnable);
+ }
+
+ public Runnable getPostProcessor(String name){
+ if(postProcessors == null) return null;
+ return postProcessors.get(name);
+ }
+
+
+ }
public interface Listener {
- /**Name of the package or null to loisten to all package changes
+ /**Name of the package or null to listen to all package changes
*/
String packageName();
PluginInfo pluginInfo();
- void changed(PackageLoader.Package pkg);
+ void changed(PackageLoader.Package pkg, Ctx ctx);
PackageLoader.Package.Version getPackageVersion();
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 c6ddd4f..50bf567 100644
--- a/solr/core/src/java/org/apache/solr/pkg/PackagePluginHolder.java
+++ b/solr/core/src/java/org/apache/solr/pkg/PackagePluginHolder.java
@@ -56,7 +56,7 @@ public class PackagePluginHolder<T> extends PluginBag.PluginHolder<T> {
}
@Override
- public void changed(PackageLoader.Package pkg) {
+ public void changed(PackageLoader.Package pkg, PackageListeners.Ctx ctx) {
reload(pkg);
}