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 2015/09/11 13:36:16 UTC

[05/22] ignite git commit: ignite-971 Fix offheap to swap eviction.

ignite-971 Fix offheap to swap eviction.


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

Branch: refs/heads/ignite-1093-2
Commit: 4a3b0242c34e580054be2e23bc01560e96519b0b
Parents: 1b51ec3
Author: sboikov <sb...@gridgain.com>
Authored: Thu Sep 10 10:42:01 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Sep 10 10:42:01 2015 +0300

----------------------------------------------------------------------
 .../processors/cache/CacheMetricsImpl.java      |  2 +-
 .../processors/cache/GridCacheMapEntry.java     |  4 +--
 .../processors/cache/GridCacheSwapManager.java  |  9 ++----
 .../processors/cache/GridCacheUtils.java        |  6 ++--
 .../util/offheap/unsafe/GridUnsafeMap.java      | 33 ++++++++++++--------
 .../cache/GridCacheOffHeapAndSwapSelfTest.java  |  4 +++
 6 files changed, 33 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/4a3b0242/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsImpl.java
index 1554e07..dfa0217 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsImpl.java
@@ -843,7 +843,7 @@ public class CacheMetricsImpl implements CacheMetrics {
         offHeapEvicts.incrementAndGet();
 
         if (delegate != null)
-            delegate.onOffHeapRemove();
+            delegate.onOffHeapEvict();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a3b0242/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
index 3fc1b2e..bdf6057 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
@@ -3681,7 +3681,7 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
             if (F.isEmptyOrNulls(filter)) {
                 synchronized (this) {
                     if (obsoleteVersionExtras() != null)
-                        return false;
+                        return true;
 
                     CacheObject prev = saveValueForIndexUnlocked();
 
@@ -3725,7 +3725,7 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
 
                     synchronized (this) {
                         if (obsoleteVersionExtras() != null)
-                            return false;
+                            return true;
 
                         if (!v.equals(ver))
                             // Version has changed since entry passed the filter. Do it again.

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a3b0242/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
index 53b0421..851c827 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
@@ -1059,7 +1059,7 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
 
         checkIteratorQueue();
 
-        boolean rmv = offheap.removex(spaceName, part, key, key.valueBytes(cctx.cacheObjectContext()),
+        return offheap.removex(spaceName, part, key, key.valueBytes(cctx.cacheObjectContext()),
             new IgniteBiPredicate<Long, Integer>() {
                 @Override public boolean apply(Long ptr, Integer len) {
                     GridCacheVersion ver0 = GridCacheOffheapSwapEntry.version(ptr);
@@ -1068,11 +1068,6 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
                 }
             }
         );
-
-        if (rmv && cctx.config().isStatisticsEnabled())
-            cctx.cache().metrics0().onOffHeapRemove();
-
-        return rmv;
     }
 
     /**
@@ -1355,7 +1350,7 @@ public class GridCacheSwapManager extends GridCacheManagerAdapter {
      */
     public void clearOffHeap() {
         if (offheapEnabled)
-            clearOffHeap();
+            initOffHeap();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a3b0242/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
index 919bce6..2d5698a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
@@ -1032,9 +1032,11 @@ public class GridCacheUtils {
         ctx.swap().unwindOffheapEvicts();
 
         if (ctx.isNear()) {
-            ctx.near().dht().context().evicts().unwind();
+            GridCacheContext dhtCtx = ctx.near().dht().context();
 
-            ctx.swap().unwindOffheapEvicts();
+            dhtCtx.evicts().unwind();
+
+            dhtCtx.swap().unwindOffheapEvicts();
         }
 
         ctx.ttl().expire();

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a3b0242/modules/core/src/main/java/org/apache/ignite/internal/util/offheap/unsafe/GridUnsafeMap.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/offheap/unsafe/GridUnsafeMap.java b/modules/core/src/main/java/org/apache/ignite/internal/util/offheap/unsafe/GridUnsafeMap.java
index ed13fe1..d0435e4 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/offheap/unsafe/GridUnsafeMap.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/offheap/unsafe/GridUnsafeMap.java
@@ -1022,12 +1022,26 @@ public class GridUnsafeMap implements GridOffHeapMap {
                         }
 
                         if (cur != 0) {
-                            long a;
+                            long qAddr0 = Entry.queueAddress(cur, mem);
 
-                            assert qAddr == (a = Entry.queueAddress(cur, mem)) : "Queue node address mismatch " +
-                                "[qAddr=" + qAddr + ", entryQueueAddr=" + a + ']';
+                            assert qAddr == qAddr0 : "Queue node address mismatch " +
+                                "[qAddr=" + qAddr + ", entryQueueAddr=" + qAddr + ']';
+
+                            if (evictLsnr != null) {
+                                keyBytes = Entry.readKeyBytes(cur, mem);
+
+                                int keyLen = Entry.readKeyLength(cur, mem);
+                                int valLen = Entry.readValueLength(cur, mem);
+
+                                valBytes = mem.readBytes(cur + HEADER + keyLen, valLen);
+                            }
 
                             if (rmvEvicted) {
+                                long a;
+
+                                assert qAddr == (a = Entry.queueAddress(cur, mem)) : "Queue node address mismatch " +
+                                    "[qAddr=" + qAddr + ", entryQueueAddr=" + a + ']';
+
                                 long next = Entry.nextAddress(cur, mem);
 
                                 if (prev != 0)
@@ -1047,18 +1061,11 @@ public class GridUnsafeMap implements GridOffHeapMap {
                                 totalCnt.decrement();
                             }
                             else {
-                                if (qAddr != 0) {
-                                    boolean clear = Entry.clearQueueAddress(cur, qAddr, mem);
+                                boolean clear = Entry.clearQueueAddress(cur, qAddr, mem);
 
-                                    assert clear;
-                                }
+                                assert clear;
 
-                                keyBytes = Entry.readKeyBytes(cur, mem);
-
-                                int keyLen = Entry.readKeyLength(cur, mem);
-                                int valLen = Entry.readValueLength(cur, mem);
-
-                                valBytes = mem.readBytes(cur + HEADER + keyLen, valLen);
+                                relSize = Entry.size(cur, mem);
                             }
                         }
                     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a3b0242/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheOffHeapAndSwapSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheOffHeapAndSwapSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheOffHeapAndSwapSelfTest.java
index 8f453a5..eb0880a 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheOffHeapAndSwapSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheOffHeapAndSwapSelfTest.java
@@ -249,6 +249,10 @@ public class GridCacheOffHeapAndSwapSelfTest extends GridCommonAbstractTest {
             assertEquals(ENTRY_CNT - i - 1, cache.localSize(CachePeekMode.ONHEAP));
         }
 
+        log.info("Cache size [onheap=" + cache.localSize(CachePeekMode.ONHEAP) +
+            ", offheap=" + cache.localSize(CachePeekMode.OFFHEAP) +
+            ", swap=" + cache.localSize(CachePeekMode.SWAP) + ']');
+
         // Ensure that part of entries located in off-heap memory and part is swapped.
         assertEquals(0, cache.localSize(CachePeekMode.ONHEAP));
         assertTrue(cache.localSize(CachePeekMode.OFFHEAP) > 0);