You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dg...@apache.org on 2019/06/03 10:50:25 UTC
[ignite] branch master updated: IGNITE-11882 Bugs related to SPI &
tests fixes - Fixes #6581.
This is an automated email from the ASF dual-hosted git repository.
dgovorukhin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new 3e75725 IGNITE-11882 Bugs related to SPI & tests fixes - Fixes #6581.
3e75725 is described below
commit 3e7572549e1966f50f7697ed0965e90a1028ada3
Author: Ivan Bessonov <be...@gmail.com>
AuthorDate: Mon Jun 3 13:47:39 2019 +0300
IGNITE-11882 Bugs related to SPI & tests fixes - Fixes #6581.
Signed-off-by: Dmitriy Govorukhin <dm...@gmail.com>
---
.../apache/ignite/internal/IgniteVersionUtils.java | 10 +++-
.../managers/discovery/GridDiscoveryManager.java | 32 ++++++------
.../cache/GridCachePartitionExchangeManager.java | 2 +-
.../GridCacheDatabaseSharedManager.java | 2 +
.../cluster/GridClusterStateProcessor.java | 4 +-
.../autoadjust/BaselineAutoAdjustStatus.java | 7 +++
.../persistence/DistributedMetaStorageImpl.java | 4 ++
.../apache/ignite/lang/IgniteProductVersion.java | 4 +-
.../persistence/IgnitePdsCorruptedStoreTest.java | 58 +++++++++++++---------
.../startup/cmdline/GridCommandLineLoaderTest.java | 23 +++++++--
10 files changed, 95 insertions(+), 51 deletions(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteVersionUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteVersionUtils.java
index d12560e..9fe0043 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteVersionUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteVersionUtils.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.TimeZone;
import org.apache.ignite.lang.IgniteProductVersion;
/**
@@ -31,6 +32,9 @@ public class IgniteVersionUtils {
/** Ignite version. */
public static final IgniteProductVersion VER;
+ /** UTC build date formatter. */
+ public static final SimpleDateFormat BUILD_TSTAMP_DATE_FORMATTER;
+
/** Formatted build date. */
public static final String BUILD_TSTAMP_STR;
@@ -67,7 +71,11 @@ public class IgniteVersionUtils {
BUILD_TSTAMP = !BUILD_TSTAMP_FROM_PROPERTY.isEmpty() && Long.parseLong(BUILD_TSTAMP_FROM_PROPERTY) != 0
? Long.parseLong(BUILD_TSTAMP_FROM_PROPERTY) : System.currentTimeMillis() / 1000;
- BUILD_TSTAMP_STR = new SimpleDateFormat("yyyyMMdd").format(new Date(BUILD_TSTAMP * 1000));
+ BUILD_TSTAMP_DATE_FORMATTER = new SimpleDateFormat("yyyyMMdd");
+
+ BUILD_TSTAMP_DATE_FORMATTER.setTimeZone(TimeZone.getTimeZone("UTC"));
+
+ BUILD_TSTAMP_STR = BUILD_TSTAMP_DATE_FORMATTER.format(new Date(BUILD_TSTAMP * 1000));
COPYRIGHT = BUILD_TSTAMP_STR.substring(0, 4) + " Copyright(C) Apache Software Foundation";
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 26da89e..27a33b9 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
@@ -698,7 +698,12 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
else if (customMsg instanceof ChangeGlobalStateFinishMessage) {
ctx.state().onStateFinishMessage((ChangeGlobalStateFinishMessage)customMsg);
- updateTopologySnapshot();
+ Snapshot snapshot = topSnap.get();
+
+ // Topology version does not change, but need create DiscoCache with new state.
+ DiscoCache discoCache = snapshot.discoCache.copy(snapshot.topVer, ctx.state().clusterState());
+
+ topSnap.set(new Snapshot(snapshot.topVer, discoCache));
incMinorTopVer = false;
}
@@ -782,7 +787,7 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
if (locJoinEvt || !node.isClient() && !node.isDaemon()) {
if (type == EVT_NODE_LEFT || type == EVT_NODE_FAILED || type == EVT_NODE_JOINED) {
- boolean discoCacheUpdated = ctx.state().autoAdjustInMemoryClusterState(
+ boolean discoCacheRecalculationRequired = ctx.state().autoAdjustInMemoryClusterState(
node.id(),
topSnapshot,
discoCache,
@@ -790,10 +795,17 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
minorTopVer
);
- if (discoCacheUpdated) {
- discoCache = discoCache();
+ if (discoCacheRecalculationRequired) {
+ discoCache = createDiscoCache(
+ nextTopVer,
+ ctx.state().clusterState(),
+ locNode,
+ topSnapshot
+ );
discoCacheHist.put(nextTopVer, discoCache);
+
+ topSnap.set(new Snapshot(nextTopVer, discoCache));
}
}
}
@@ -1035,18 +1047,6 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
}
/**
- * Update {@link #topSnap} with the latest cluster state.
- */
- public void updateTopologySnapshot() {
- Snapshot snapshot = topSnap.get();
-
- // Topology version does not change, but need create DiscoCache with new state.
- DiscoCache discoCache = snapshot.discoCache.copy(snapshot.topVer, ctx.state().clusterState());
-
- topSnap.set(new Snapshot(snapshot.topVer, discoCache));
- }
-
- /**
* @param type Message type.
* @param customMsg Custom message.
* @return {@code True} if should not process message.
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
index c390c0a..ea51a87 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
@@ -2932,7 +2932,7 @@ public class GridCachePartitionExchangeManager<K, V> extends GridCacheSharedMana
err = e;
}
catch (Throwable e) {
- if (!(stop && X.hasCause(e, IgniteInterruptedCheckedException.class)))
+ if (!(e == stopErr || (stop && (X.hasCause(e, IgniteInterruptedCheckedException.class)))))
err = e;
}
finally {
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
index 7c63338..d45cd93 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
@@ -4502,6 +4502,8 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
try {
GridFutureAdapter<?> res = new GridFutureAdapter<>();
+ res.listen(fut -> updateHeartbeat());
+
asyncRunner.execute(U.wrapIgniteFuture(cmd, res));
pendingTaskFuture.add(res);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/GridClusterStateProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/GridClusterStateProcessor.java
index 17d4be0..ffade1b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/GridClusterStateProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/GridClusterStateProcessor.java
@@ -1407,7 +1407,7 @@ public class GridClusterStateProcessor extends GridProcessorAdapter implements I
* @param discoCache Discovery cache from the discovery manager.
* @param topVer Topology version.
* @param minorTopVer Minor topology version.
- * @return {@code true} if baseline was changed.
+ * @return {@code true} if baseline was changed and discovery cache recalculation is required.
*/
public boolean autoAdjustInMemoryClusterState(
UUID nodeId,
@@ -1464,8 +1464,6 @@ public class GridClusterStateProcessor extends GridProcessorAdapter implements I
globalState.localBaselineAutoAdjustment(true);
- ctx.discovery().updateTopologySnapshot();
-
return true;
}
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/baseline/autoadjust/BaselineAutoAdjustStatus.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/baseline/autoadjust/BaselineAutoAdjustStatus.java
index a98fa77..4b814ce 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/baseline/autoadjust/BaselineAutoAdjustStatus.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/baseline/autoadjust/BaselineAutoAdjustStatus.java
@@ -17,6 +17,8 @@
package org.apache.ignite.internal.processors.cluster.baseline.autoadjust;
+import org.apache.ignite.internal.util.typedef.internal.S;
+
/**
* Statistic of baseline auto-adjust.
*/
@@ -71,6 +73,11 @@ public class BaselineAutoAdjustStatus {
return taskState;
}
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(BaselineAutoAdjustStatus.class, this);
+ }
+
/**
*
*/
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageImpl.java
index f9bba3c..eed9313 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DistributedMetaStorageImpl.java
@@ -40,6 +40,7 @@ import org.apache.ignite.failure.FailureContext;
import org.apache.ignite.failure.FailureType;
import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.IgniteInterruptedCheckedException;
import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage;
import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager;
import org.apache.ignite.internal.processors.GridProcessorAdapter;
@@ -1174,6 +1175,9 @@ public class DistributedMetaStorageImpl extends GridProcessorAdapter
else
completeWrite(bridge, new DistributedMetaStorageHistoryItem(msg.key(), msg.value()), false, true);
}
+ catch (IgniteInterruptedCheckedException e) {
+ throw U.convertException(e);
+ }
catch (IgniteCheckedException | Error e) {
throw criticalError(e);
}
diff --git a/modules/core/src/main/java/org/apache/ignite/lang/IgniteProductVersion.java b/modules/core/src/main/java/org/apache/ignite/lang/IgniteProductVersion.java
index 96c5365..4af513b 100644
--- a/modules/core/src/main/java/org/apache/ignite/lang/IgniteProductVersion.java
+++ b/modules/core/src/main/java/org/apache/ignite/lang/IgniteProductVersion.java
@@ -21,11 +21,11 @@ import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.IgniteVersionUtils;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.jetbrains.annotations.NotNull;
@@ -259,7 +259,7 @@ public class IgniteProductVersion implements Comparable<IgniteProductVersion>, E
/** {@inheritDoc} */
@Override public String toString() {
- String revTsStr = new SimpleDateFormat("yyyyMMdd").format(new Date(revTs * 1000));
+ String revTsStr = IgniteVersionUtils.BUILD_TSTAMP_DATE_FORMATTER.format(new Date(revTs * 1000));
String hash = U.byteArray2HexString(revHash).toLowerCase();
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCorruptedStoreTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCorruptedStoreTest.java
index cab5efa..64cef84 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCorruptedStoreTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCorruptedStoreTest.java
@@ -19,7 +19,10 @@ package org.apache.ignite.internal.processors.cache.persistence;
import java.io.File;
import java.io.IOException;
+import java.io.Serializable;
import java.nio.file.OpenOption;
+import java.nio.file.StandardOpenOption;
+import java.util.Arrays;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.ignite.Ignite;
@@ -53,7 +56,6 @@ import org.apache.ignite.internal.processors.cache.persistence.tree.io.PageIO;
import org.apache.ignite.internal.processors.cache.persistence.tree.io.PagePartitionMetaIO;
import org.apache.ignite.internal.util.typedef.X;
import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.lang.IgniteBiClosure;
import org.apache.ignite.testframework.GridTestUtils;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Test;
@@ -336,9 +338,18 @@ public class IgnitePdsCorruptedStoreTest extends GridCommonAbstractTest {
public void testReadOnlyMetaStore() throws Exception {
IgniteEx ignite0 = startGrid(0);
+ AtomicReference<File> readOnlyFile = new AtomicReference<>();
+
+ failingFileIOFactory.createClosure((file, options) -> {
+ if (Arrays.asList(options).contains(StandardOpenOption.WRITE) && file.equals(readOnlyFile.get()))
+ throw new IOException("File is readonly.");
+
+ return null;
+ });
+
ignite0.cluster().active(true);
- IgniteInternalCache cache = ignite0.cachex(CACHE_NAME1);
+ IgniteInternalCache<Integer, Integer> cache = ignite0.cachex(CACHE_NAME1);
cache.put(1, 1);
@@ -350,27 +361,22 @@ public class IgnitePdsCorruptedStoreTest extends GridCommonAbstractTest {
File metaStoreDir = new File(workDir, MetaStorage.METASTORAGE_CACHE_NAME.toLowerCase());
File metaStoreFile = new File(metaStoreDir, String.format(FilePageStoreManager.PART_FILE_TEMPLATE, 0));
- metaStoreFile.setWritable(false);
+ readOnlyFile.set(metaStoreFile);
- try {
- IgniteInternalFuture fut = GridTestUtils.runAsync(new Runnable() {
- @Override public void run() {
- try {
- ignite0.cluster().active(true);
- }
- catch (Exception ignore) {
- // No-op.
- }
+ IgniteInternalFuture fut = GridTestUtils.runAsync(new Runnable() {
+ @Override public void run() {
+ try {
+ ignite0.cluster().active(true);
+ }
+ catch (Exception ignore) {
+ // No-op.
}
- });
+ }
+ });
- waitFailure(IOException.class);
+ waitFailure(IOException.class);
- fut.cancel();
- }
- finally {
- metaStoreFile.setWritable(true);
- }
+ fut.cancel();
}
@@ -390,9 +396,9 @@ public class IgnitePdsCorruptedStoreTest extends GridCommonAbstractTest {
AtomicBoolean fail = new AtomicBoolean(true);
AtomicReference<FileIO> ref = new AtomicReference<>();
- failingFileIOFactory.createClosure(new IgniteBiClosure<File, OpenOption[], FileIO>() {
+ failingFileIOFactory.createClosure(new IgniteBiClosureX<File, OpenOption[], FileIO>() {
@Override public FileIO apply(File file, OpenOption[] options) {
- if (file.getName().indexOf("-END.bin") >= 0) {
+ if (file.getName().contains("-END.bin")) {
FileIO delegate;
try {
@@ -486,7 +492,7 @@ public class IgnitePdsCorruptedStoreTest extends GridCommonAbstractTest {
private final FileIOFactory delegateFactory = new RandomAccessFileIOFactory();
/** Create FileIO closure. */
- private volatile IgniteBiClosure<File, OpenOption[], FileIO> createClo;
+ private volatile IgniteBiClosureX<File, OpenOption[], FileIO> createClo;
/** {@inheritDoc} */
@Override public FileIO create(File file, OpenOption... openOption) throws IOException {
@@ -500,7 +506,7 @@ public class IgnitePdsCorruptedStoreTest extends GridCommonAbstractTest {
/**
* @param createClo FileIO create closure.
*/
- public void createClosure(IgniteBiClosure<File, OpenOption[], FileIO> createClo) {
+ public void createClosure(IgniteBiClosureX<File, OpenOption[], FileIO> createClo) {
this.createClo = createClo;
}
@@ -511,4 +517,10 @@ public class IgnitePdsCorruptedStoreTest extends GridCommonAbstractTest {
return delegateFactory;
}
}
+
+ /** */
+ private interface IgniteBiClosureX<E1, E2, R> extends Serializable {
+ /** */
+ R apply(E1 e1, E2 e2) throws IOException;
+ }
}
diff --git a/modules/core/src/test/java/org/apache/ignite/startup/cmdline/GridCommandLineLoaderTest.java b/modules/core/src/test/java/org/apache/ignite/startup/cmdline/GridCommandLineLoaderTest.java
index 4982d89..4436b1f 100644
--- a/modules/core/src/test/java/org/apache/ignite/startup/cmdline/GridCommandLineLoaderTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/startup/cmdline/GridCommandLineLoaderTest.java
@@ -17,9 +17,11 @@
package org.apache.ignite.startup.cmdline;
+import java.util.concurrent.CountDownLatch;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteSystemProperties;
+import org.apache.ignite.Ignition;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.util.lang.GridAbsPredicate;
import org.apache.ignite.internal.util.typedef.internal.U;
@@ -81,32 +83,43 @@ public class GridCommandLineLoaderTest extends GridCommonAbstractTest {
* Kills node after it is started.
*/
public static class KillerLifecycleBean implements LifecycleBean {
+ /**
+ * Latch for wainting start both nodes from sping xml config.
+ */
+ private static final CountDownLatch INIT_TWO_NODES_LATCH = new CountDownLatch(2);
+
/** */
@IgniteInstanceResource
private Ignite ignite;
- /** */
+ /**
+ *
+ */
@Override public void onLifecycleEvent(LifecycleEventType evt) throws IgniteException {
if (evt == LifecycleEventType.AFTER_NODE_START) {
System.setProperty(IGNITE_RESTART_CODE, Integer.toString(
1 + IgniteSystemProperties.getInteger(IGNITE_RESTART_CODE, 0)));
- System.out.println("Ignite instance seen, will shut it down.");
+ String name = ignite.name();
+
+ System.out.println("Ignite instance seen, will shut it down. Name=" + name);
new Thread(new Runnable() {
@Override public void run() {
try {
- Thread.sleep(3000);
+ INIT_TWO_NODES_LATCH.await();
}
catch (InterruptedException e) {
e.printStackTrace();
}
- System.out.println("Shutdown imminent.");
+ System.out.println("Shutdown imminent. Name=" + name);
- ignite.close();
+ Ignition.stop(name, true);
}
}).start();
+
+ INIT_TWO_NODES_LATCH.countDown();
}
}
}