Forráskód Böngészése

Clarify that plugins can be closed

Plugins are closed if they implement java.io.Closeable but this is not
clear from the plugin interface. This commit clarifies this by declaring
that Plugins implement java.io.Closeable and adding an empty
implementation to the base Plugin class.

Relates #21669
Jason Tedor 9 éve
szülő
commit
484ad31ed9

+ 1 - 1
core/src/main/java/org/elasticsearch/node/Node.java

@@ -734,7 +734,7 @@ public class Node implements Closeable {
             toClose.add(() -> stopWatch.stop().start("plugin(" + plugin.getClass().getName() + ")"));
             toClose.add(plugin);
         }
-        toClose.addAll(pluginsService.filterPlugins(Closeable.class));
+        toClose.addAll(pluginsService.filterPlugins(Plugin.class));
 
         toClose.add(() -> stopWatch.stop().start("script"));
         toClose.add(injector.getInstance(ScriptService.class));

+ 13 - 1
core/src/main/java/org/elasticsearch/plugins/Plugin.java

@@ -19,6 +19,8 @@
 
 package org.elasticsearch.plugins;
 
+import java.io.Closeable;
+import java.io.IOException;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -70,7 +72,7 @@ import java.util.function.UnaryOperator;
  * methods should cause any extensions of {@linkplain Plugin} that used the pre-5.x style extension syntax to fail to build and point the
  * plugin author at the new extension syntax. We hope that these make the process of upgrading a plugin from 2.x to 5.x only mildly painful.
  */
-public abstract class Plugin {
+public abstract class Plugin implements Closeable {
 
     /**
      * Node level guice modules.
@@ -162,6 +164,16 @@ public abstract class Plugin {
         return Collections.emptyList();
     }
 
+    /**
+     * Close the resources opened by this plugin.
+     *
+     * @throws IOException if the plugin failed to close its resources
+     */
+    @Override
+    public void close() throws IOException {
+
+    }
+
     /**
      * Old-style guice index level extension point. {@code @Deprecated} and {@code final} to act as a signpost for plugin authors upgrading
      * from 2.x.