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/06/09 18:15:12 UTC
[02/50] incubator-ignite git commit: ignite-848 Excessive memory and
CPU consumption by TTL manager
ignite-848 Excessive memory and CPU consumption by TTL manager
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/9008472c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/9008472c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/9008472c
Branch: refs/heads/master
Commit: 9008472c334bfa3f7411e896b1aeaf657acff6df
Parents: 54f9492
Author: agura <ag...@gridgain.com>
Authored: Tue May 5 20:21:28 2015 +0300
Committer: agura <ag...@gridgain.com>
Committed: Tue May 5 21:14:31 2015 +0300
----------------------------------------------------------------------
.../processors/cache/GridCacheMapEntry.java | 10 ++++--
.../processors/cache/GridCacheTtlManager.java | 36 +++++++-------------
.../processors/cache/GridCacheUtils.java | 1 -
.../datastreamer/DataStreamerImpl.java | 2 ++
4 files changed, 23 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9008472c/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 478e1be..334f2b3 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
@@ -3305,7 +3305,7 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
if (!obsolete()) {
if (cctx.deferredDelete() && !detached() && !isInternal()) {
if (!deletedUnlocked()) {
- update(null, 0L, 0L, ver);
+ update(null, 0L, 0L, obsoleteVer);
deletedUnlocked(true);
@@ -3345,11 +3345,17 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx {
U.error(log, "Failed to clean up expired cache entry: " + this, e);
}
finally {
- if (obsolete)
+ if (obsolete) {
onMarkedObsolete();
+ cctx.cache().removeEntry(this);
+ }
+
if (deferred)
cctx.onDeferredDelete(this, obsoleteVer);
+
+ if ((obsolete || deferred) && cctx.cache().configuration().isStatisticsEnabled())
+ cctx.cache().metrics0().onEvict();
}
return obsolete;
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9008472c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManager.java
index 546cf57..ef5ac19 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManager.java
@@ -30,7 +30,8 @@ import org.jetbrains.annotations.*;
import org.jsr166.*;
/**
- * Eagerly removes expired entries from cache when {@link org.apache.ignite.configuration.CacheConfiguration#isEagerTtl()} flag is set.
+ * Eagerly removes expired entries from cache when
+ * {@link org.apache.ignite.configuration.CacheConfiguration#isEagerTtl()} flag is set.
*/
@SuppressWarnings("NakedNotify")
public class GridCacheTtlManager extends GridCacheManagerAdapter {
@@ -93,35 +94,24 @@ public class GridCacheTtlManager extends GridCacheManagerAdapter {
public void expire(boolean sizeLimited) {
long now = U.currentTimeMillis();
- GridCacheVersion obsoleteVer = null;
+ int size = pendingEntries.sizex();
- // Make sure that worker thread (e.g. sys pool) or user thread
- // will not be trapped.
- int size = Math.min(pendingEntries.sizex(), 1024);
+ GridCacheVersion obsoleteVer = null;
while (!sizeLimited || size-- > 0) {
- EntryWrapper e = pendingEntries.pollFirst();
-
- if (e == null)
- break;
-
- if (e.expireTime > now) {
- pendingEntries.add(e);
-
- break;
- }
+ EntryWrapper e = pendingEntries.firstx();
- if (obsoleteVer == null)
- obsoleteVer = cctx.versions().next();
+ if (e == null || e.expireTime > now)
+ return;
- if (log.isDebugEnabled())
- log.debug("Trying to remove expired entry from cache: " + e);
+ if (pendingEntries.remove(e)) {
+ if (obsoleteVer == null)
+ obsoleteVer = cctx.versions().next();
- if (e.entry.onTtlExpired(obsoleteVer)) {
- e.entry.context().cache().removeEntry(e.entry);
+ if (log.isDebugEnabled())
+ log.debug("Trying to remove expired entry from cache: " + e);
- if (e.entry.context().cache().configuration().isStatisticsEnabled())
- e.entry.context().cache().metrics0().onEvict();
+ e.entry.onTtlExpired(obsoleteVer);
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9008472c/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 a0e45e7..9a98358 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
@@ -29,7 +29,6 @@ import org.apache.ignite.internal.processors.cache.distributed.*;
import org.apache.ignite.internal.processors.cache.distributed.dht.*;
import org.apache.ignite.internal.processors.cache.transactions.*;
import org.apache.ignite.internal.processors.cache.version.*;
-import org.apache.ignite.internal.util.*;
import org.apache.ignite.internal.util.lang.*;
import org.apache.ignite.internal.util.typedef.*;
import org.apache.ignite.internal.util.typedef.T2;
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9008472c/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java
index a69e033..db3d350 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java
@@ -1420,6 +1420,8 @@ public class DataStreamerImpl<K, V> implements IgniteDataStreamer<K, V>, Delayed
GridDrType.DR_LOAD);
cctx.evicts().touch(entry, topVer);
+
+ CU.unwindEvicts(cctx);
}
catch (GridDhtInvalidPartitionException | GridCacheEntryRemovedException ignored) {
// No-op.