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} */

Reply via email to