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:48 UTC

[lucene-solr] branch jira/solr14151 created (now 2302629)

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

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


      at 2302629  initial commit

This branch includes the following new commits:

     new 2302629  initial commit

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[lucene-solr] 01/01: initial commit

Posted by no...@apache.org.
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);
 
       }