# ignite-560 debug
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/68650834 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/68650834 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/68650834 Branch: refs/heads/ignite-560 Commit: 686508342cff5bd5a1b968e0396f2246771b766b Parents: a05157b Author: sboikov <sboi...@gridgain.com> Authored: Mon Apr 6 10:28:09 2015 +0300 Committer: sboikov <sboi...@gridgain.com> Committed: Mon Apr 6 10:29:55 2015 +0300 ---------------------------------------------------------------------- .../processors/cache/GridCacheMapEntry.java | 73 +++++++++++++++++--- .../dht/atomic/GridDhtAtomicCache.java | 6 ++ .../distributed/near/GridNearAtomicCache.java | 4 ++ .../distributed/near/GridNearCacheEntry.java | 4 ++ .../GridCacheAbstractRemoveFailureTest.java | 8 +++ 5 files changed, 84 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/68650834/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 5924129..e65c744 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 @@ -169,6 +169,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { ver = cctx.versions().next(); startVer = ver.order(); + + TestDebugLog.addEntryMessage(keyValue(false), getClass().getSimpleName(), "created"); } /** {@inheritDoc} */ @@ -184,6 +186,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { protected void value(@Nullable CacheObject val) { assert Thread.holdsLock(this); + TestDebugLog.addEntryMessage(keyValue(false), CU.value(val, cctx, false), "set value"); + // In case we deal with IGFS cache, count updated data if (cctx.cache().isIgfsDataCache() && cctx.kernalContext().igfsHelper().isIgfsBlockKey(key.value(cctx.cacheObjectContext(), false))) { @@ -844,6 +848,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { throws IgniteCheckedException, GridCacheEntryRemovedException { CU.checkStore(cctx); + TestDebugLog.addEntryMessage(keyValue(false), CU.value(val, cctx, false), "initialReload"); + GridCacheVersion startVer; boolean wasNew; @@ -1604,6 +1610,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { ) throws IgniteCheckedException, GridCacheEntryRemovedException, GridClosureException { assert cctx.atomic(); + TestDebugLog.addEntryMessage(keyValue(false), CU.value((CacheObject)writeObj, cctx, false), "innerUpdate"); + boolean res = true; CacheObject oldVal; @@ -2036,8 +2044,19 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { deletedUnlocked(false); } else { - assert !deletedUnlocked() : "Invalid entry [entry=" + this + - ", locNodeId=" + cctx.localNodeId() + ']'; + try { + assert !deletedUnlocked() : "Invalid entry [entry=" + this + + ", locNodeId=" + cctx.localNodeId() + ']'; + } + catch (AssertionError e) { + e.printStackTrace(); + + TestDebugLog.addEntryMessage(keyValue(false), CU.value(updated, cctx, false), "Failed innerUpdate: " + e.getMessage()); + + TestDebugLog.printKeyMessages(null, keyValue(false)); + + System.exit(1); + } // Do not change size. } @@ -2320,6 +2339,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { boolean rmv; boolean marked; + TestDebugLog.addEntryMessage(keyValue(false), CU.value(val, cctx, false), "clear"); + while (true) { ret = false; rmv = false; @@ -2533,6 +2554,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { throws IgniteCheckedException { assert newVer != null; + TestDebugLog.addEntryMessage(keyValue(false), CU.value(val, cctx, false), "invalidate"); + if (curVer == null || ver.equals(curVer)) { CacheObject val = saveValueForIndexUnlocked(); @@ -2560,6 +2583,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { /** {@inheritDoc} */ @Override public boolean invalidate(@Nullable CacheEntryPredicate[] filter) throws GridCacheEntryRemovedException, IgniteCheckedException { + TestDebugLog.addEntryMessage(keyValue(false), CU.value(val, cctx, false), "invalidate2"); + if (F.isEmptyOrNulls(filter)) { synchronized (this) { checkObsolete(); @@ -2696,8 +2721,11 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { protected void checkObsolete() throws GridCacheEntryRemovedException { assert Thread.holdsLock(this); - if (obsoleteVersionExtras() != null) + if (obsoleteVersionExtras() != null) { + TestDebugLog.addEntryMessage(keyValue(false), CU.value(val, cctx, false), "wasObsolete throw"); + throw new GridCacheEntryRemovedException(); + } } /** {@inheritDoc} */ @@ -2957,6 +2985,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { @Override public synchronized CacheObject rawPut(CacheObject val, long ttl) { CacheObject old = this.val; + TestDebugLog.addEntryMessage(keyValue(false), CU.value(val, cctx, false), "rawPut"); + update(val, CU.toExpireTime(ttl), ttl, nextVersion()); return old; @@ -2977,6 +3007,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { checkObsolete(); if (isNew() || (!preload && deletedUnlocked())) { + TestDebugLog.addEntryMessage(keyValue(false), CU.value(val, cctx, false), "initialValue"); + long expTime = expireTime < 0 ? CU.toExpireTime(ttl) : expireTime; val = cctx.kernalContext().cacheObjects().prepareForCache(val, cctx); @@ -3029,6 +3061,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { checkObsolete(); if (isNew()) { + TestDebugLog.addEntryMessage(keyValue(false), CU.value(val, cctx, false), "initialValueSwap"); + CacheObject val = unswapped.value(); val = cctx.kernalContext().cacheObjects().prepareForCache(val, cctx); @@ -3068,6 +3102,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { { checkObsolete(); + TestDebugLog.addEntryMessage(keyValue(false), CU.value(val, cctx, false), "versionedValue"); + if (curVer == null || curVer.equals(ver)) { if (val != this.val) { if (newVer == null) @@ -3611,6 +3647,8 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { @Nullable CacheEntryPredicate[] filter) throws IgniteCheckedException { boolean marked = false; + TestDebugLog.addEntryMessage(keyValue(false), CU.value(val, cctx, false), "evict"); + try { if (F.isEmptyOrNulls(filter)) { synchronized (this) { @@ -3992,19 +4030,32 @@ public abstract class GridCacheMapEntry implements GridCacheEntryEx { assert Thread.holdsLock(this); assert cctx.deferredDelete(); - if (deleted) { - assert !deletedUnlocked() : this; + TestDebugLog.addEntryMessage(keyValue(false), deleted, "deleted unlocked"); + + try { + if (deleted) { + assert !deletedUnlocked() : this; + + flags |= IS_DELETED_MASK; + + cctx.decrementPublicSize(this); + } + else { + assert deletedUnlocked() : this; - flags |= IS_DELETED_MASK; + flags &= ~IS_DELETED_MASK; - cctx.decrementPublicSize(this); + cctx.incrementPublicSize(this); + } } - else { - assert deletedUnlocked() : this; + catch (AssertionError e) { + e.printStackTrace(); + + TestDebugLog.addEntryMessage(keyValue(false), CU.value(val, cctx, false), "Failed deletedUnlocked: " + e.getMessage()); - flags &= ~IS_DELETED_MASK; + TestDebugLog.printKeyMessages(null, keyValue(false)); - cctx.incrementPublicSize(this); + System.exit(1); } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/68650834/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java index be9a963..2f30af0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java @@ -1696,6 +1696,8 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> { filteredReaders = F.view(entry.readers(), F.notEqualTo(node.id())); } + TestDebugLog.addEntryMessage(CU.value(entry.key(), ctx, false), CU.value((CacheObject)writeVal, ctx, false), "update single"); + GridCacheUpdateAtomicResult updRes = entry.innerUpdate( ver, node.id(), @@ -1964,6 +1966,8 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> { filteredReaders = F.view(entry.readers(), F.notEqualTo(node.id())); } + TestDebugLog.addEntryMessage(CU.value(entry.key(), ctx, false), CU.value(writeVal, ctx, false), "update partial"); + GridCacheUpdateAtomicResult updRes = entry.innerUpdate( ver, node.id(), @@ -2468,6 +2472,8 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> { long ttl = req.ttl(i); long expireTime = req.conflictExpireTime(i); + TestDebugLog.addEntryMessage(CU.value(key, ctx, false), CU.value(val, ctx, false), "backup update"); + GridCacheUpdateAtomicResult updRes = entry.innerUpdate( ver, nodeId, http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/68650834/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearAtomicCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearAtomicCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearAtomicCache.java index 6069849..aa55a8a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearAtomicCache.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearAtomicCache.java @@ -214,6 +214,8 @@ public class GridNearAtomicCache<K, V> extends GridNearCacheAdapter<K, V> { GridCacheOperation op = (val != null || valBytes != null) ? UPDATE : DELETE; + TestDebugLog.addEntryMessage(CU.value(entry.key(), ctx, false), CU.value((CacheObject)val, ctx, false), "update near response"); + GridCacheUpdateAtomicResult updRes = entry.innerUpdate( ver, nodeId, @@ -311,6 +313,8 @@ public class GridNearAtomicCache<K, V> extends GridNearCacheAdapter<K, V> { long ttl = req.nearTtl(i); long expireTime = req.nearExpireTime(i); + TestDebugLog.addEntryMessage(CU.value(entry.key(), ctx, false), CU.value((CacheObject)val, ctx, false), "update reader"); + GridCacheUpdateAtomicResult updRes = entry.innerUpdate( ver, nodeId, http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/68650834/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java index 13089aa..68ef08d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java @@ -154,6 +154,8 @@ public class GridNearCacheEntry extends GridDistributedCacheEntry { checkObsolete(); if (isNew() || !valid(topVer)) { + TestDebugLog.addEntryMessage(keyValue(false), CU.value(val, cctx, false), "init from DHT"); + // Version does not change for load ops. update(e.value(), e.expireTime(), e.ttl(), e.isNew() ? ver : e.version()); @@ -376,6 +378,8 @@ public class GridNearCacheEntry extends GridDistributedCacheEntry { boolean hasVal = hasValueUnlocked(); if (isNew() || !valid || expVer == null || expVer.equals(this.dhtVer)) { + TestDebugLog.addEntryMessage(keyValue(false), CU.value(val, cctx, false), "near loaded"); + primaryNode(primaryNodeId, topVer); // Change entry only if dht version has changed. http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/68650834/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractRemoveFailureTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractRemoveFailureTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractRemoveFailureTest.java index c6ede61..1cc6efa 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractRemoveFailureTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractRemoveFailureTest.java @@ -98,6 +98,8 @@ public abstract class GridCacheAbstractRemoveFailureTest extends GridCacheAbstra /** {@inheritDoc} */ @Override protected void afterTest() throws Exception { stopAllGrids(); + + TestDebugLog.clear(); } /** {@inheritDoc} */ @@ -133,11 +135,15 @@ public abstract class GridCacheAbstractRemoveFailureTest extends GridCacheAbstra while (true) { try { if (put) { + TestDebugLog.addEntryMessage(key, i, "put"); + sndCache0.put(key, i); expVals.put(key, F.t(i)); } else { + TestDebugLog.addEntryMessage(key, null, "remove"); + sndCache0.remove(key); expVals.put(key, F.<Integer>t(null)); @@ -291,6 +297,8 @@ public abstract class GridCacheAbstractRemoveFailureTest extends GridCacheAbstra IgniteCache<Integer, Integer> cache = ignite.cache(null); for (Map.Entry<Integer, GridTuple<Integer>> expVal : expVals.entrySet()) { + TestDebugLog.addEntryMessage(expVal.getKey(), null, "get from " + i); + Integer val = cache.get(expVal.getKey()); if (!F.eq(expVal.getValue().get(), val)) {