You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by nt...@apache.org on 2015/07/13 19:04:35 UTC

incubator-ignite git commit: IGNITE-1108 Added methods on PluginProvide interface.

Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-1108 [created] affce40be


IGNITE-1108 Added methods on PluginProvide interface.


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/affce40b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/affce40b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/affce40b

Branch: refs/heads/ignite-1108
Commit: affce40bed8726388e0b856f696cd61b3273615e
Parents: aa2d7cb
Author: nikolay_tikhonov <nt...@gridgain.com>
Authored: Mon Jul 13 20:04:08 2015 +0300
Committer: nikolay_tikhonov <nt...@gridgain.com>
Committed: Mon Jul 13 20:04:08 2015 +0300

----------------------------------------------------------------------
 .../ignite/internal/GridPluginComponent.java    |   4 +-
 .../apache/ignite/internal/IgniteKernal.java    |  14 +++
 .../plugin/IgnitePluginProcessor.java           |   3 +
 .../apache/ignite/plugin/PluginProvider.java    |  30 +++--
 .../ignite/plugin/PluginProviderAdapter.java    | 105 ++++++++++++++++
 .../org.apache.ignite.plugin.PluginProvider     |   1 +
 .../internal/IgnitePluginLifecycleSelfTest.java | 124 +++++++++++++++++++
 .../testsuites/IgniteComputeGridTestSuite.java  |   1 +
 8 files changed, 272 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/affce40b/modules/core/src/main/java/org/apache/ignite/internal/GridPluginComponent.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridPluginComponent.java b/modules/core/src/main/java/org/apache/ignite/internal/GridPluginComponent.java
index b438bc1..0087a19 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/GridPluginComponent.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/GridPluginComponent.java
@@ -60,12 +60,12 @@ public class GridPluginComponent implements GridComponent {
 
     /** {@inheritDoc} */
     @Override public void onKernalStart() throws IgniteCheckedException {
-        plugin.onIgniteStart();
+        plugin.onAfterStart();
     }
 
     /** {@inheritDoc} */
     @Override public void onKernalStop(boolean cancel) {
-        plugin.onIgniteStop(cancel);
+        plugin.onBeforeStop(cancel);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/affce40b/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 024dc7b..5af2f21 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
@@ -1801,6 +1801,20 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
                 }
             }
 
+            for (PluginProvider plugin : ctx.plugins().allProviders()) {
+                try {
+                    plugin.onAfterStop(cancel);
+                }
+                catch (Throwable e) {
+                    errOnStop = true;
+
+                    U.error(log, "Failed to stop component (ignoring): " + plugin, e);
+
+                    if (e instanceof Error)
+                        throw (Error)e;
+                }
+            }
+
             // Stops lifecycle aware components.
             U.stopLifecycleAware(log, lifecycleAwares(cfg));
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/affce40b/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 5e24b4b..f8d65c2 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
@@ -132,6 +132,9 @@ public class IgnitePluginProcessor extends GridProcessorAdapter {
 
     /** {@inheritDoc} */
     @Override public void start() throws IgniteCheckedException {
+        for (PluginProvider plugin : plugins.values())
+            plugin.onBeforeStart();
+
         ackPluginsInfo();
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/affce40b/modules/core/src/main/java/org/apache/ignite/plugin/PluginProvider.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/PluginProvider.java b/modules/core/src/main/java/org/apache/ignite/plugin/PluginProvider.java
index f064fde..a020991 100644
--- a/modules/core/src/main/java/org/apache/ignite/plugin/PluginProvider.java
+++ b/modules/core/src/main/java/org/apache/ignite/plugin/PluginProvider.java
@@ -75,6 +75,13 @@ public interface PluginProvider<C extends PluginConfiguration> {
     @Nullable public <T> T createComponent(PluginContext ctx, Class<T> cls);
 
     /**
+     * Callback that notifies that Ignite prepares to start plugin.
+     *
+     * @throws IgniteCheckedException Thrown in case of any errors.
+     */
+    public void onBeforeStart() throws IgniteCheckedException;
+
+    /**
      * Starts grid component.
      *
      * @param ctx Plugin context.
@@ -83,28 +90,35 @@ public interface PluginProvider<C extends PluginConfiguration> {
     public void start(PluginContext ctx) throws IgniteCheckedException;
 
     /**
-     * Stops grid component.
+     * Callback that notifies that Ignite has successfully started,
+     * including all internal components.
      *
-     * @param cancel If {@code true}, then all ongoing tasks or jobs for relevant
-     *      components need to be cancelled.
      * @throws IgniteCheckedException Thrown in case of any errors.
      */
-    public void stop(boolean cancel) throws IgniteCheckedException;
+    public void onAfterStart() throws IgniteCheckedException;
 
     /**
-     * Callback that notifies that Ignite has successfully started,
-     * including all internal components.
+     * Callback that notifies that internal components have successfully stopped.
      *
+     * @param cancel Flag indicating whether jobs should be canceled.
+     */
+    public void onAfterStop(boolean cancel) throws IgniteCheckedException;
+
+    /**
+     * Stops grid component.
+     *
+     * @param cancel If {@code true}, then all ongoing tasks or jobs for relevant
+     *      components need to be cancelled.
      * @throws IgniteCheckedException Thrown in case of any errors.
      */
-    public void onIgniteStart() throws IgniteCheckedException;
+    public void stop(boolean cancel) throws IgniteCheckedException;
 
     /**
      * Callback to notify that Ignite is about to stop.
      *
      * @param cancel Flag indicating whether jobs should be canceled.
      */
-    public void onIgniteStop(boolean cancel);
+    public void onBeforeStop(boolean cancel);
 
     /**
      * Gets plugin discovery data object that will be sent to the new node

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/affce40b/modules/core/src/main/java/org/apache/ignite/plugin/PluginProviderAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/PluginProviderAdapter.java b/modules/core/src/main/java/org/apache/ignite/plugin/PluginProviderAdapter.java
new file mode 100644
index 0000000..bef7000
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/plugin/PluginProviderAdapter.java
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.plugin;
+
+import org.apache.ignite.*;
+import org.apache.ignite.cluster.*;
+import org.jetbrains.annotations.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Adapter for {@link PluginProvider}.
+ */
+public class PluginProviderAdapter<C extends PluginConfiguration> implements PluginProvider<C> {
+    /** {@inheritDoc} */
+    @Override public String name() {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String version() {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String copyright() {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public <T extends IgnitePlugin> T plugin() {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void initExtensions(PluginContext ctx, ExtensionRegistry registry) {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override public <T> T createComponent(PluginContext ctx, Class<T> cls) {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void onBeforeStart() throws IgniteCheckedException {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public void start(PluginContext ctx) throws IgniteCheckedException {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public void onAfterStart() throws IgniteCheckedException {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public void onAfterStop(boolean cancel) {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public void stop(boolean cancel) throws IgniteCheckedException {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public void onBeforeStop(boolean cancel) {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override public Serializable provideDiscoveryData(UUID nodeId) {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void receiveDiscoveryData(UUID nodeId, Serializable data) {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public void validateNewNode(ClusterNode node) throws PluginValidationException {
+        // No-op.
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/affce40b/modules/core/src/test/java/META-INF/services/org.apache.ignite.plugin.PluginProvider
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/META-INF/services/org.apache.ignite.plugin.PluginProvider b/modules/core/src/test/java/META-INF/services/org.apache.ignite.plugin.PluginProvider
new file mode 100644
index 0000000..ed68caf
--- /dev/null
+++ b/modules/core/src/test/java/META-INF/services/org.apache.ignite.plugin.PluginProvider
@@ -0,0 +1 @@
+org.apache.ignite.internal.IgnitePluginLifecycleSelfTest$TestPluginProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/affce40b/modules/core/src/test/java/org/apache/ignite/internal/IgnitePluginLifecycleSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/IgnitePluginLifecycleSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/IgnitePluginLifecycleSelfTest.java
new file mode 100644
index 0000000..43c1c05
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/IgnitePluginLifecycleSelfTest.java
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal;
+
+import org.apache.ignite.*;
+import org.apache.ignite.plugin.*;
+import org.apache.ignite.testframework.*;
+import org.apache.ignite.testframework.junits.common.*;
+
+import java.util.concurrent.*;
+
+/**
+ *
+ */
+@GridCommonTest(group = "Kernal Self")
+public class IgnitePluginLifecycleSelfTest extends GridCommonAbstractTest {
+    /** */
+    public IgnitePluginLifecycleSelfTest() {
+        super(false);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected long getTestTimeout() {
+        return 10000;
+    }
+
+    /**
+     * @throws Exception If an error occurs.
+     */
+    public void testStopGrid() throws Exception {
+        try {
+            startGrid("testGrid");
+        }
+        finally {
+            stopGrid("testGrid", true);
+        }
+
+        assertTrue(TestPluginProvider.bfStart && TestPluginProvider.start && TestPluginProvider.afStart
+            && TestPluginProvider.bfStop && TestPluginProvider.stop && TestPluginProvider.afStop
+        );
+    }
+
+    /** */
+    public static class TestPluginCfg implements PluginConfiguration {
+    }
+
+    /** */
+    public static class TestPluginProvider extends PluginProviderAdapter<TestPluginCfg> {
+        /** */
+        IgniteKernal ignite;
+
+        public static boolean bfStart, start, afStart, bfStop, stop, afStop;
+
+
+        /** {@inheritDoc} */
+        @Override public String name() {
+            return "TestPlugin";
+        }
+
+        /** {@inheritDoc} */
+        @Override public IgnitePlugin plugin() {
+            return new IgnitePlugin() {};
+        }
+
+        /** {@inheritDoc} */
+        @Override public void onBeforeStart() throws IgniteCheckedException {
+            bfStart = true;
+
+            assertFalse(start || afStart || bfStop || stop || afStop);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void start(PluginContext ctx) throws IgniteCheckedException {
+            ignite = (IgniteKernal)ctx.grid();
+
+            start = true;
+
+            assertFalse(afStart || bfStop || stop || afStop);
+        }
+
+        @Override public void onAfterStart() throws IgniteCheckedException {
+            afStart = true;
+
+            assertFalse(bfStop || stop || afStop);
+        }
+
+        @Override public void onBeforeStop(boolean cancel) {
+            bfStop = true;
+
+            assertFalse(stop || afStop);
+        }
+
+        @Override public void stop(boolean cancel) throws IgniteCheckedException {
+            stop = true;
+
+            assertFalse(afStop);
+        }
+
+        @Override public void onAfterStop(boolean cancel) {
+            GridTestUtils.assertThrows(null, new Callable<Object>() {
+                @Override public Object call() throws Exception {
+                    return ignite.cache(null);
+                }
+            }, IllegalStateException.class, null);
+
+            afStop = true;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/affce40b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteComputeGridTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteComputeGridTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteComputeGridTestSuite.java
index baf425c8..2f81d6f 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteComputeGridTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteComputeGridTestSuite.java
@@ -94,6 +94,7 @@ public class IgniteComputeGridTestSuite {
         suite.addTestSuite(IgniteComputeEmptyClusterGroupTest.class);
         suite.addTestSuite(IgniteComputeTopologyExceptionTest.class);
         suite.addTestSuite(GridTaskFailoverAffinityRunTest.class);
+        suite.addTestSuite(IgnitePluginLifecycleSelfTest.class);
 
         return suite;
     }