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
This commit is contained in:
Jason Tedor 2016-11-18 13:04:28 -05:00 committed by GitHub
parent 52d4cd504a
commit 484ad31ed9
2 changed files with 14 additions and 2 deletions

View File

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

View File

@ -19,6 +19,8 @@
package org.elasticsearch.plugins; package org.elasticsearch.plugins;
import java.io.Closeable;
import java.io.IOException;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; 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 * 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. * 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. * Node level guice modules.
@ -162,6 +164,16 @@ public abstract class Plugin {
return Collections.emptyList(); 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 * Old-style guice index level extension point. {@code @Deprecated} and {@code final} to act as a signpost for plugin authors upgrading
* from 2.x. * from 2.x.