Repository: ignite Updated Branches: refs/heads/ignite-1.5 4c9ea5864 -> 175b7f24e
http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java index e8546ef..1a26028 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java @@ -273,7 +273,7 @@ public class GridNearTransactionalCache<K, V> extends GridNearCacheAdapter<K, V> * @throws IgniteCheckedException If failed. * @throws GridDistributedLockCancelledException If lock has been cancelled. */ - @SuppressWarnings({"RedundantTypeArguments"}) + @SuppressWarnings({"RedundantTypeArguments", "ForLoopReplaceableByForEach"}) @Nullable public GridNearTxRemote startRemoteTx(UUID nodeId, GridDhtLockRequest req) throws IgniteCheckedException, GridDistributedLockCancelledException { List<KeyCacheObject> nearKeys = req.nearKeys(); @@ -285,6 +285,7 @@ public class GridNearTransactionalCache<K, V> extends GridNearCacheAdapter<K, V> if (ldr != null) { Collection<IgniteTxKey> evicted = null; + // Avoid iterator creation. for (int i = 0; i < nearKeys.size(); i++) { KeyCacheObject key = nearKeys.get(i); @@ -293,8 +294,6 @@ public class GridNearTransactionalCache<K, V> extends GridNearCacheAdapter<K, V> IgniteTxKey txKey = ctx.txKey(key); - Collection<GridCacheMvccCandidate> cands = req.candidatesByIndex(i); - if (log.isDebugEnabled()) log.debug("Unmarshalled key: " + key); @@ -356,8 +355,6 @@ public class GridNearTransactionalCache<K, V> extends GridNearCacheAdapter<K, V> req.owned(entry.key()) ); - assert cands.isEmpty() : "Received non-empty candidates in dht lock request: " + cands; - if (!req.inTx()) ctx.evicts().touch(entry, req.topologyVersion()); } http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java index 31aa8c3..9c022b2 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java @@ -40,6 +40,7 @@ import org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntry; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.transactions.IgniteTxHeuristicCheckedException; import org.apache.ignite.internal.transactions.IgniteTxRollbackCheckedException; +import org.apache.ignite.internal.util.GridLongList; import org.apache.ignite.internal.util.future.GridCompoundIdentityFuture; import org.apache.ignite.internal.util.future.GridFutureAdapter; import org.apache.ignite.internal.util.tostring.GridToStringInclude; @@ -332,6 +333,7 @@ public final class GridNearTxFinishFuture<K, V> extends GridCompoundIdentityFutu /** * Initializes future. */ + @SuppressWarnings("ForLoopReplaceableByForEach") void finish() { if (tx.onNeedCheckBackup()) { assert tx.onePhaseCommit(); @@ -363,10 +365,18 @@ public final class GridNearTxFinishFuture<K, V> extends GridCompoundIdentityFutu if (!isSync() && !isDone()) { boolean complete = true; - for (IgniteInternalFuture<?> f : pending()) - // Mini-future in non-sync mode gets done when message gets sent. - if (isMini(f) && !f.isDone()) - complete = false; + synchronized (futs) { + // Avoid collection copy and iterator creation. + for (int i = 0; i < futs.size(); i++) { + IgniteInternalFuture<IgniteInternalTx> f = futs.get(i); + + if (isMini(f) && !f.isDone()) { + complete = false; + + break; + } + } + } if (complete) onComplete(); http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java index 434b6c7..b92be31 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java @@ -461,21 +461,6 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter { } /** - * @param nodeId Node ID. - * @param dhtVer DHT version. - * @param writeVer Write version. - */ - void addDhtVersion(UUID nodeId, GridCacheVersion dhtVer, GridCacheVersion writeVer) { - // This step is very important as near and DHT versions grow separately. - cctx.versions().onReceived(nodeId, dhtVer); - - GridDistributedTxMapping m = mappings.get(nodeId); - - if (m != null) - m.dhtVersion(dhtVer, writeVer); - } - - /** * @param nodeId Undo mapping. */ @Override public boolean removeMapping(UUID nodeId) { http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFutureAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFutureAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFutureAdapter.java index 45477a0..cfaadc9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFutureAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFutureAdapter.java @@ -172,6 +172,8 @@ public abstract class GridNearTxPrepareFutureAdapter extends GridCompoundFuture< assert res.error() == null : res; assert F.isEmpty(res.invalidPartitions()) : res; + UUID nodeId = m.node().id(); + for (Map.Entry<IgniteTxKey, CacheVersionedValue> entry : res.ownedValues().entrySet()) { IgniteTxEntry txEntry = tx.entry(entry.getKey()); @@ -187,7 +189,7 @@ public abstract class GridNearTxPrepareFutureAdapter extends GridCompoundFuture< CacheVersionedValue tup = entry.getValue(); nearEntry.resetFromPrimary(tup.value(), tx.xidVersion(), - tup.version(), m.node().id(), tx.topologyVersion()); + tup.version(), nodeId, tx.topologyVersion()); } else if (txEntry.cached().detached()) { GridDhtDetachedCacheEntry detachedEntry = (GridDhtDetachedCacheEntry)txEntry.cached(); @@ -229,11 +231,17 @@ public abstract class GridNearTxPrepareFutureAdapter extends GridCompoundFuture< if (writeVer == null) writeVer = res.dhtVersion(); - // Register DHT version. - tx.addDhtVersion(m.node().id(), res.dhtVersion(), writeVer); + // This step is very important as near and DHT versions grow separately. + cctx.versions().onReceived(nodeId, res.dhtVersion()); + // Register DHT version. m.dhtVersion(res.dhtVersion(), writeVer); + GridDistributedTxMapping map = tx.mappings().get(nodeId); + + if (map != null) + map.dhtVersion(res.dhtVersion(), writeVer); + if (m.near()) tx.readyNearLocks(m, res.pending(), res.committedVersions(), res.rolledbackVersions()); } http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareRequest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareRequest.java index 798635a..9dfdb43 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareRequest.java @@ -71,7 +71,7 @@ public class GridNearTxPrepareRequest extends GridDistributedTxPrepareRequest { /** Implicit single flag. */ private boolean implicitSingle; - /** Explicit lock flag. Set to true if at leat one entry was explicitly locked. */ + /** Explicit lock flag. Set to true if at least one entry was explicitly locked. */ private boolean explicitLock; /** Subject ID. */ @@ -282,73 +282,73 @@ public class GridNearTxPrepareRequest extends GridDistributedTxPrepareRequest { } switch (writer.state()) { - case 22: + case 23: if (!writer.writeBoolean("explicitLock", explicitLock)) return false; writer.incrementState(); - case 23: + case 24: if (!writer.writeBoolean("firstClientReq", firstClientReq)) return false; writer.incrementState(); - case 24: + case 25: if (!writer.writeIgniteUuid("futId", futId)) return false; writer.incrementState(); - case 25: + case 26: if (!writer.writeBoolean("implicitSingle", implicitSingle)) return false; writer.incrementState(); - case 26: + case 27: if (!writer.writeBoolean("last", last)) return false; writer.incrementState(); - case 27: + case 28: if (!writer.writeCollection("lastBackups", lastBackups, MessageCollectionItemType.UUID)) return false; writer.incrementState(); - case 28: + case 29: if (!writer.writeIgniteUuid("miniId", miniId)) return false; writer.incrementState(); - case 29: + case 30: if (!writer.writeBoolean("near", near)) return false; writer.incrementState(); - case 30: + case 31: if (!writer.writeBoolean("retVal", retVal)) return false; writer.incrementState(); - case 31: + case 32: if (!writer.writeUuid("subjId", subjId)) return false; writer.incrementState(); - case 32: + case 33: if (!writer.writeInt("taskNameHash", taskNameHash)) return false; writer.incrementState(); - case 33: + case 34: if (!writer.writeMessage("topVer", topVer)) return false; @@ -370,7 +370,7 @@ public class GridNearTxPrepareRequest extends GridDistributedTxPrepareRequest { return false; switch (reader.state()) { - case 22: + case 23: explicitLock = reader.readBoolean("explicitLock"); if (!reader.isLastRead()) @@ -378,7 +378,7 @@ public class GridNearTxPrepareRequest extends GridDistributedTxPrepareRequest { reader.incrementState(); - case 23: + case 24: firstClientReq = reader.readBoolean("firstClientReq"); if (!reader.isLastRead()) @@ -386,7 +386,7 @@ public class GridNearTxPrepareRequest extends GridDistributedTxPrepareRequest { reader.incrementState(); - case 24: + case 25: futId = reader.readIgniteUuid("futId"); if (!reader.isLastRead()) @@ -394,7 +394,7 @@ public class GridNearTxPrepareRequest extends GridDistributedTxPrepareRequest { reader.incrementState(); - case 25: + case 26: implicitSingle = reader.readBoolean("implicitSingle"); if (!reader.isLastRead()) @@ -402,7 +402,7 @@ public class GridNearTxPrepareRequest extends GridDistributedTxPrepareRequest { reader.incrementState(); - case 26: + case 27: last = reader.readBoolean("last"); if (!reader.isLastRead()) @@ -410,7 +410,7 @@ public class GridNearTxPrepareRequest extends GridDistributedTxPrepareRequest { reader.incrementState(); - case 27: + case 28: lastBackups = reader.readCollection("lastBackups", MessageCollectionItemType.UUID); if (!reader.isLastRead()) @@ -418,7 +418,7 @@ public class GridNearTxPrepareRequest extends GridDistributedTxPrepareRequest { reader.incrementState(); - case 28: + case 29: miniId = reader.readIgniteUuid("miniId"); if (!reader.isLastRead()) @@ -426,7 +426,7 @@ public class GridNearTxPrepareRequest extends GridDistributedTxPrepareRequest { reader.incrementState(); - case 29: + case 30: near = reader.readBoolean("near"); if (!reader.isLastRead()) @@ -434,7 +434,7 @@ public class GridNearTxPrepareRequest extends GridDistributedTxPrepareRequest { reader.incrementState(); - case 30: + case 31: retVal = reader.readBoolean("retVal"); if (!reader.isLastRead()) @@ -442,7 +442,7 @@ public class GridNearTxPrepareRequest extends GridDistributedTxPrepareRequest { reader.incrementState(); - case 31: + case 32: subjId = reader.readUuid("subjId"); if (!reader.isLastRead()) @@ -450,7 +450,7 @@ public class GridNearTxPrepareRequest extends GridDistributedTxPrepareRequest { reader.incrementState(); - case 32: + case 33: taskNameHash = reader.readInt("taskNameHash"); if (!reader.isLastRead()) @@ -458,7 +458,7 @@ public class GridNearTxPrepareRequest extends GridDistributedTxPrepareRequest { reader.incrementState(); - case 33: + case 34: topVer = reader.readMessage("topVer"); if (!reader.isLastRead()) @@ -478,7 +478,7 @@ public class GridNearTxPrepareRequest extends GridDistributedTxPrepareRequest { /** {@inheritDoc} */ @Override public byte fieldsCount() { - return 34; + return 35; } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteInternalTx.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteInternalTx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteInternalTx.java index f5f99f5..eb0db4a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteInternalTx.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteInternalTx.java @@ -35,6 +35,7 @@ import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.processors.timeout.GridTimeoutObject; import org.apache.ignite.internal.transactions.IgniteTxTimeoutCheckedException; +import org.apache.ignite.internal.util.GridLongList; import org.apache.ignite.internal.util.lang.GridTuple; import org.apache.ignite.lang.IgniteAsyncSupported; import org.apache.ignite.lang.IgniteUuid; http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java index 6a0f8ab..3ddd909 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java @@ -54,6 +54,7 @@ import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.processors.cache.version.GridCacheVersionConflictContext; import org.apache.ignite.internal.processors.cache.version.GridCacheVersionedEntryEx; import org.apache.ignite.internal.transactions.IgniteTxTimeoutCheckedException; +import org.apache.ignite.internal.util.GridLongList; import org.apache.ignite.internal.util.future.GridFutureAdapter; import org.apache.ignite.internal.util.lang.GridMetadataAwareAdapter; import org.apache.ignite.internal.util.lang.GridTuple; http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java index 9eb2808..23f83be 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxEntry.java @@ -599,20 +599,20 @@ public class IgniteTxEntry implements GridPeerDeployAware, Message { */ @SuppressWarnings("unchecked") public CacheObject applyEntryProcessors(CacheObject cacheVal) { - Object val = null; - Object keyVal = null; - GridCacheVersion ver; try { ver = entry.version(); } - catch (GridCacheEntryRemovedException e) { + catch (GridCacheEntryRemovedException ignore) { assert tx == null || tx.optimistic() : tx; ver = null; } + Object val = null; + Object keyVal = null; + for (T2<EntryProcessor<Object, Object, Object>, Object[]> t : entryProcessors()) { try { CacheInvokeEntry<Object, Object> invokeEntry = new CacheInvokeEntry(ctx, key, keyVal, cacheVal, val, @@ -1078,5 +1078,4 @@ public class IgniteTxEntry implements GridPeerDeployAware, Message { @Override public String toString() { return GridToStringBuilder.toString(IgniteTxEntry.class, this, "xidVer", tx == null ? "null" : tx.xidVersion()); } - } http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java index 5f48469..c75a8f38 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java @@ -147,6 +147,13 @@ public class IgniteTxImplicitSingleStateImpl extends IgniteTxLocalStateAdapter { } /** {@inheritDoc} */ + @Override public boolean hasInterceptor(GridCacheSharedContext cctx) { + GridCacheContext ctx0 = cacheCtx; + + return ctx0 != null && ctx0.config().getInterceptor() != null; + } + + /** {@inheritDoc} */ @Override public Collection<CacheStoreManager> stores(GridCacheSharedContext cctx) { if (cacheCtx == null) return null; http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java index 758f82c..9e44b10 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java @@ -67,6 +67,7 @@ import org.apache.ignite.internal.transactions.IgniteTxHeuristicCheckedException import org.apache.ignite.internal.transactions.IgniteTxRollbackCheckedException; import org.apache.ignite.internal.transactions.IgniteTxTimeoutCheckedException; import org.apache.ignite.internal.util.GridLeanMap; +import org.apache.ignite.internal.util.GridLongList; import org.apache.ignite.internal.util.future.GridEmbeddedFuture; import org.apache.ignite.internal.util.future.GridFinishedFuture; import org.apache.ignite.internal.util.future.GridFutureAdapter; @@ -74,7 +75,6 @@ import org.apache.ignite.internal.util.lang.GridClosureException; import org.apache.ignite.internal.util.lang.GridInClosure3; import org.apache.ignite.internal.util.lang.GridTuple; import org.apache.ignite.internal.util.tostring.GridToStringBuilder; -import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.C1; import org.apache.ignite.internal.util.typedef.C2; @@ -358,6 +358,13 @@ public abstract class IgniteTxLocalAdapter extends IgniteTxAdapter } /** + * @return {@code True} if transaction participates in a cache that has an interceptor configured. + */ + public boolean hasInterceptor() { + return txState().hasInterceptor(cctx); + } + + /** * @param needRetVal Need return value flag. */ public void needReturnValue(boolean needRetVal) { @@ -3045,7 +3052,7 @@ public abstract class IgniteTxLocalAdapter extends IgniteTxAdapter try { Set<?> keySet = map0 != null ? map0.keySet() : invokeMap0.keySet(); - final Collection<KeyCacheObject> enlisted = new ArrayList<>(); + final Collection<KeyCacheObject> enlisted = new ArrayList<>(keySet.size()); CacheOperationContext opCtx = cacheCtx.operationContextPerCall(); @@ -3434,7 +3441,6 @@ public abstract class IgniteTxLocalAdapter extends IgniteTxAdapter */ public boolean init() { return !txState.init(txSize) || cctx.tm().onStarted(this); - } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java index ccccca0..67bca51 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java @@ -59,6 +59,7 @@ import org.apache.ignite.internal.processors.timeout.GridTimeoutObjectAdapter; import org.apache.ignite.internal.transactions.IgniteTxOptimisticCheckedException; import org.apache.ignite.internal.transactions.IgniteTxTimeoutCheckedException; import org.apache.ignite.internal.util.GridBoundedConcurrentOrderedMap; +import org.apache.ignite.internal.util.GridLongList; import org.apache.ignite.internal.util.future.GridCompoundFuture; import org.apache.ignite.internal.util.future.GridFutureAdapter; import org.apache.ignite.internal.util.lang.IgnitePair; http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxRemoteStateAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxRemoteStateAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxRemoteStateAdapter.java index e7c4c96..3e5034b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxRemoteStateAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxRemoteStateAdapter.java @@ -92,6 +92,11 @@ public abstract class IgniteTxRemoteStateAdapter implements IgniteTxRemoteState } /** {@inheritDoc} */ + @Override public boolean hasInterceptor(GridCacheSharedContext cctx) { + return false; + } + + /** {@inheritDoc} */ @Override public Collection<CacheStoreManager> stores(GridCacheSharedContext cctx) { assert false; http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxState.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxState.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxState.java index 81707ba..18fce8d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxState.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxState.java @@ -101,6 +101,12 @@ public interface IgniteTxState { /** * @param cctx Context. + * @return {@code True} if transaction spans one or more caches with configured interceptor. + */ + public boolean hasInterceptor(GridCacheSharedContext cctx); + + /** + * @param cctx Context. * @return Configured stores for active caches. */ public Collection<CacheStoreManager> stores(GridCacheSharedContext cctx); http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxStateImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxStateImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxStateImpl.java index c95fb19..213c5e6 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxStateImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxStateImpl.java @@ -24,11 +24,13 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.cache.CacheInterceptor; import org.apache.ignite.internal.cluster.ClusterTopologyServerNotFoundException; import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture; import org.apache.ignite.internal.processors.cache.store.CacheStoreManager; +import org.apache.ignite.internal.util.GridLongList; import org.apache.ignite.internal.util.future.GridFutureAdapter; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.tostring.GridToStringInclude; @@ -45,7 +47,7 @@ import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC; */ public class IgniteTxStateImpl extends IgniteTxLocalStateAdapter { /** Active cache IDs. */ - private Set<Integer> activeCacheIds = new HashSet<>(); + private GridLongList activeCacheIds = new GridLongList(); /** Per-transaction read map. */ @GridToStringInclude @@ -66,13 +68,13 @@ public class IgniteTxStateImpl extends IgniteTxLocalStateAdapter { /** {@inheritDoc} */ @Nullable @Override public Integer firstCacheId() { - return F.first(activeCacheIds); + return activeCacheIds.isEmpty() ? null : (int)activeCacheIds.get(0); } /** {@inheritDoc} */ @Nullable @Override public GridCacheContext singleCacheContext(GridCacheSharedContext cctx) { if (activeCacheIds.size() == 1) { - int cacheId = F.first(activeCacheIds); + int cacheId = (int)activeCacheIds.get(0); return cctx.cacheContext(cacheId); } @@ -82,8 +84,11 @@ public class IgniteTxStateImpl extends IgniteTxLocalStateAdapter { /** {@inheritDoc} */ @Override public void awaitLastFut(GridCacheSharedContext cctx) { - for (Integer cacheId : activeCacheIds) + for (int i = 0; i < activeCacheIds.size(); i++) { + int cacheId = (int)activeCacheIds.get(i); + cctx.cacheContext(cacheId).cache().awaitLastFut(); + } } /** {@inheritDoc} */ @@ -91,7 +96,9 @@ public class IgniteTxStateImpl extends IgniteTxLocalStateAdapter { GridDhtTopologyFuture topFut) { StringBuilder invalidCaches = null; - for (Integer cacheId : activeCacheIds) { + for (int i = 0; i < activeCacheIds.size(); i++) { + int cacheId = (int)activeCacheIds.get(i); + GridCacheContext ctx = cctx.cacheContext(cacheId); assert ctx != null : cacheId; @@ -113,7 +120,9 @@ public class IgniteTxStateImpl extends IgniteTxLocalStateAdapter { invalidCaches.toString()); } - for (int cacheId : activeCacheIds) { + for (int i = 0; i < activeCacheIds.size(); i++) { + int cacheId = (int)activeCacheIds.get(i); + GridCacheContext<?, ?> cacheCtx = cctx.cacheContext(cacheId); if (CU.affinityNodes(cacheCtx, topFut.topologyVersion()).isEmpty()) { @@ -127,7 +136,9 @@ public class IgniteTxStateImpl extends IgniteTxLocalStateAdapter { /** {@inheritDoc} */ @Override public boolean sync(GridCacheSharedContext cctx) { - for (int cacheId : activeCacheIds) { + for (int i = 0; i < activeCacheIds.size(); i++) { + int cacheId = (int)activeCacheIds.get(i); + if (cctx.cacheContext(cacheId).config().getWriteSynchronizationMode() == FULL_SYNC) return true; } @@ -137,7 +148,9 @@ public class IgniteTxStateImpl extends IgniteTxLocalStateAdapter { /** {@inheritDoc} */ @Override public boolean hasNearCache(GridCacheSharedContext cctx) { - for (Integer cacheId : activeCacheIds) { + for (int i = 0; i < activeCacheIds.size(); i++) { + int cacheId = (int)activeCacheIds.get(i); + GridCacheContext cacheCtx = cctx.cacheContext(cacheId); if (cacheCtx.isNear()) @@ -163,7 +176,9 @@ public class IgniteTxStateImpl extends IgniteTxLocalStateAdapter { int idx = 0; - for (Integer activeCacheId : activeCacheIds) { + for (int i = 0; i < activeCacheIds.size(); i++) { + int activeCacheId = (int)activeCacheIds.get(i); + cacheNames.append(cctx.cacheContext(activeCacheId).name()); if (idx++ < activeCacheIds.size() - 1) @@ -192,7 +207,9 @@ public class IgniteTxStateImpl extends IgniteTxLocalStateAdapter { GridCacheContext<?, ?> nonLocCtx = null; - for (int cacheId : activeCacheIds) { + for (int i = 0; i < activeCacheIds.size(); i++) { + int cacheId = (int)activeCacheIds.get(i); + GridCacheContext<?, ?> cacheCtx = cctx.cacheContext(cacheId); if (!cacheCtx.isLocal()) { @@ -222,7 +239,9 @@ public class IgniteTxStateImpl extends IgniteTxLocalStateAdapter { if (!activeCacheIds.isEmpty()) { GridCacheContext<?, ?> nonLocCtx = null; - for (int cacheId : activeCacheIds) { + for (int i = 0; i < activeCacheIds.size(); i++) { + int cacheId = (int)activeCacheIds.get(i); + GridCacheContext<?, ?> cacheCtx = cctx.cacheContext(cacheId); if (!cacheCtx.isLocal()) { @@ -240,7 +259,9 @@ public class IgniteTxStateImpl extends IgniteTxLocalStateAdapter { /** {@inheritDoc} */ @Override public boolean storeUsed(GridCacheSharedContext cctx) { if (!activeCacheIds.isEmpty()) { - for (int cacheId : activeCacheIds) { + for (int i = 0; i < activeCacheIds.size(); i++) { + int cacheId = (int)activeCacheIds.get(i); + CacheStoreManager store = cctx.cacheContext(cacheId).store(); if (store.configured()) @@ -252,13 +273,29 @@ public class IgniteTxStateImpl extends IgniteTxLocalStateAdapter { } /** {@inheritDoc} */ + @Override public boolean hasInterceptor(GridCacheSharedContext cctx) { + for (int i = 0; i < activeCacheIds.size(); i++) { + int cacheId = (int)activeCacheIds.get(i); + + CacheInterceptor interceptor = cctx.cacheContext(cacheId).config().getInterceptor(); + + if (interceptor != null) + return true; + } + + return false; + } + + /** {@inheritDoc} */ @Override public Collection<CacheStoreManager> stores(GridCacheSharedContext cctx) { - Collection<Integer> cacheIds = activeCacheIds; + GridLongList cacheIds = activeCacheIds; if (!cacheIds.isEmpty()) { Collection<CacheStoreManager> stores = new ArrayList<>(cacheIds.size()); - for (int cacheId : cacheIds) { + for (int i = 0; i < cacheIds.size(); i++) { + int cacheId = (int)cacheIds.get(i); + CacheStoreManager store = cctx.cacheContext(cacheId).store(); if (store.configured()) @@ -273,7 +310,9 @@ public class IgniteTxStateImpl extends IgniteTxLocalStateAdapter { /** {@inheritDoc} */ @Override public void onTxEnd(GridCacheSharedContext cctx, IgniteInternalTx tx, boolean commit) { - for (int cacheId : activeCacheIds) { + for (int i = 0; i < activeCacheIds.size(); i++) { + int cacheId = (int)activeCacheIds.get(i); + GridCacheContext cacheCtx = cctx.cacheContext(cacheId); onTxEnd(cacheCtx, tx, commit); http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/processors/clock/GridClockSyncProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/clock/GridClockSyncProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/clock/GridClockSyncProcessor.java index 21d3fb6..b5c89cf 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/clock/GridClockSyncProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/clock/GridClockSyncProcessor.java @@ -35,6 +35,7 @@ import org.apache.ignite.internal.managers.eventstorage.GridLocalEventListener; import org.apache.ignite.internal.processors.GridProcessorAdapter; import org.apache.ignite.internal.util.GridBoundedConcurrentOrderedMap; import org.apache.ignite.internal.util.GridSpinReadWriteLock; +import org.apache.ignite.internal.util.typedef.T2; import org.apache.ignite.internal.util.typedef.internal.LT; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.internal.util.worker.GridWorker; @@ -71,6 +72,9 @@ public class GridClockSyncProcessor extends GridProcessorAdapter { private NavigableMap<GridClockDeltaVersion, GridClockDeltaSnapshot> timeSyncHist = new GridBoundedConcurrentOrderedMap<>(MAX_TIME_SYNC_HISTORY); + /** Last recorded. */ + private volatile T2<GridClockDeltaVersion, GridClockDeltaSnapshot> lastSnapshot; + /** Time source. */ private GridClockSource clockSrc; @@ -99,7 +103,11 @@ public class GridClockSyncProcessor extends GridProcessorAdapter { GridClockDeltaVersion ver = msg0.snapshotVersion(); - timeSyncHist.put(ver, new GridClockDeltaSnapshot(ver, msg0.deltas())); + GridClockDeltaSnapshot snap = new GridClockDeltaSnapshot(ver, msg0.deltas()); + + lastSnapshot = new T2<>(ver, snap); + + timeSyncHist.put(ver, snap); } }); @@ -265,11 +273,19 @@ public class GridClockSyncProcessor extends GridProcessorAdapter { * @return Adjusted time. */ public long adjustedTime(long topVer) { - // Get last synchronized time on given topology version. - Map.Entry<GridClockDeltaVersion, GridClockDeltaSnapshot> entry = timeSyncHistory().lowerEntry( - new GridClockDeltaVersion(0, topVer + 1)); + T2<GridClockDeltaVersion, GridClockDeltaSnapshot> fastSnap = lastSnapshot; + + GridClockDeltaSnapshot snap; - GridClockDeltaSnapshot snap = entry == null ? null : entry.getValue(); + if (fastSnap != null && fastSnap.get1().topologyVersion() == topVer) + snap = fastSnap.get2(); + else { + // Get last synchronized time on given topology version. + Map.Entry<GridClockDeltaVersion, GridClockDeltaSnapshot> entry = timeSyncHistory().lowerEntry( + new GridClockDeltaVersion(0, topVer + 1)); + + snap = entry == null ? null : entry.getValue(); + } long now = clockSrc.currentTimeMillis(); @@ -295,6 +311,8 @@ public class GridClockSyncProcessor extends GridProcessorAdapter { return; try { + lastSnapshot = new T2<>(snapshot.version(), snapshot); + timeSyncHist.put(snapshot.version(), snapshot); for (ClusterNode n : top.topologyNodes()) { http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/util/UUIDCollectionMessage.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/UUIDCollectionMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/util/UUIDCollectionMessage.java new file mode 100644 index 0000000..25e3376 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/UUIDCollectionMessage.java @@ -0,0 +1,114 @@ +/* + * 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.util; + +import java.nio.ByteBuffer; +import java.util.Collection; +import java.util.UUID; +import org.apache.ignite.internal.GridDirectCollection; +import org.apache.ignite.plugin.extensions.communication.Message; +import org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType; +import org.apache.ignite.plugin.extensions.communication.MessageReader; +import org.apache.ignite.plugin.extensions.communication.MessageWriter; + +/** + * + */ +public class UUIDCollectionMessage implements Message { + /** */ + private static final long serialVersionUID = 0L; + + /** */ + @GridDirectCollection(UUID.class) + private Collection<UUID> uuids; + + /** + * Empty constructor required for direct marshalling. + */ + public UUIDCollectionMessage() { + // No-op. + } + + /** + * @param uuids UUIDs to wrap. + */ + public UUIDCollectionMessage(Collection<UUID> uuids) { + this.uuids = uuids; + } + + /** + * @return The collection of UUIDs that was wrapped. + */ + public Collection<UUID> uuids() { + return uuids; + } + + /** {@inheritDoc} */ + @Override public boolean writeTo(ByteBuffer buf, MessageWriter writer) { + writer.setBuffer(buf); + + if (!writer.isHeaderWritten()) { + if (!writer.writeHeader(directType(), fieldsCount())) + return false; + + writer.onHeaderWritten(); + } + + switch (writer.state()) { + case 0: + if (!writer.writeCollection("uuids", uuids, MessageCollectionItemType.UUID)) + return false; + + writer.incrementState(); + + } + + return true; + } + + /** {@inheritDoc} */ + @Override public boolean readFrom(ByteBuffer buf, MessageReader reader) { + reader.setBuffer(buf); + + if (!reader.beforeMessageRead()) + return false; + + switch (reader.state()) { + case 0: + uuids = reader.readCollection("uuids", MessageCollectionItemType.UUID); + + if (!reader.isLastRead()) + return false; + + reader.incrementState(); + + } + + return reader.afterMessageRead(UUIDCollectionMessage.class); + } + + /** {@inheritDoc} */ + @Override public byte directType() { + return 115; + } + + /** {@inheritDoc} */ + @Override public byte fieldsCount() { + return 1; + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridCompoundFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridCompoundFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridCompoundFuture.java index 31674f1..5f0d411 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridCompoundFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridCompoundFuture.java @@ -53,7 +53,7 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> { AtomicIntegerFieldUpdater.newUpdater(GridCompoundFuture.class, "lsnrCalls"); /** Futures. */ - private final Collection<IgniteInternalFuture<T>> futs = new ArrayList<>(); + protected final ArrayList<IgniteInternalFuture<T>> futs = new ArrayList<>(); /** Reducer. */ @GridToStringInclude @@ -166,8 +166,19 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> { * * @return {@code True} if there are pending futures. */ + @SuppressWarnings("ForLoopReplaceableByForEach") public boolean hasPending() { - return !pending().isEmpty(); + synchronized (futs) { + // Avoid iterator creation and collection copy. + for (int i = 0; i < futs.size(); i++) { + IgniteInternalFuture<T> fut = futs.get(i); + + if (!fut.isDone()) + return true; + } + } + + return false; } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java index c1d91a8..8d5a8e7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java @@ -1866,6 +1866,8 @@ public class GridFunc { assert m != null; + final boolean hasPred = p != null && p.length > 0; + return new GridSerializableMap<K, V1>() { /** Entry predicate. */ private IgnitePredicate<Entry<K, V>> ep = new P1<Map.Entry<K, V>>() { @@ -1911,7 +1913,7 @@ public class GridFunc { } @Override public int size() { - return F.size(m.keySet(), p); + return hasPred ? F.size(m.keySet(), p) : m.size(); } @SuppressWarnings({"unchecked"}) @@ -1925,13 +1927,13 @@ public class GridFunc { } @Override public boolean isEmpty() { - return !iterator().hasNext(); + return hasPred ? !iterator().hasNext() : m.isEmpty(); } }; } @Override public boolean isEmpty() { - return entrySet().isEmpty(); + return hasPred ? entrySet().isEmpty() : m.isEmpty(); } @SuppressWarnings({"unchecked"}) http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java index 1824339..5bd08e7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java @@ -1301,6 +1301,8 @@ public class GridNioServer<T> { @SuppressWarnings("unchecked") private void bodyInternal() throws IgniteCheckedException { try { + long lastIdleCheck = U.currentTimeMillis(); + while (!closed && selector.isOpen()) { NioOperationFuture req; @@ -1374,11 +1376,18 @@ public class GridNioServer<T> { } // Wake up every 2 seconds to check if closed. - if (selector.select(2000) > 0) + if (selector.select(2000) > 0) { // Walk through the ready keys collection and process network events. processSelectedKeys(selector.selectedKeys()); + } - checkIdle(selector.keys()); + long now = U.currentTimeMillis(); + + if (now - lastIdleCheck > 2000) { + lastIdleCheck = now; + + checkIdle(selector.keys()); + } } } // Ignore this exception as thread interruption is equal to 'close' call. http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxStoreSessionTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxStoreSessionTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxStoreSessionTest.java index 8957c5d..6424b8b 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxStoreSessionTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxStoreSessionTest.java @@ -285,7 +285,7 @@ public class IgniteCacheTxStoreSessionTest extends IgniteCacheStoreSessionAbstra expData.add(new ExpectedData(true, "write", new HashMap<>(), CACHE_NAME1)); expData.add(new ExpectedData(true, "write", F.<Object, Object>asMap(0, "write"), null)); - expData.add(new ExpectedData(true, "sessionEnd", F.<Object, Object>asMap(0, "write", 1, "write"), null)); + expData.add(new ExpectedData(true, "sessionEnd", F.<Object, Object>asMap(0, "write", 1, "write"), CACHE_NAME1)); tx.commit(); } http://git-wip-us.apache.org/repos/asf/ignite/blob/175b7f24/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite3.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite3.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite3.java index c3c3659..ea13cdd 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite3.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite3.java @@ -51,6 +51,7 @@ import org.apache.ignite.internal.processors.cache.distributed.near.GridCachePut import org.apache.ignite.internal.processors.cache.distributed.near.IgniteTxReentryNearSelfTest; import org.apache.ignite.internal.processors.cache.distributed.rebalancing.GridCacheRebalancingAsyncSelfTest; import org.apache.ignite.internal.processors.cache.distributed.rebalancing.GridCacheRebalancingSyncSelfTest; +import org.apache.ignite.internal.processors.cache.distributed.rebalancing.GridCacheRebalancingUnmarshallingFailedSelfTest; import org.apache.ignite.internal.processors.cache.distributed.replicated.GridCacheDaemonNodeReplicatedSelfTest; import org.apache.ignite.internal.processors.cache.distributed.replicated.GridCacheReplicatedAtomicGetAndTransformStoreSelfTest; import org.apache.ignite.internal.processors.cache.distributed.replicated.GridCacheReplicatedBasicApiTest; @@ -138,6 +139,7 @@ public class IgniteCacheTestSuite3 extends TestSuite { suite.addTestSuite(GridCacheOrderedPreloadingSelfTest.class); suite.addTestSuite(GridCacheRebalancingSyncSelfTest.class); + suite.addTestSuite(GridCacheRebalancingUnmarshallingFailedSelfTest.class); suite.addTestSuite(GridCacheRebalancingAsyncSelfTest.class); // Test for byte array value special case.