Skip to content

Commit

Permalink
Clarify that plugins can be closed
Browse files Browse the repository at this point in the history
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
  • Loading branch information
jasontedor committed Nov 18, 2016
1 parent 4ef9bd0 commit c413c14
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 2 deletions.
2 changes: 1 addition & 1 deletion core/src/main/java/org/elasticsearch/node/Node.java
Expand Up @@ -741,7 +741,7 @@ public synchronized void close() throws IOException {
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));
Expand Down
14 changes: 13 additions & 1 deletion core/src/main/java/org/elasticsearch/plugins/Plugin.java
Expand Up @@ -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;
Expand Down Expand Up @@ -70,7 +72,7 @@
* 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.
Expand Down Expand Up @@ -162,6 +164,16 @@ public List<ExecutorBuilder<?>> getExecutorBuilders(Settings settings) {
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.
Expand Down

0 comments on commit c413c14

Please sign in to comment.