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:45:42 UTC

[lucene] 01/21: initial commit

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

dweiss pushed a commit to branch jira/solr14155
in repository https://gitbox.apache.org/repos/asf/lucene.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);
 
       }