You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2018/10/23 11:59:23 UTC
ignite git commit: IGNITE-9663: MVCC: Fixes to transaction mapping.
This closes #5018.
Repository: ignite
Updated Branches:
refs/heads/master 685c008af -> d76ff5426
IGNITE-9663: MVCC: Fixes to transaction mapping. This closes #5018.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/d76ff542
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/d76ff542
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/d76ff542
Branch: refs/heads/master
Commit: d76ff54264498f49f070d0ff5e6d7d67f29d93ba
Parents: 685c008
Author: rkondakov <ko...@mail.ru>
Authored: Tue Oct 23 14:59:12 2018 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Tue Oct 23 14:59:12 2018 +0300
----------------------------------------------------------------------
.../near/GridNearTxEnlistFuture.java | 4 +-
.../near/GridNearTxQueryEnlistFuture.java | 3 +-
.../GridNearTxQueryResultsEnlistFuture.java | 4 +-
.../cache/mvcc/MvccProcessorImpl.java | 9 ++-
.../cache/mvcc/MvccQueryTrackerImpl.java | 16 ++++-
.../cache/mvcc/msg/MvccSnapshotResponse.java | 4 ++
.../cache/mvcc/CacheMvccAbstractTest.java | 67 +++++++++++++++++++-
.../query/h2/database/H2TreeFilterClosure.java | 19 +++++-
.../query/h2/database/H2TreeIndex.java | 2 +-
.../h2/twostep/GridReduceQueryExecutor.java | 5 +-
...ccPartitionedSqlCoordinatorFailoverTest.java | 9 +++
11 files changed, 121 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/d76ff542/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistFuture.java
index ed75c36..3ddedd0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistFuture.java
@@ -575,9 +575,7 @@ public class GridNearTxEnlistFuture extends GridNearTxAbstractEnlistFuture<GridC
if (err == null && res.error() != null)
err = res.error();
- if (X.hasCause(err, ClusterTopologyCheckedException.class))
- tx.removeMapping(nodeId);
- else if (res != null)
+ if (res != null)
tx.mappings().get(nodeId).addBackups(res.newDhtNodes());
if (err != null)
http://git-wip-us.apache.org/repos/asf/ignite/blob/d76ff542/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryEnlistFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryEnlistFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryEnlistFuture.java
index 8528345..70fbd1f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryEnlistFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryEnlistFuture.java
@@ -363,8 +363,7 @@ public class GridNearTxQueryEnlistFuture extends GridNearTxQueryAbstractEnlistFu
completed = true;
}
- if (X.hasCause(err, ClusterTopologyCheckedException.class)
- || (res != null && res.removeMapping())) {
+ if (res != null && res.removeMapping()) {
GridDistributedTxMapping m = tx.mappings().get(node.id());
assert m != null && m.empty();
http://git-wip-us.apache.org/repos/asf/ignite/blob/d76ff542/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryResultsEnlistFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryResultsEnlistFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryResultsEnlistFuture.java
index f375405..9783582 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryResultsEnlistFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryResultsEnlistFuture.java
@@ -552,9 +552,7 @@ public class GridNearTxQueryResultsEnlistFuture extends GridNearTxQueryAbstractE
if (err == null && res.error() != null)
err = res.error();
- if (X.hasCause(err, ClusterTopologyCheckedException.class))
- tx.removeMapping(nodeId);
- else if (res != null)
+ if (res != null)
tx.mappings().get(nodeId).addBackups(res.newDhtNodes());
if (err != null)
http://git-wip-us.apache.org/repos/asf/ignite/blob/d76ff542/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccProcessorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccProcessorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccProcessorImpl.java
index e58151f..a304bef 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccProcessorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccProcessorImpl.java
@@ -1244,10 +1244,13 @@ public class MvccProcessorImpl extends GridProcessorAdapter implements MvccProce
&& crd.coordinatorVersion() >= snapshot.coordinatorVersion();
for (TxKey key : waitMap.keySet()) {
- assert key.major() == snapshot.coordinatorVersion()
+ if (!( key.major() == snapshot.coordinatorVersion()
&& key.minor() > snapshot.cleanupVersion()
- || key.major() > snapshot.coordinatorVersion() :
- "key=" + key + ", snapshot=" + snapshot;
+ || key.major() > snapshot.coordinatorVersion())) {
+ byte state = state(key.major(), key.minor());
+
+ assert state == TxState.ABORTED : "tx state=" + state;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/d76ff542/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccQueryTrackerImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccQueryTrackerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccQueryTrackerImpl.java
index 9a767ec..7296d66 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccQueryTrackerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccQueryTrackerImpl.java
@@ -61,6 +61,9 @@ public class MvccQueryTrackerImpl implements MvccQueryTracker {
/** */
private final boolean canRemap;
+ /** */
+ private boolean done;
+
/**
* @param cctx Cache context.
*/
@@ -136,6 +139,9 @@ public class MvccQueryTrackerImpl implements MvccQueryTracker {
/** {@inheritDoc} */
@Override public void onDone() {
+ if (!checkDone())
+ return;
+
MvccProcessor prc = cctx.shared().coordinators();
MvccSnapshot snapshot = snapshot();
@@ -151,7 +157,7 @@ public class MvccQueryTrackerImpl implements MvccQueryTracker {
@Override public IgniteInternalFuture<Void> onDone(@NotNull GridNearTxLocal tx, boolean commit) {
MvccSnapshot snapshot = snapshot(), txSnapshot = tx.mvccSnapshot();
- if (snapshot == null && txSnapshot == null)
+ if (!checkDone() || snapshot == null && txSnapshot == null)
return commit ? new GridFinishedFuture<>() : null;
MvccProcessor prc = cctx.shared().coordinators();
@@ -328,6 +334,14 @@ public class MvccQueryTrackerImpl implements MvccQueryTracker {
return true;
}
+ /** */
+ private synchronized boolean checkDone() {
+ if (!done)
+ return done = true;
+
+ return false;
+ }
+
/** {@inheritDoc} */
@Override public String toString() {
return S.toString(MvccQueryTrackerImpl.class, this);
http://git-wip-us.apache.org/repos/asf/ignite/blob/d76ff542/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/msg/MvccSnapshotResponse.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/msg/MvccSnapshotResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/msg/MvccSnapshotResponse.java
index 2c22616..c5a8494 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/msg/MvccSnapshotResponse.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/msg/MvccSnapshotResponse.java
@@ -24,6 +24,8 @@ import org.apache.ignite.internal.managers.communication.GridIoMessageFactory;
import org.apache.ignite.internal.processors.cache.mvcc.MvccLongList;
import org.apache.ignite.internal.processors.cache.mvcc.MvccSnapshot;
import org.apache.ignite.internal.processors.cache.mvcc.MvccSnapshotWithoutTxs;
+import org.apache.ignite.internal.util.tostring.GridToStringExclude;
+import org.apache.ignite.internal.util.tostring.GridToStringInclude;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.plugin.extensions.communication.MessageReader;
import org.apache.ignite.plugin.extensions.communication.MessageWriter;
@@ -49,9 +51,11 @@ public class MvccSnapshotResponse implements MvccMessage, MvccSnapshot, MvccLong
/** */
@GridDirectTransient
+ @GridToStringExclude
private int txsCnt;
/** */
+ @GridToStringInclude
private long[] txs;
/** */
http://git-wip-us.apache.org/repos/asf/ignite/blob/d76ff542/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccAbstractTest.java
index 57f714a..5b32347 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccAbstractTest.java
@@ -40,6 +40,7 @@ import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.stream.Collectors;
import javax.cache.Cache;
+import javax.cache.CacheException;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteCheckedException;
@@ -63,12 +64,17 @@ import org.apache.ignite.configuration.TransactionConfiguration;
import org.apache.ignite.configuration.WALMode;
import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.IgniteFutureCancelledCheckedException;
import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.IgniteKernal;
import org.apache.ignite.internal.TestRecordingCommunicationSpi;
+import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
import org.apache.ignite.internal.processors.cache.GridCacheContext;
import org.apache.ignite.internal.processors.cache.IgniteCacheProxy;
import org.apache.ignite.internal.processors.cache.KeyCacheObject;
+import org.apache.ignite.internal.processors.query.IgniteSQLException;
+import org.apache.ignite.internal.transactions.IgniteTxRollbackCheckedException;
+import org.apache.ignite.internal.transactions.IgniteTxTimeoutCheckedException;
import org.apache.ignite.internal.util.future.GridCompoundIdentityFuture;
import org.apache.ignite.internal.util.lang.GridAbsPredicate;
import org.apache.ignite.internal.util.lang.GridInClosure3;
@@ -89,6 +95,7 @@ import org.apache.ignite.testframework.GridTestUtils;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.apache.ignite.transactions.Transaction;
import org.apache.ignite.transactions.TransactionConcurrency;
+import org.apache.ignite.transactions.TransactionException;
import org.apache.ignite.transactions.TransactionIsolation;
import org.jetbrains.annotations.Nullable;
@@ -1475,8 +1482,64 @@ public abstract class CacheMvccAbstractTest extends GridCommonAbstractTest {
* @param e Exception.
*/
protected void handleTxException(Exception e) {
- if (log.isTraceEnabled())
- log.trace("Exception during tx execution: " + X.getFullStackTrace(e));
+ if (log.isDebugEnabled())
+ log.debug("Exception during tx execution: " + X.getFullStackTrace(e));
+
+ if (X.hasCause(e, IgniteFutureCancelledCheckedException.class))
+ return;
+
+ if (X.hasCause(e, ClusterTopologyException.class))
+ return;
+
+ if (X.hasCause(e, ClusterTopologyCheckedException.class))
+ return;
+
+ if (X.hasCause(e, IgniteTxRollbackCheckedException.class))
+ return;
+
+ if (X.hasCause(e, TransactionException.class))
+ return;
+
+ if (X.hasCause(e, IgniteTxTimeoutCheckedException.class))
+ return;
+
+ if (X.hasCause(e, CacheException.class)) {
+ CacheException cacheEx = X.cause(e, CacheException.class);
+
+ if (cacheEx != null && cacheEx.getMessage() != null) {
+ if (cacheEx.getMessage().contains("Data node has left the grid during query execution"))
+ return;
+ }
+
+ if (cacheEx != null && cacheEx.getMessage() != null) {
+ if (cacheEx.getMessage().contains("Query was interrupted."))
+ return;
+ }
+
+ if (cacheEx != null && cacheEx.getMessage() != null) {
+ if (cacheEx.getMessage().contains("Failed to fetch data from node"))
+ return;
+ }
+
+ if (cacheEx != null && cacheEx.getMessage() != null) {
+ if (cacheEx.getMessage().contains("Failed to send message"))
+ return;
+ }
+ }
+
+ if (X.hasCause(e, IgniteSQLException.class)) {
+ IgniteSQLException sqlEx = X.cause(e, IgniteSQLException.class);
+
+ if (sqlEx != null && sqlEx.getMessage() != null) {
+ if (sqlEx.getMessage().contains("Transaction is already completed."))
+ return;
+
+ if (sqlEx.getMessage().contains("Cannot serialize transaction due to write conflict"))
+ return;
+ }
+ }
+
+ fail("Unexpected tx exception. " + X.getFullStackTrace(e));
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/d76ff542/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeFilterClosure.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeFilterClosure.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeFilterClosure.java
index e583546..99d0894 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeFilterClosure.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeFilterClosure.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.processors.query.h2.database;
import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteLogger;
import org.apache.ignite.internal.pagemem.PageIdUtils;
import org.apache.ignite.internal.processors.cache.GridCacheContext;
import org.apache.ignite.internal.processors.cache.mvcc.MvccSnapshot;
@@ -27,6 +28,7 @@ import org.apache.ignite.internal.processors.query.h2.database.io.H2RowLinkIO;
import org.apache.ignite.internal.processors.query.h2.opt.GridH2Row;
import org.apache.ignite.internal.processors.query.h2.opt.GridH2SearchRow;
import org.apache.ignite.internal.transactions.IgniteTxMvccVersionCheckedException;
+import org.apache.ignite.internal.util.typedef.X;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.spi.indexing.IndexingQueryCacheFilter;
@@ -47,17 +49,22 @@ public class H2TreeFilterClosure implements H2Tree.TreeRowClosure<GridH2SearchRo
/** */
private final GridCacheContext cctx;
+ /** */
+ private final IgniteLogger log;
+
/**
* @param filter Cache filter.
* @param mvccSnapshot MVCC snapshot.
* @param cctx Cache context.
*/
- public H2TreeFilterClosure(IndexingQueryCacheFilter filter, MvccSnapshot mvccSnapshot, GridCacheContext cctx) {
+ public H2TreeFilterClosure(IndexingQueryCacheFilter filter, MvccSnapshot mvccSnapshot, GridCacheContext cctx,
+ IgniteLogger log) {
assert (filter != null || mvccSnapshot != null) && cctx != null ;
this.filter = filter;
this.mvccSnapshot = mvccSnapshot;
this.cctx = cctx;
+ this.log = log;
}
/** {@inheritDoc} */
@@ -97,8 +104,14 @@ public class H2TreeFilterClosure implements H2Tree.TreeRowClosure<GridH2SearchRo
try {
return isVisible(cctx, mvccSnapshot, rowCrdVer, rowCntr, rowOpCntr, io.getLink(pageAddr, idx));
}
- catch (IgniteTxMvccVersionCheckedException ignored) {
- return false; // The row is going to be removed.
+ catch (IgniteTxMvccVersionCheckedException e) {
+ // We expect the active tx state can be observed by read tx only in the cases when tx has been aborted
+ // asynchronously and node hasn't received finish message yet but coordinator has already removed it from
+ // the active txs map. Rows written by this tx are invisible to anyone and will be removed by the vacuum.
+ if (log.isDebugEnabled())
+ log.debug( "Unexpected tx state on index lookup. " + X.getFullStackTrace(e));
+
+ return false;
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/d76ff542/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java
index a15742f..e9cca9e 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java
@@ -466,7 +466,7 @@ public class H2TreeIndex extends GridH2IndexBase {
if(p == null && v == null)
return null;
- return new H2TreeFilterClosure(p, v, cctx);
+ return new H2TreeFilterClosure(p, v, cctx, log);
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/d76ff542/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java
index 62c5c78..b30aa2f 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java
@@ -1202,9 +1202,6 @@ public class GridReduceQueryExecutor {
*/
public void releaseRemoteResources(Collection<ClusterNode> nodes, ReduceQueryRun r, long qryReqId,
boolean distributedJoins, MvccQueryTracker mvccTracker) {
- if (mvccTracker != null)
- mvccTracker.onDone();
-
// For distributedJoins need always send cancel request to cleanup resources.
if (distributedJoins)
send(nodes, new GridQueryCancelRequest(qryReqId), null, false);
@@ -1220,6 +1217,8 @@ public class GridReduceQueryExecutor {
if (!runs.remove(qryReqId, r))
U.warn(log, "Query run was already removed: " + qryReqId);
+ else if (mvccTracker != null)
+ mvccTracker.onDone();
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/d76ff542/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccPartitionedSqlCoordinatorFailoverTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccPartitionedSqlCoordinatorFailoverTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccPartitionedSqlCoordinatorFailoverTest.java
index 1362b4a..b347497 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccPartitionedSqlCoordinatorFailoverTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccPartitionedSqlCoordinatorFailoverTest.java
@@ -22,6 +22,7 @@ import org.apache.ignite.cache.CacheMode;
import static org.apache.ignite.internal.processors.cache.mvcc.CacheMvccAbstractTest.ReadMode.SCAN;
import static org.apache.ignite.internal.processors.cache.mvcc.CacheMvccAbstractTest.ReadMode.SQL;
import static org.apache.ignite.internal.processors.cache.mvcc.CacheMvccAbstractTest.WriteMode.DML;
+import static org.apache.ignite.internal.processors.cache.mvcc.CacheMvccAbstractTest.WriteMode.PUT;
import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
import static org.apache.ignite.transactions.TransactionIsolation.REPEATABLE_READ;
@@ -63,6 +64,14 @@ public class CacheMvccPartitionedSqlCoordinatorFailoverTest extends CacheMvccAbs
/**
* @throws Exception If failed.
*/
+ public void testPutAllGetAll_ClientServer_Backups1_Restart_Scan() throws Exception {
+ // TODO add tests with RESTART_RND_SRV https://issues.apache.org/jira/browse/IGNITE-9928
+ putAllGetAll(RestartMode.RESTART_RND_SRV, 4, 2, 2, 64, /*new InitIndexing(Integer.class, Integer.class)*/ null, SCAN, PUT);
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
public void testPutAllGetAll_ClientServer_Backups1_RestartCoordinator_ScanDml_Persistence() throws Exception {
persistence = true;