|
@@ -168,12 +168,14 @@ import org.elasticsearch.plugins.PersistentTaskPlugin;
|
|
import org.elasticsearch.plugins.Plugin;
|
|
import org.elasticsearch.plugins.Plugin;
|
|
import org.elasticsearch.plugins.PluginsService;
|
|
import org.elasticsearch.plugins.PluginsService;
|
|
import org.elasticsearch.plugins.RecoveryPlannerPlugin;
|
|
import org.elasticsearch.plugins.RecoveryPlannerPlugin;
|
|
|
|
+import org.elasticsearch.plugins.ReloadablePlugin;
|
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
|
import org.elasticsearch.plugins.ScriptPlugin;
|
|
import org.elasticsearch.plugins.ScriptPlugin;
|
|
import org.elasticsearch.plugins.SearchPlugin;
|
|
import org.elasticsearch.plugins.SearchPlugin;
|
|
import org.elasticsearch.plugins.ShutdownAwarePlugin;
|
|
import org.elasticsearch.plugins.ShutdownAwarePlugin;
|
|
import org.elasticsearch.plugins.SystemIndexPlugin;
|
|
import org.elasticsearch.plugins.SystemIndexPlugin;
|
|
import org.elasticsearch.plugins.TracerPlugin;
|
|
import org.elasticsearch.plugins.TracerPlugin;
|
|
|
|
+import org.elasticsearch.plugins.internal.ReloadAwarePlugin;
|
|
import org.elasticsearch.readiness.ReadinessService;
|
|
import org.elasticsearch.readiness.ReadinessService;
|
|
import org.elasticsearch.repositories.RepositoriesModule;
|
|
import org.elasticsearch.repositories.RepositoriesModule;
|
|
import org.elasticsearch.repositories.RepositoriesService;
|
|
import org.elasticsearch.repositories.RepositoriesService;
|
|
@@ -1014,6 +1016,9 @@ public class Node implements Closeable {
|
|
HealthInfoCache nodeHealthOverview = HealthInfoCache.create(clusterService);
|
|
HealthInfoCache nodeHealthOverview = HealthInfoCache.create(clusterService);
|
|
HealthApiStats healthApiStats = new HealthApiStats();
|
|
HealthApiStats healthApiStats = new HealthApiStats();
|
|
|
|
|
|
|
|
+ List<ReloadablePlugin> reloadablePlugins = pluginsService.filterPlugins(ReloadablePlugin.class);
|
|
|
|
+ pluginsService.filterPlugins(ReloadAwarePlugin.class).forEach(p -> p.setReloadCallback(wrapPlugins(reloadablePlugins)));
|
|
|
|
+
|
|
modules.add(b -> {
|
|
modules.add(b -> {
|
|
b.bind(Node.class).toInstance(this);
|
|
b.bind(Node.class).toInstance(this);
|
|
b.bind(NodeService.class).toInstance(nodeService);
|
|
b.bind(NodeService.class).toInstance(nodeService);
|
|
@@ -1205,6 +1210,23 @@ public class Node implements Closeable {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Wrap a group of reloadable plugins into a single reloadable plugin interface
|
|
|
|
+ * @param reloadablePlugins A list of reloadable plugins
|
|
|
|
+ * @return A single ReloadablePlugin that, upon reload, reloads the plugins it wraps
|
|
|
|
+ */
|
|
|
|
+ private static ReloadablePlugin wrapPlugins(List<ReloadablePlugin> reloadablePlugins) {
|
|
|
|
+ return settings -> {
|
|
|
|
+ for (ReloadablePlugin plugin : reloadablePlugins) {
|
|
|
|
+ try {
|
|
|
|
+ plugin.reload(settings);
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ throw new RuntimeException(e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+
|
|
private Tracer getTracer(PluginsService pluginsService, Settings settings) {
|
|
private Tracer getTracer(PluginsService pluginsService, Settings settings) {
|
|
final List<TracerPlugin> tracerPlugins = pluginsService.filterPlugins(TracerPlugin.class);
|
|
final List<TracerPlugin> tracerPlugins = pluginsService.filterPlugins(TracerPlugin.class);
|
|
|
|
|