You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2015/03/04 17:26:55 UTC
[13/14] incubator-ignite git commit: # IGNITE-187 Reworked kernal
start to use @SkipDaemon annotation.
# IGNITE-187 Reworked kernal start to use @SkipDaemon annotation.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/9dcd5b09
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/9dcd5b09
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/9dcd5b09
Branch: refs/heads/ignite-187
Commit: 9dcd5b097aed41812270f12ed19aa88bc0ddb037
Parents: 8987f61
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Mar 4 23:21:56 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Mar 4 23:21:56 2015 +0700
----------------------------------------------------------------------
.../apache/ignite/internal/IgniteKernal.java | 25 +++++++++++---
.../org/apache/ignite/internal/SkipDaemon.java | 29 +++++++++++++++++
.../ignite/internal/managers/GridManager.java | 10 ++++++
.../internal/managers/GridManagerAdapter.java | 34 +++++++++-----------
.../checkpoint/GridCheckpointManager.java | 7 +---
.../collision/GridCollisionManager.java | 7 +---
.../discovery/GridDiscoveryManager.java | 11 +++++--
.../managers/indexing/GridIndexingManager.java | 7 +---
.../swapspace/GridSwapSpaceManager.java | 7 +---
.../org/apache/ignite/spi/IgniteSpiAdapter.java | 20 ++----------
.../ignite/spi/IgniteSpiConsistencyChecked.java | 7 ----
11 files changed, 91 insertions(+), 73 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9dcd5b09/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 ae481f5..7b289ee 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
@@ -453,8 +453,7 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
assert cfg != null;
return F.transform(cfg.getUserAttributes().entrySet(), new C1<Map.Entry<String, ?>, String>() {
- @Override
- public String apply(Map.Entry<String, ?> e) {
+ @Override public String apply(Map.Entry<String, ?> e) {
return e.getKey() + ", " + e.getValue().toString();
}
});
@@ -803,7 +802,12 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
if (comp instanceof GridIoManager)
continue;
- comp.onKernalStart();
+ if (!skipDaemon(comp)) {
+ if (log.isDebugEnabled())
+ log.debug("Skipping onKernalStart on daemon node for component: " + comp);
+
+ comp.onKernalStart();
+ }
}
// Register MBeans.
@@ -1701,7 +1705,12 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
GridComponent comp = it.previous();
try {
- comp.onKernalStop(cancel);
+ if (!skipDaemon(comp)) {
+ if (log.isDebugEnabled())
+ log.debug("Skipping onKernalStop on daemon node for component: " + comp);
+
+ comp.onKernalStop(cancel);
+ }
}
catch (Throwable e) {
errOnStop = true;
@@ -2667,6 +2676,14 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
}
}
+ /**
+ * @param comp Grid component class.
+ * @return {@code true} if node running in daemon mode and component marked by {@code SkipDaemon} annotation.
+ */
+ private boolean skipDaemon(GridComponent comp) {
+ return ctx.isDaemon() && U.hasAnnotation(comp.getClass(), SkipDaemon.class);
+ }
+
/** {@inheritDoc} */
@Override public String toString() {
return S.toString(IgniteKernal.class, this);
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9dcd5b09/modules/core/src/main/java/org/apache/ignite/internal/SkipDaemon.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/SkipDaemon.java b/modules/core/src/main/java/org/apache/ignite/internal/SkipDaemon.java
new file mode 100644
index 0000000..5fb2c25
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/SkipDaemon.java
@@ -0,0 +1,29 @@
+/*
+ * 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 java.lang.annotation.*;
+
+/**
+ * Lifecycle callbacks will not be called for grid components marked with this annotation.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface SkipDaemon {
+ // No-op.
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9dcd5b09/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManager.java
index 236d83b..39f9925 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManager.java
@@ -31,4 +31,14 @@ public interface GridManager extends GridComponent {
* @return {@code true} if at least one SPI does not have a {@code NO-OP} implementation, {@code false} otherwise.
*/
public boolean enabled();
+
+ /**
+ * This method is called before manager will start SPI.
+ */
+ public void onBeforeSpiStart();
+
+ /**
+ * This method is called after manager started SPI.
+ */
+ public void onAfterSpiStart();
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9dcd5b09/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java
index 2a0aaec..c47dac04 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java
@@ -33,7 +33,6 @@ import org.apache.ignite.lang.*;
import org.apache.ignite.plugin.extensions.communication.*;
import org.apache.ignite.plugin.security.*;
import org.apache.ignite.spi.*;
-import org.apache.ignite.spi.discovery.*;
import org.apache.ignite.spi.swapspace.*;
import org.jetbrains.annotations.*;
@@ -43,7 +42,6 @@ import java.util.*;
import static java.util.Arrays.*;
import static java.util.concurrent.TimeUnit.*;
-import static org.apache.ignite.internal.IgniteVersionUtils.*;
import static org.apache.ignite.internal.managers.communication.GridIoPolicy.*;
/**
@@ -160,19 +158,14 @@ public abstract class GridManagerAdapter<T extends IgniteSpi> implements GridMan
}
}
- /**
- * Inject resources into wrapped SPI.
- *
- * @throws IgniteCheckedException If injection failed.
- */
- protected final void injectSpi() throws IgniteCheckedException {
- for (T spi : spis) {
- // Inject all spi resources.
- ctx.resource().inject(spi);
+ /** {@inheritDoc} */
+ @Override public void onBeforeSpiStart() {
+ // No-op.
+ }
- // Inject SPI internal objects.
- inject(spi);
- }
+ /** {@inheritDoc} */
+ @Override public void onAfterSpiStart() {
+ // No-op.
}
/**
@@ -183,9 +176,13 @@ public abstract class GridManagerAdapter<T extends IgniteSpi> implements GridMan
protected final void startSpi() throws IgniteCheckedException {
Collection<String> names = U.newHashSet(spis.length);
- injectSpi();
-
for (T spi : spis) {
+ // Inject all spi resources.
+ ctx.resource().inject(spi);
+
+ // Inject SPI internal objects.
+ inject(spi);
+
try {
Map<String, Object> retval = spi.getNodeAttributes();
@@ -220,8 +217,7 @@ public abstract class GridManagerAdapter<T extends IgniteSpi> implements GridMan
if (log.isDebugEnabled())
log.debug("Starting SPI implementation: " + spi.getClass().getName());
- if (spi instanceof DiscoverySpi)
- ((DiscoverySpi)spi).setNodeAttributes(ctx.nodeAttributes(), VER);
+ onBeforeSpiStart();
try {
spi.spiStart(ctx.gridName());
@@ -230,6 +226,8 @@ public abstract class GridManagerAdapter<T extends IgniteSpi> implements GridMan
throw new IgniteCheckedException("Failed to start SPI: " + spi, e);
}
+ onAfterSpiStart();
+
if (log.isDebugEnabled())
log.debug("SPI module started OK: " + spi.getClass().getName());
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9dcd5b09/modules/core/src/main/java/org/apache/ignite/internal/managers/checkpoint/GridCheckpointManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/checkpoint/GridCheckpointManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/checkpoint/GridCheckpointManager.java
index bcaa70a..d811a51 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/checkpoint/GridCheckpointManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/checkpoint/GridCheckpointManager.java
@@ -46,6 +46,7 @@ import static org.jdk8.backport.ConcurrentLinkedHashMap.QueuePolicy.*;
/**
* This class defines a checkpoint manager.
*/
+@SkipDaemon
@SuppressWarnings({"SynchronizationOnLocalVariableOrMethodParameter", "deprecation"})
public class GridCheckpointManager extends GridManagerAdapter<CheckpointSpi> {
/** Max closed topics to store. */
@@ -75,12 +76,6 @@ public class GridCheckpointManager extends GridManagerAdapter<CheckpointSpi> {
/** {@inheritDoc} */
@Override public void start() throws IgniteCheckedException {
- if (ctx.config().isDaemon()) {
- injectSpi();
-
- return;
- }
-
for (CheckpointSpi spi : getSpis()) {
spi.setCheckpointListener(new CheckpointListener() {
@Override public void onCheckpointRemoved(String key) {
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9dcd5b09/modules/core/src/main/java/org/apache/ignite/internal/managers/collision/GridCollisionManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/collision/GridCollisionManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/collision/GridCollisionManager.java
index e38617a..9eca079 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/collision/GridCollisionManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/collision/GridCollisionManager.java
@@ -30,6 +30,7 @@ import java.util.concurrent.atomic.*;
/**
* This class defines a collision manager.
*/
+@SkipDaemon
public class GridCollisionManager extends GridManagerAdapter<CollisionSpi> {
/** Reference for external listener. */
private final AtomicReference<CollisionExternalListener> extLsnr =
@@ -44,12 +45,6 @@ public class GridCollisionManager extends GridManagerAdapter<CollisionSpi> {
/** {@inheritDoc} */
@Override public void start() throws IgniteCheckedException {
- if (ctx.config().isDaemon()) {
- injectSpi();
-
- return;
- }
-
startSpi();
if (enabled()) {
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9dcd5b09/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
index e7020c1..775de77 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
@@ -53,6 +53,7 @@ import java.util.zip.*;
import static java.util.concurrent.TimeUnit.*;
import static org.apache.ignite.events.EventType.*;
import static org.apache.ignite.internal.IgniteNodeAttributes.*;
+import static org.apache.ignite.internal.IgniteVersionUtils.*;
import static org.apache.ignite.plugin.segmentation.GridSegmentationPolicy.*;
/**
@@ -190,6 +191,13 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
}
/** {@inheritDoc} */
+ @Override public void onBeforeSpiStart() {
+ DiscoverySpi spi = getSpi();
+
+ spi.setNodeAttributes(ctx.nodeAttributes(), VER);
+ }
+
+ /** {@inheritDoc} */
@Override public void start() throws IgniteCheckedException {
long totSysMemory = -1;
@@ -2137,8 +2145,7 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
* @param id Node ID.
* @return Node.
*/
- @Nullable
- ClusterNode node(UUID id) {
+ @Nullable ClusterNode node(UUID id) {
return nodeMap.get(id);
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9dcd5b09/modules/core/src/main/java/org/apache/ignite/internal/managers/indexing/GridIndexingManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/indexing/GridIndexingManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/indexing/GridIndexingManager.java
index 5e734a2..5cb150e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/indexing/GridIndexingManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/indexing/GridIndexingManager.java
@@ -30,6 +30,7 @@ import java.util.*;
/**
* Manages cache indexing.
*/
+@SkipDaemon
public class GridIndexingManager extends GridManagerAdapter<IndexingSpi> {
/** */
private final GridSpinBusyLock busyLock = new GridSpinBusyLock();
@@ -45,12 +46,6 @@ public class GridIndexingManager extends GridManagerAdapter<IndexingSpi> {
* @throws IgniteCheckedException Thrown in case of any errors.
*/
@Override public void start() throws IgniteCheckedException {
- if (ctx.config().isDaemon()) {
- injectSpi();
-
- return;
- }
-
if (!enabled())
U.warn(log, "Indexing is disabled (to enable please configure GridIndexingSpi).");
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9dcd5b09/modules/core/src/main/java/org/apache/ignite/internal/managers/swapspace/GridSwapSpaceManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/swapspace/GridSwapSpaceManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/swapspace/GridSwapSpaceManager.java
index 2b7fbeb..ec50578 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/swapspace/GridSwapSpaceManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/swapspace/GridSwapSpaceManager.java
@@ -37,6 +37,7 @@ import static org.apache.ignite.events.EventType.*;
/**
*
*/
+@SkipDaemon
public class GridSwapSpaceManager extends GridManagerAdapter<SwapSpaceSpi> {
/** */
private Marshaller marsh;
@@ -50,12 +51,6 @@ public class GridSwapSpaceManager extends GridManagerAdapter<SwapSpaceSpi> {
/** {@inheritDoc} */
@Override public void start() throws IgniteCheckedException {
- if (ctx.config().isDaemon()) {
- injectSpi();
-
- return;
- }
-
getSpi().setListener(new SwapSpaceSpiListener() {
@Override public void onSwapEvent(int evtType, @Nullable String spaceName, @Nullable byte[] keyBytes) {
if (ctx.event().isRecordable(evtType)) {
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9dcd5b09/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java
index f8ffb29..e015c99 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java
@@ -366,15 +366,6 @@ public abstract class IgniteSpiAdapter implements IgniteSpi, IgniteSpiManagement
}
/**
- * @return {@code true} if this check is optional.
- */
- private boolean checkDaemon() {
- IgniteSpiConsistencyChecked ann = U.getAnnotation(getClass(), IgniteSpiConsistencyChecked.class);
-
- return ann != null && ann.checkDaemon();
- }
-
- /**
* @return {@code true} if this check is enabled.
*/
private boolean checkEnabled() {
@@ -408,13 +399,6 @@ public abstract class IgniteSpiAdapter implements IgniteSpi, IgniteSpiManagement
assert spiCtx != null;
assert node != null;
- if (node.isDaemon() && !checkDaemon()) {
- if (log.isDebugEnabled())
- log.debug("Skipping configuration consistency check for daemon node: " + node);
-
- return;
- }
-
/*
* Optional SPI means that we should not print warning if SPIs are different but
* still need to compare attributes if SPIs are the same.
@@ -658,8 +642,7 @@ public abstract class IgniteSpiAdapter implements IgniteSpi, IgniteSpiManagement
}
/** {@inheritDoc} */
- @Nullable @Override
- public ClusterNode node(UUID nodeId) {
+ @Nullable @Override public ClusterNode node(UUID nodeId) {
return null;
}
@@ -714,6 +697,7 @@ public abstract class IgniteSpiAdapter implements IgniteSpi, IgniteSpiManagement
return null;
}
+ /** {@inheritDoc} */
@Override public MessageFormatter messageFormatter() {
return null;
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9dcd5b09/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiConsistencyChecked.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiConsistencyChecked.java b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiConsistencyChecked.java
index 717ef2e..b9219c2 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiConsistencyChecked.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiConsistencyChecked.java
@@ -36,11 +36,4 @@ public @interface IgniteSpiConsistencyChecked {
*/
@SuppressWarnings("JavaDoc")
public boolean optional();
-
- /**
- * Flag for performing consistency check for daemon node.
- *
- * @return {@code True} if need to perform consistence check for daemon node, {@code false} otherwise.
- */
- public boolean checkDaemon() default false;
}