You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2014/12/23 09:22:58 UTC

[22/38] incubator-ignite git commit: # ignite-41

# ignite-41


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

Branch: refs/heads/ignite-1
Commit: afe0d03704b5c6badd38f41558765c1e824c3c2e
Parents: 5731d59
Author: sboikov <se...@inria.fr>
Authored: Sun Dec 21 22:49:18 2014 +0300
Committer: sboikov <se...@inria.fr>
Committed: Sun Dec 21 23:14:53 2014 +0300

----------------------------------------------------------------------
 .../processors/cache/IgniteCacheProxy.java      |  9 ++++-
 .../cache/GridCacheAccessExpiryPolicy.java      |  3 +-
 .../processors/cache/GridCacheEntryEx.java      |  2 +-
 .../processors/cache/GridCacheIoManager.java    |  2 --
 .../processors/cache/GridCacheMapEntry.java     | 30 +++-------------
 .../cache/GridCacheTxLocalAdapter.java          | 38 ++++++++++++++++++--
 .../kernal/processors/cache/GridCacheUtils.java | 23 ++++++++++++
 .../GridDistributedTxRemoteAdapter.java         | 13 ++++++-
 .../dht/GridDhtTransactionalCacheAdapter.java   |  2 +-
 .../distributed/dht/GridDhtTxLocalAdapter.java  |  2 +-
 .../dht/atomic/GridDhtAtomicCache.java          |  6 ++--
 .../IgniteCacheExpiryPolicyAbstractTest.java    | 27 ++++++++++++++
 .../GridCacheBasicOpAbstractTest.java           |  4 +--
 13 files changed, 119 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/afe0d037/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
index 01133b9..8bcd6a9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
@@ -235,7 +235,14 @@ public class IgniteCacheProxy<K, V> implements IgniteCache<K, V>, Externalizable
     /** {@inheritDoc} */
     @Override public int localSize(CachePeekMode... peekModes) {
         // TODO IGNITE-1.
-        throw new UnsupportedOperationException();
+        GridCacheProjectionImpl<K, V> prev = gate.enter(prj);
+
+        try {
+            return delegate.size();
+        }
+        finally {
+            gate.leave(prev);
+        }
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/afe0d037/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAccessExpiryPolicy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAccessExpiryPolicy.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAccessExpiryPolicy.java
index ebac13c..4f30a95 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAccessExpiryPolicy.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAccessExpiryPolicy.java
@@ -11,7 +11,6 @@ package org.gridgain.grid.kernal.processors.cache;
 
 import org.apache.ignite.lang.*;
 import org.gridgain.grid.util.typedef.internal.*;
-import org.jdk8.backport.*;
 import org.jetbrains.annotations.*;
 
 import javax.cache.expiry.*;
@@ -43,7 +42,7 @@ public class GridCacheAccessExpiryPolicy implements GridCacheExpiryPolicy {
         if (duration == null)
             return null;
 
-        return new GridCacheAccessExpiryPolicy(GridCacheMapEntry.toTtl(duration));
+        return new GridCacheAccessExpiryPolicy(GridCacheUtils.toTtl(duration));
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/afe0d037/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheEntryEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheEntryEx.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheEntryEx.java
index b684183..987b1c7 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheEntryEx.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheEntryEx.java
@@ -876,7 +876,7 @@ public interface GridCacheEntryEx<K, V> extends GridMetadataAware {
      * @param ver Version.
      * @param ttl Time to live.
      */
-    public void updateTtl(GridCacheVersion ver, long ttl);
+    public void updateTtl(@Nullable GridCacheVersion ver, long ttl);
 
     /**
      * @return Value.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/afe0d037/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheIoManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheIoManager.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheIoManager.java
index 969d28f..92cdb9a 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheIoManager.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheIoManager.java
@@ -193,8 +193,6 @@ public class GridCacheIoManager<K, V> extends GridCacheSharedManagerAdapter<K, V
 
             unmarshall(nodeId, cacheMsg);
 
-            //log.info("Message: " + cacheMsg);
-
             if (cacheMsg.allowForStartup())
                 processMessage(nodeId, cacheMsg, c);
             else {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/afe0d037/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
index 7944509..1d81a1c 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
@@ -1519,7 +1519,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
 
                 if (!pass) {
                     if (expiryPlc != null && hasValueUnlocked()) {
-                        long ttl = toTtl(expiryPlc.getExpiryForAccess());
+                        long ttl = GridCacheUtils.toTtl(expiryPlc.getExpiryForAccess());
 
                         if (ttl != -1L)
                             updateTtl(ttl);
@@ -1583,7 +1583,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
                 long expireTime;
 
                 if (expiryPlc != null) {
-                    ttl = toTtl(hadVal ? expiryPlc.getExpiryForUpdate() : expiryPlc.getExpiryForCreation());
+                    ttl = GridCacheUtils.toTtl(hadVal ? expiryPlc.getExpiryForUpdate() : expiryPlc.getExpiryForCreation());
 
                     if (ttl == -1L) {
                         ttl = ttlExtras();
@@ -1676,28 +1676,6 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
         return new IgniteBiTuple<>(res, cctx.<V>unwrapTemporary(interceptorRes != null ? interceptorRes.get2() : old));
     }
 
-    /**
-     * @param duration Duration.
-     * @return TTL.
-     */
-    public static long toTtl(Duration duration) {
-        if (duration == null)
-            return -1;
-
-        if (duration.getDurationAmount() == 0) {
-            if (duration.isEternal())
-                return 0;
-
-            assert duration.isZero();
-
-            return 1L;
-        }
-
-        assert duration.getTimeUnit() != null;
-
-        return duration.getTimeUnit().toMillis(duration.getDurationAmount());
-    }
-
     /** {@inheritDoc} */
     @Override public GridCacheUpdateAtomicResult<K, V> innerUpdate(
         GridCacheVersion newVer,
@@ -3426,14 +3404,14 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
     }
 
     /** {@inheritDoc} */
-    @Override public void updateTtl(GridCacheVersion ver, long ttl) {
+    @Override public void updateTtl(@Nullable GridCacheVersion ver, long ttl) {
         synchronized (this) {
             updateTtl(ttl);
 
             /*
             TODO IGNITE-41.
             try {
-                if (ver.equals(version()))
+                if (var == null || ver.equals(version()))
                     updateTtl(ttl);
             }
             catch (GridCacheEntryRemovedException ignored) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/afe0d037/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
index 3a5e604..f1fdce1 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTxLocalAdapter.java
@@ -666,7 +666,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                                             Duration duration = cached.hasValue() ?
                                                 expiry.getExpiryForUpdate() : expiry.getExpiryForCreation();
 
-                                            txEntry.ttl(GridCacheMapEntry.toTtl(duration));
+                                            txEntry.ttl(GridCacheUtils.toTtl(duration));
                                         }
                                     }
 
@@ -782,6 +782,11 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                                             nearCached.innerReload(CU.<K, V>empty());
                                     }
                                     else if (op == READ) {
+                                        Duration duration = expiryForAccess(txEntry);
+
+                                        if (duration != null)
+                                            cached.updateTtl(null, GridCacheUtils.toTtl(duration));
+
                                         if (log.isDebugEnabled())
                                             log.debug("Ignoring READ entry when committing: " + txEntry);
                                     }
@@ -857,12 +862,28 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                         }
                     }
                 }
+
+                if (!near()) {
+                    for (GridCacheTxEntry<K, V> txEntry : readEntries()) {
+                        Duration duration = expiryForAccess(txEntry);
+
+                        if (duration != null)
+                            txEntry.cached().updateTtl(null, GridCacheUtils.toTtl(duration));
+                    }
+                }
             }
             finally {
                 cctx.tm().txContextReset();
             }
         }
         else {
+            for (GridCacheTxEntry<K, V> txEntry : readEntries()) {
+                Duration duration = expiryForAccess(txEntry);
+
+                if (duration != null)
+                    txEntry.cached().updateTtl(null, GridCacheUtils.toTtl(duration));
+            }
+
             GridCacheStoreManager<K, V> store = store();
 
             if (store != null && (!internal() || groupLock())) {
@@ -897,6 +918,19 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
     }
 
     /**
+     * @param txEntry Tx entry.
+     * @return New duration.
+     */
+    @Nullable private Duration expiryForAccess(GridCacheTxEntry<K, V> txEntry) {
+        ExpiryPolicy expiry = txEntry.expiry();
+
+        if (expiry == null)
+            expiry = txEntry.context().expiry();
+
+        return expiry != null ? expiry.getExpiryForAccess() : null;
+    }
+
+    /**
      * Commits transaction to transaction manager. Used for one-phase commit transactions only.
      */
     public void tmCommit() {
@@ -2110,7 +2144,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                         ExpiryPolicy expiryPlc = txEntry.expiry() != null ? txEntry.expiry() : cacheCtx.expiry();
 
                         if (expiryPlc != null)
-                            txEntry.ttl(GridCacheMapEntry.toTtl(expiryPlc.getExpiryForAccess()));
+                            txEntry.ttl(GridCacheUtils.toTtl(expiryPlc.getExpiryForAccess()));
                     }
 
                     break; // While.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/afe0d037/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheUtils.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheUtils.java
index aac525e..248695d 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheUtils.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheUtils.java
@@ -24,6 +24,7 @@ import org.gridgain.grid.util.typedef.internal.*;
 import org.jdk8.backport.*;
 import org.jetbrains.annotations.*;
 
+import javax.cache.expiry.*;
 import java.io.*;
 import java.util.*;
 import java.util.concurrent.*;
@@ -1646,4 +1647,26 @@ public class GridCacheUtils {
     public static <K, V> boolean invalidate(GridCacheProjection<K, V> cache, K key) {
         return cache.clear(key);
     }
+
+    /**
+     * @param duration Duration.
+     * @return TTL.
+     */
+    public static long toTtl(Duration duration) {
+        if (duration == null)
+            return -1;
+
+        if (duration.getDurationAmount() == 0) {
+            if (duration.isEternal())
+                return 0;
+
+            assert duration.isZero();
+
+            return 1L;
+        }
+
+        assert duration.getTimeUnit() != null;
+
+        return duration.getTimeUnit().toMillis(duration.getDurationAmount());
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/afe0d037/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
index df6fc49..39e9ccc 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridDistributedTxRemoteAdapter.java
@@ -21,6 +21,7 @@ import org.gridgain.grid.util.typedef.*;
 import org.gridgain.grid.util.typedef.internal.*;
 import org.jetbrains.annotations.*;
 
+import javax.cache.expiry.*;
 import java.io.*;
 import java.util.*;
 import java.util.concurrent.atomic.*;
@@ -575,7 +576,17 @@ public class GridDistributedTxRemoteAdapter<K, V> extends GridCacheTxAdapter<K,
                                         }
                                     }
                                     else if (op == READ) {
-                                        assert near();
+                                        ExpiryPolicy expiry = txEntry.expiry();
+
+                                        if (expiry == null)
+                                            expiry = cacheCtx.expiry();
+
+                                        if (expiry != null) {
+                                            Duration duration = expiry.getExpiryForAccess();
+
+                                            if (duration != null)
+                                                cached.updateTtl(null, GridCacheUtils.toTtl(duration));
+                                        }
 
                                         if (log.isDebugEnabled())
                                             log.debug("Ignoring READ entry when committing: " + txEntry);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/afe0d037/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java
index 393d13c..b608525 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTransactionalCacheAdapter.java
@@ -208,7 +208,7 @@ public abstract class GridDhtTransactionalCacheAdapter<K, V> extends GridDhtCach
 
                             tx.addWrite(
                                 ctx,
-                                writeEntry == null ? NOOP : writeEntry.op(),
+                                writeEntry == null ? (req.txRead() ? READ : NOOP) : writeEntry.op(),
                                 txKey,
                                 req.keyBytes() != null ? req.keyBytes().get(i) : null,
                                 writeEntry == null ? null : writeEntry.value(),

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/afe0d037/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java
index d33a317..4fcedca 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxLocalAdapter.java
@@ -514,7 +514,7 @@ public abstract class GridDhtTxLocalAdapter<K, V> extends GridCacheTxLocalAdapte
 
                     GridCacheTxEntry<K, V> w = writeEntries == null ? null : writeEntries.get(idx++);
 
-                    txEntry = addEntry(NOOP, null, null, cached, null, CU.<K, V>empty(), false, -1L, -1L,
+                    txEntry = addEntry(read ? READ : NOOP, null, null, cached, null, CU.<K, V>empty(), false, -1L, -1L,
                         drVers != null ? drVers[drVerIdx++] : null);
 
                     if (w != null) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/afe0d037/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
index 334ecb0..4dad072 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
@@ -2723,17 +2723,17 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
 
         /** {@inheritDoc} */
         @Override public long forCreate() {
-            return GridCacheMapEntry.toTtl(plc.getExpiryForCreation());
+            return toTtl(plc.getExpiryForCreation());
         }
 
         /** {@inheritDoc} */
         @Override public long forUpdate() {
-            return GridCacheMapEntry.toTtl(plc.getExpiryForUpdate());
+            return toTtl(plc.getExpiryForUpdate());
         }
 
         /** {@inheritDoc} */
         @Override public long forAccess() {
-            return GridCacheMapEntry.toTtl(plc.getExpiryForAccess());
+            return toTtl(plc.getExpiryForAccess());
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/afe0d037/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyAbstractTest.java
index 2d115c6..adaee5d 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyAbstractTest.java
@@ -157,6 +157,33 @@ public abstract class IgniteCacheExpiryPolicyAbstractTest extends IgniteCacheAbs
 
             filterAccessReplace(key);
         }
+
+        if (atomicityMode() == TRANSACTIONAL) {
+            for (final Integer key : keys()) {
+                log.info("Test txGet [key=" + key + ']');
+
+                txGet(key);
+            }
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    private void txGet(Integer key) throws Exception {
+        IgniteCache<Integer, Integer> cache = jcache();
+
+        cache.put(key, 1);
+
+        checkTtl(key, 60_000L);
+
+        try (GridCacheTx tx = ignite(0).transactions().txStart()) {
+            assertEquals((Integer)1, cache.get(key));
+
+            tx.commit();
+        }
+
+        checkTtl(key, 62_000L, true);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/afe0d037/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheBasicOpAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheBasicOpAbstractTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheBasicOpAbstractTest.java
index bd473eb..7887e1c 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheBasicOpAbstractTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheBasicOpAbstractTest.java
@@ -317,10 +317,10 @@ public abstract class GridCacheBasicOpAbstractTest extends GridCommonAbstractTes
         IgniteCache<String, String> cache2 = ignite2.jcache(null);
         IgniteCache<String, String> cache3 = ignite3.jcache(null);
 
-        GridCacheTx tx = ignite1.transactions().txStart();
-
         cache1.put("key", "val");
 
+        GridCacheTx tx = ignite1.transactions().txStart();
+
         long ttl = 500;
 
         cache1.withExpiryPolicy(new TouchedExpiryPolicy(new Duration(TimeUnit.MILLISECONDS, ttl))).put("key", "val");