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/19 11:04:17 UTC

[09/11] 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/736dcc11
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/736dcc11
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/736dcc11

Branch: refs/heads/ignite-41
Commit: 736dcc1149b58b66dd7af6419bf71def36ccbe40
Parents: 0230134
Author: sboikov <sb...@gridgain.com>
Authored: Fri Dec 19 09:24:27 2014 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Dec 19 11:05:31 2014 +0300

----------------------------------------------------------------------
 .../cache/GridCacheAccessExpiryPolicy.java      | 10 ++++-
 .../processors/cache/GridCacheExpiryPolicy.java | 13 +++++-
 .../processors/cache/GridCacheMapEntry.java     | 10 ++++-
 .../cache/GridCacheTxLocalAdapter.java          | 32 +++++++++++---
 .../distributed/GridCacheTtlUpdateRequest.java  | 17 ++++----
 .../GridDistributedTxRemoteAdapter.java         |  3 ++
 .../distributed/dht/GridDhtCacheAdapter.java    |  2 +-
 .../distributed/dht/GridDhtTxFinishRequest.java |  8 ++--
 .../dht/atomic/GridDhtAtomicCache.java          | 44 ++++++++++++++++++--
 .../IgniteCacheExpiryPolicyAbstractTest.java    | 34 ++++++++++++++-
 .../cache/GridCacheBasicApiAbstractTest.java    | 16 +++----
 11 files changed, 150 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/736dcc11/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 f0904dd..2205108 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
@@ -83,7 +83,10 @@ public class GridCacheAccessExpiryPolicy implements GridCacheExpiryPolicy {
      * @param ver Entry version.
      */
     @SuppressWarnings("unchecked")
-    @Override public void onAccessUpdated(Object key, byte[] keyBytes, GridCacheVersion ver) {
+    @Override public void onAccessUpdated(Object key,
+        byte[] keyBytes,
+        GridCacheVersion ver,
+        @Nullable Collection<UUID> rdrs) {
         Map<Object, IgniteBiTuple<byte[], GridCacheVersion>> entries0 = entries;
 
         if (entries0 == null) {
@@ -106,6 +109,11 @@ public class GridCacheAccessExpiryPolicy implements GridCacheExpiryPolicy {
     }
 
     /** {@inheritDoc} */
+    @Nullable @Override public Map<UUID, Collection<IgniteBiTuple<byte[], GridCacheVersion>>> readers() {
+        return null;
+    }
+
+    /** {@inheritDoc} */
     @Override public String toString() {
         return S.toString(GridCacheAccessExpiryPolicy.class, this);
     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/736dcc11/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheExpiryPolicy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheExpiryPolicy.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheExpiryPolicy.java
index 3ce9572..0328d51 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheExpiryPolicy.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheExpiryPolicy.java
@@ -37,11 +37,20 @@ public interface GridCacheExpiryPolicy {
      * @param key Entry key.
      * @param keyBytes Entry key bytes.
      * @param ver Entry version.
+     * @param rdrs Entry readers.
      */
-    public void onAccessUpdated(Object key, byte[] keyBytes, GridCacheVersion ver);
+    public void onAccessUpdated(Object key,
+        byte[] keyBytes,
+        GridCacheVersion ver,
+        @Nullable Collection<UUID> rdrs);
 
     /**
-     * @return TTL update request.
+     * @return Entries with TTL updated on access.
      */
     @Nullable public Map<Object, IgniteBiTuple<byte[], GridCacheVersion>> entries();
+
+    /**
+     * @return Readers for updated entries.
+     */
+    @Nullable Map<UUID, Collection<IgniteBiTuple<byte[], GridCacheVersion>>> readers();
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/736dcc11/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 6f5fae6..8b79382 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
@@ -888,7 +888,10 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
 
                 updateTtl(ttl);
 
-                expiryPlc.onAccessUpdated(key(), getOrMarshalKeyBytes(), version());
+                expiryPlc.onAccessUpdated(key(),
+                    getOrMarshalKeyBytes(),
+                    version(),
+                    hasReaders() ? ((GridDhtCacheEntry)this).readers() : null);
             }
         }
 
@@ -1851,7 +1854,10 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
                         if (newTtl != -1L) {
                             updateTtl(newTtl);
 
-                            expiryPlc.onAccessUpdated(key, getOrMarshalKeyBytes(), version());
+                            expiryPlc.onAccessUpdated(key,
+                                getOrMarshalKeyBytes(),
+                                version(),
+                                hasReaders() ? ((GridDhtCacheEntry)this).readers() : null);
                         }
                     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/736dcc11/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 d2e0413..1cafbed 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
@@ -788,6 +788,9 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                                             "Transaction does not own lock for group lock entry during  commit [tx=" +
                                                 this + ", txEntry=" + txEntry + ']';
 
+                                        if (txEntry.ttl() != -1L)
+                                            cached.updateTtl(null, txEntry.ttl());
+
                                         if (log.isDebugEnabled())
                                             log.debug("Ignoring NOOP entry when committing: " + txEntry);
                                     }
@@ -1710,9 +1713,10 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
     /**
      * Internal routine for <tt>putAll(..)</tt>
      *
+     * @param cacheCtx Cache context.
      * @param keys Keys to enlist.
      * @param cached Cached entry.
-     * @param expiry Expiry policy for entry. If {@code null}, leave unchanged.
+     * @param expiryPlc Explicitly specified expiry policy for entry.
      * @param implicit Implicit flag.
      * @param lookup Value lookup map ({@code null} for remove).
      * @param transformMap Map with transform closures if this is a transform operation.
@@ -1729,7 +1733,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
         GridCacheContext<K, V> cacheCtx,
         Collection<? extends K> keys,
         @Nullable GridCacheEntryEx<K, V> cached,
-        @Nullable ExpiryPolicy expiry,
+        @Nullable ExpiryPolicy expiryPlc,
         boolean implicit,
         @Nullable Map<? extends K, ? extends V> lookup,
         @Nullable Map<? extends K, ? extends IgniteClosure<V, V>> transformMap,
@@ -1884,7 +1888,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                             }
 
                             txEntry = addEntry(lockOnly ? NOOP : rmv ? DELETE : transformClo != null ? TRANSFORM :
-                                old != null ? UPDATE : CREATE, val, transformClo, entry, expiry, filter, true, drTtl,
+                                old != null ? UPDATE : CREATE, val, transformClo, entry, expiryPlc, filter, true, drTtl,
                                 drExpireTime, drVer);
 
                             if (!implicit() && readCommitted())
@@ -1971,7 +1975,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                         }
 
                         txEntry = addEntry(rmv ? DELETE : transformClo != null ? TRANSFORM :
-                            v != null ? UPDATE : CREATE, val, transformClo, entry, expiry, filter, true, drTtl,
+                            v != null ? UPDATE : CREATE, val, transformClo, entry, expiryPlc, filter, true, drTtl,
                             drExpireTime, drVer);
 
                         enlisted.add(key);
@@ -2100,6 +2104,11 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
                         txEntry.setAndMarkValid(txEntry.previousOperation(), ret.value());
                         txEntry.filters(CU.<K, V>empty());
                         txEntry.filtersSet(false);
+
+                        ExpiryPolicy expiryPlc = txEntry.expiry() != null ? txEntry.expiry() : cacheCtx.expiry();
+
+                        if (expiryPlc != null)
+                            txEntry.ttl(GridCacheMapEntry.toTtl(expiryPlc.getExpiryForAccess()));
                     }
 
                     break; // While.
@@ -2341,6 +2350,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
     }
 
     /**
+     * @param cacheCtx Cache context.
      * @param keys Keys to remove.
      * @param drMap DR map.
      * @param retval Flag indicating whether a value should be returned.
@@ -2418,11 +2428,21 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
         try {
             Collection<K> enlisted = new LinkedList<>();
 
+            ExpiryPolicy plc;
+
+            if (!F.isEmpty(filter)) {
+                GridCacheProjectionImpl<K, V> prj = cacheCtx.projectionPerCall();
+
+                plc = prj != null ? prj.expiry() : null;
+            }
+            else
+                plc = null;
+
             final IgniteFuture<Set<K>> loadFut = enlistWrite(
                 cacheCtx,
                 keys0,
                 /** cached entry */null,
-                /** expiry */null,
+                plc,
                 implicit,
                 /** lookup map */null,
                 /** transform map */null,
@@ -2689,7 +2709,7 @@ public abstract class GridCacheTxLocalAdapter<K, V> extends GridCacheTxAdapter<K
     /**
      * @param op Cache operation.
      * @param val Value.
-     * @param expiryPlc Expiry policy, if {@code null}, leave unchanged.
+     * @param expiryPlc Explicitly specified expiry policy.
      * @param transformClos Transform closure.
      * @param entry Cache entry.
      * @param filter Filter.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/736dcc11/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheTtlUpdateRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheTtlUpdateRequest.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheTtlUpdateRequest.java
index c862904..b2e9141 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheTtlUpdateRequest.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/GridCacheTtlUpdateRequest.java
@@ -36,6 +36,14 @@ public class GridCacheTtlUpdateRequest<K, V> extends GridCacheMessage<K, V> {
     @GridDirectCollection(GridCacheVersion.class)
     private List<GridCacheVersion> vers;
 
+    /** */
+    @GridDirectCollection(byte[].class)
+    private List<byte[]> nearKeysBytes;
+
+    /** Versions for near entries. */
+    @GridDirectCollection(GridCacheVersion.class)
+    private List<GridCacheVersion> nearVers;
+
     /** New TTL. */
     private long ttl;
 
@@ -63,21 +71,16 @@ public class GridCacheTtlUpdateRequest<K, V> extends GridCacheMessage<K, V> {
     }
 
     /**
-     * @param key Key.
      * @param keyBytes Key bytes.
      * @param ver Version.
      */
-    public void addEntry(K key, byte[] keyBytes, GridCacheVersion ver) {
-        if (keys == null) {
-            keys = new ArrayList<>();
-
+    public void addEntry(byte[] keyBytes, GridCacheVersion ver) {
+        if (keysBytes == null) {
             keysBytes = new ArrayList<>();
 
             vers = new ArrayList<>();
         }
 
-        keys.add(key);
-
         keysBytes.add(keyBytes);
 
         vers.add(ver);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/736dcc11/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 c35c284..ffc8ca6 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
@@ -584,6 +584,9 @@ public class GridDistributedTxRemoteAdapter<K, V> extends GridCacheTxAdapter<K,
                                             "Transaction does not own lock for group lock entry during  commit [tx=" +
                                                 this + ", txEntry=" + txEntry + ']';
 
+                                        if (txEntry.ttl() != -1L)
+                                            cached.updateTtl(null, txEntry.ttl());
+
                                         if (nearCached != null) {
                                             V val0 = null;
                                             byte[] valBytes0 = null;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/736dcc11/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtCacheAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtCacheAdapter.java
index a7b1fea..e67c6dd 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtCacheAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtCacheAdapter.java
@@ -627,7 +627,7 @@ public abstract class GridDhtCacheAdapter<K, V> extends GridDistributedCacheAdap
                                     req.cacheId(ctx.cacheId());
                                 }
 
-                                req.addEntry((K)e.getKey(), e.getValue().get1(), e.getValue().get2());
+                                req.addEntry(e.getValue().get1(), e.getValue().get2());
                             }
                         }
                     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/736dcc11/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxFinishRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxFinishRequest.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxFinishRequest.java
index 931d40c..612b7f6 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxFinishRequest.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridDhtTxFinishRequest.java
@@ -495,13 +495,13 @@ public class GridDhtTxFinishRequest<K, V> extends GridDistributedTxFinishRequest
 
                 commState.idx++;
 
-            case 31:
+            case 32:
                 if (!commState.putLongList(ttls))
                     return false;
 
                 commState.idx++;
 
-            case 32:
+            case 33:
                 if (!commState.putLongList(nearTtls))
                     return false;
 
@@ -661,7 +661,7 @@ public class GridDhtTxFinishRequest<K, V> extends GridDistributedTxFinishRequest
 
                 commState.idx++;
 
-            case 31:
+            case 32:
                 GridLongList ttls0 = commState.getLongList();
 
                 if (ttls0 == LONG_LIST_NOT_READ)
@@ -671,7 +671,7 @@ public class GridDhtTxFinishRequest<K, V> extends GridDistributedTxFinishRequest
 
                 commState.idx++;
 
-            case 32:
+            case 33:
                 GridLongList nearTtls0 = commState.getLongList();
 
                 if (nearTtls0 == LONG_LIST_NOT_READ)

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/736dcc11/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 c3ef323..21afa83 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
@@ -667,7 +667,7 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
 
         GridCacheProjectionImpl<K, V> prj = ctx.projectionPerCall();
 
-        UUID subjId = ctx.subjectIdPerCall(null); // TODO IGNITE-41.
+        UUID subjId = ctx.subjectIdPerCall(null, prj);
 
         int taskNameHash = ctx.kernalContext().job().currentTaskNameHash();
 
@@ -1110,7 +1110,10 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
                         if (ttl != -1L) {
                             entry.updateTtl(null, ttl);
 
-                            expiry.onAccessUpdated(entry.key(), entry.getOrMarshalKeyBytes(), entry.version());
+                            expiry.onAccessUpdated(entry.key(),
+                                entry.getOrMarshalKeyBytes(),
+                                entry.version(),
+                                entry.readers());
                         }
                     }
 
@@ -2376,6 +2379,7 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
      * @param nodeId Sender node ID.
      * @param res Deferred atomic update response.
      */
+    @SuppressWarnings("unchecked")
     private void processDhtAtomicDeferredUpdateResponse(UUID nodeId, GridDhtAtomicDeferredUpdateResponse<K, V> res) {
         if (log.isDebugEnabled())
             log.debug("Processing deferred dht atomic update response [nodeId=" + nodeId + ", res=" + res + ']');
@@ -2705,6 +2709,9 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
         /** */
         private Map<Object, IgniteBiTuple<byte[], GridCacheVersion>> entries;
 
+        /** */
+        private Map<UUID, Collection<IgniteBiTuple<byte[], GridCacheVersion>>> rdrsMap;
+
         /**
          * @param plc Expiry policy.
          */
@@ -2730,16 +2737,45 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
         }
 
         /** {@inheritDoc} */
-        @Override public void onAccessUpdated(Object key, byte[] keyBytes, GridCacheVersion ver) {
+        @Override public void onAccessUpdated(Object key,
+            byte[] keyBytes,
+            GridCacheVersion ver,
+            @Nullable Collection<UUID> rdrs) {
             if (entries == null)
                 entries = new HashMap<>();
 
-            entries.put(key, new IgniteBiTuple<>(keyBytes, ver));
+            IgniteBiTuple t = new IgniteBiTuple<>(keyBytes, ver);
+
+            entries.put(key, t);
+
+            if (!F.isEmpty(rdrs)) {
+                if (rdrs == null)
+                    rdrsMap = new HashMap<>();
+
+                for (UUID nodeId : rdrs) {
+                    Collection<IgniteBiTuple<byte[], GridCacheVersion>> col = rdrsMap.get(nodeId);
+
+                    if (col == null)
+                        rdrsMap.put(nodeId, col = new ArrayList<>());
+
+                    col.add(t);
+                }
+            }
         }
 
         /** {@inheritDoc} */
         @Nullable @Override public Map<Object, IgniteBiTuple<byte[], GridCacheVersion>> entries() {
             return entries;
         }
+
+        /** {@inheritDoc} */
+        @Nullable @Override public Map<UUID, Collection<IgniteBiTuple<byte[], GridCacheVersion>>> readers() {
+            return rdrsMap;
+        }
+
+        /** {@inheritDoc} */
+        @Override public String toString() {
+            return S.toString(UpdateExpiryPolicy.class, this);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/736dcc11/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 326b232..bffe6af 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
@@ -144,10 +144,16 @@ public abstract class IgniteCacheExpiryPolicyAbstractTest extends IgniteCacheAbs
         accessGetAll();
 
         for (final Integer key : keys()) {
-            log.info("Test filter access [key=" + key + ']');
+            log.info("Test filterAccessRemove access [key=" + key + ']');
 
             filterAccessRemove(key);
         }
+
+        for (final Integer key : keys()) {
+            log.info("Test filterAccessReplace access [key=" + key + ']');
+
+            filterAccessReplace(key);
+        }
     }
 
     /**
@@ -183,9 +189,33 @@ public abstract class IgniteCacheExpiryPolicyAbstractTest extends IgniteCacheAbs
 
         checkTtl(key, 60_000L);
 
-        assertFalse(cache.remove(key, 2));
+        assertFalse(cache.remove(key, 2)); // Remove fails, access expiry policy should be used.
+
+        checkTtl(key, 62_000L, true);
+
+        assertFalse(cache.withExpiryPolicy(new TestPolicy(100L, 200L, 1000L)).remove(key, 2));
+
+        checkTtl(key, 1000L, true);
+    }
+
+    /**
+     * @param key Key.
+     * @throws Exception If failed.
+     */
+    private void filterAccessReplace(Integer key) throws Exception {
+        IgniteCache<Integer, Integer> cache = jcache();
+
+        cache.put(key, 1);
+
+        checkTtl(key, 60_000L);
+
+        assertFalse(cache.replace(key, 2, 3)); // Put fails, access expiry policy should be used.
 
         checkTtl(key, 62_000L, true);
+
+        assertFalse(cache.withExpiryPolicy(new TestPolicy(100L, 200L, 1000L)).remove(key, 2));
+
+        checkTtl(key, 1000L, true);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/736dcc11/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheBasicApiAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheBasicApiAbstractTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheBasicApiAbstractTest.java
index faa18b2..f56309c 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheBasicApiAbstractTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheBasicApiAbstractTest.java
@@ -23,6 +23,7 @@ import org.gridgain.testframework.*;
 import org.gridgain.testframework.junits.common.*;
 import org.jetbrains.annotations.*;
 
+import javax.cache.expiry.*;
 import java.util.*;
 import java.util.concurrent.*;
 
@@ -491,27 +492,22 @@ public abstract class GridCacheBasicApiAbstractTest extends GridCommonAbstractTe
      * @throws Exception In case of error.
      */
     public void testPutWithExpiration() throws Exception {
-        GridCache<Integer, String> cache = ignite.cache(null);
+        IgniteCache<Integer, String> cache = ignite.jcache(null);
 
         CacheEventListener lsnr = new CacheEventListener(new CountDownLatch(1));
 
         ignite.events().localListen(lsnr, EVTS_CACHE);
 
+        ExpiryPolicy expiry = new TouchedExpiryPolicy(new Duration(TimeUnit.MILLISECONDS, 200L));
+
         try {
             int key = (int)System.currentTimeMillis();
 
-            GridCacheEntry<Integer, String> entry = cache.entry(key);
-
-            entry.timeToLive(200);
-
-            entry.set("val");
+            cache.withExpiryPolicy(expiry).put(key, "val");
 
             assert cache.get(key) != null;
 
-            entry.timeToLive(200);
-
-            // Must update for TTL to have effect.
-            entry.set("val");
+            cache.withExpiryPolicy(expiry).put(key, "val");
 
             Thread.sleep(500);