IGNITE-1108 Fixed review notes.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/69cee3a1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/69cee3a1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/69cee3a1 Branch: refs/heads/ignite-1108 Commit: 69cee3a17f2b6b4f340f4c07fe81f729e65ef508 Parents: 45299a0 Author: nikolay_tikhonov <ntikho...@gridgain.com> Authored: Tue Aug 11 11:45:17 2015 +0300 Committer: nikolay_tikhonov <ntikho...@gridgain.com> Committed: Tue Aug 11 11:45:17 2015 +0300 ---------------------------------------------------------------------- .../apache/ignite/internal/IgniteKernal.java | 9 +- .../plugin/IgnitePluginProcessor.java | 90 +++++++++++++++++--- 2 files changed, 82 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/69cee3a1/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java index bf47f63..289c8a4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java @@ -790,13 +790,6 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable { startProcessor(new GridServiceProcessor(ctx)); startProcessor(new DataStructuresProcessor(ctx)); - // Start plugins. - for (PluginProvider provider : ctx.plugins().allProviders()) { - ctx.add(new GridPluginComponent(provider)); - - provider.start(ctx.plugins().pluginContextForProvider(provider)); - } - gw.writeLock(); try { @@ -1815,6 +1808,8 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable { } } + ctx.plugins().onAfterStopNotify(cancel); + // Stops lifecycle aware components. U.stopLifecycleAware(log, lifecycleAwares(cfg)); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/69cee3a1/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/IgnitePluginProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/IgnitePluginProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/IgnitePluginProcessor.java index aa9778f..0abbf1e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/IgnitePluginProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/IgnitePluginProcessor.java @@ -31,12 +31,15 @@ import java.lang.reflect.*; import java.util.*; /** - * + * Plugin processor. */ public class IgnitePluginProcessor extends GridProcessorAdapter { /** */ private final Map<String, PluginProvider> plugins = new LinkedHashMap<>(); + /** Started plugins. */ + private List<PluginProvider> startedPlugins = new LinkedList<>(); + /** */ private final Map<PluginProvider, GridPluginContext> pluginCtxMap = new IdentityHashMap<>(); @@ -132,29 +135,96 @@ public class IgnitePluginProcessor extends GridProcessorAdapter { /** {@inheritDoc} */ @Override public void start() throws IgniteCheckedException { - for (Map.Entry<PluginProvider, GridPluginContext> e : pluginCtxMap.entrySet()) - e.getKey().onBeforeStart(e.getValue()); + // Before start. + for (PluginProvider provider : plugins.values()) + provider.onBeforeStart(pluginCtxMap.get(provider)); + + // Start plugins. + for (PluginProvider provider : plugins.values()) + startPlugin(provider, pluginCtxMap.get(provider)); ackPluginsInfo(); } + /** + * @param plugin Plugin. + * @param pluginCtx Plugin context. + * @throws IgniteCheckedException If start plugin failed. + */ + private void startPlugin(PluginProvider plugin, PluginContext pluginCtx) throws IgniteCheckedException { + try { + plugin.start(pluginCtx); + + startedPlugins.add(plugin); + + if (log.isDebugEnabled()) + log.debug("Plugin started: " + plugin); + } + catch (IgniteCheckedException e) { + throw new IgniteCheckedException("Failed to start plugin: " + plugin, e); + } + } + + /** {@inheritDoc} */ + @Override public void onKernalStart() throws IgniteCheckedException { + for (PluginProvider provider : startedPlugins) + provider.onAfterStart(); + } + /** {@inheritDoc} */ @Override public void stop(boolean cancel) throws IgniteCheckedException { - boolean errOnStop = false; + for (ListIterator<PluginProvider> it = startedPlugins.listIterator(startedPlugins.size()); it.hasPrevious();) { + PluginProvider plugin = it.previous(); + + try { + plugin.stop(cancel); + + if (log.isDebugEnabled()) + log.debug("Plugin stopped: " + plugin); + } + catch (Throwable e) { + U.error(log, "Failed to stop plugin (ignoring):" + plugin, e); + + if (e instanceof Error) + throw e; + } + } + } + + /** + * Notify plugin that processors was stopped. + */ + public void onAfterStopNotify(boolean cancel) { + for (ListIterator<PluginProvider> it = startedPlugins.listIterator(startedPlugins.size()); it.hasPrevious();) { + PluginProvider plugin = it.previous(); - for (PluginProvider plugin : plugins.values()) { try { plugin.onAfterStop(cancel); } - catch (Exception e) { - errOnStop = true; + catch (Throwable e) { + U.error(log, "Failed to after-stop plugin: " + plugin, e); - U.error(log, "Failed to invoke afterStop for plugin (ignoring): " + plugin, e); + if (e instanceof Error) + throw (Error)e; } } + } + + /** {@inheritDoc} */ + @Override public void onKernalStop(boolean cancel) { + for (ListIterator<PluginProvider> it = startedPlugins.listIterator(startedPlugins.size()); it.hasPrevious();) { + PluginProvider plugin = it.previous(); + + try { + plugin.onBeforeStop(cancel); + } + catch (Throwable e) { + U.error(log, "Failed to pre-stop plugin: " + plugin, e); - if (errOnStop) - throw new IgniteCheckedException("Failed to stop plugins."); + if (e instanceof Error) + throw (Error)e; + } + } } /** {@inheritDoc} */