GG-9655 - Fixing tests after merge.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/9215a078 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/9215a078 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/9215a078 Branch: refs/heads/ingite-9655-merge Commit: 9215a078875b1697a7cba600c00d3e5268ef37c1 Parents: 4fde8d3 Author: Alexey Goncharuk <agoncha...@gridgain.com> Authored: Fri Jan 30 19:45:09 2015 -0800 Committer: Alexey Goncharuk <agoncha...@gridgain.com> Committed: Fri Jan 30 19:45:09 2015 -0800 ---------------------------------------------------------------------- .../processors/cache/GridCacheReturn.java | 47 ++++++++++++++++++++ .../distributed/dht/GridDhtTxPrepareFuture.java | 4 +- .../dht/atomic/GridDhtAtomicCache.java | 2 +- .../near/GridNearTxPrepareFuture.java | 5 +-- .../transactions/IgniteTxLocalAdapter.java | 30 ++++++++++--- .../cache/GridCacheAbstractFullApiSelfTest.java | 2 +- 6 files changed, 77 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9215a078/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java index cab1e36..09a566f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java @@ -44,6 +44,9 @@ public class GridCacheReturn<V> implements Externalizable, IgniteOptimizedMarsha /** Success flag. */ private volatile boolean success; + /** */ + private volatile boolean invokeRes; + /** * Empty constructor. */ @@ -70,6 +73,19 @@ public class GridCacheReturn<V> implements Externalizable, IgniteOptimizedMarsha } /** + * + * @param v Value. + * @param success Success flag. + */ + public GridCacheReturn(V v, boolean success, boolean invokeRes) { + assert !invokeRes || v instanceof Map; + + this.v = v; + this.success = success; + this.invokeRes = invokeRes; + } + + /** * @return Value. */ @Nullable public V value() { @@ -86,6 +102,13 @@ public class GridCacheReturn<V> implements Externalizable, IgniteOptimizedMarsha } /** + * @return If return is invoke result. + */ + public boolean invokeResult() { + return invokeRes; + } + + /** * @param v Value. * @return This instance for chaining. */ @@ -134,6 +157,8 @@ public class GridCacheReturn<V> implements Externalizable, IgniteOptimizedMarsha assert key != null; assert res != null; + invokeRes = true; + HashMap<Object, EntryProcessorResult> resMap = (HashMap<Object, EntryProcessorResult>)v; if (resMap == null) { @@ -145,6 +170,26 @@ public class GridCacheReturn<V> implements Externalizable, IgniteOptimizedMarsha resMap.put(key, res); } + /** + * @param other Other result to merge with. + */ + public synchronized void mergeEntryProcessResults(GridCacheReturn<V> other) { + assert invokeRes || v == null : "Invalid state to merge: " + this; + assert other.invokeRes; + + invokeRes = true; + + HashMap<Object, EntryProcessorResult> resMap = (HashMap<Object, EntryProcessorResult>)v; + + if (resMap == null) { + resMap = new HashMap<>(); + + v = (V)resMap; + } + + resMap.putAll((Map<Object, EntryProcessorResult>)other.v); + } + /** {@inheritDoc} */ @Override public Object ggClassId() { return GG_CLASS_ID; @@ -154,6 +199,7 @@ public class GridCacheReturn<V> implements Externalizable, IgniteOptimizedMarsha @Override public void writeExternal(ObjectOutput out) throws IOException { out.writeBoolean(success); out.writeObject(v); + out.writeBoolean(invokeRes); } /** {@inheritDoc} */ @@ -161,6 +207,7 @@ public class GridCacheReturn<V> implements Externalizable, IgniteOptimizedMarsha @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { success = in.readBoolean(); v = (V)in.readObject(); + invokeRes = in.readBoolean(); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9215a078/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java index fd97fd0..903de41 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java @@ -265,7 +265,7 @@ public final class GridDhtTxPrepareFuture<K, V> extends GridCompoundIdentityFutu /** * */ - private void checkFilters() { + private void onEntriesLocked() { ret = new GridCacheReturn<>(null, true); for (IgniteTxEntry<K, V> txEntry : tx.optimisticLockEntries()) { @@ -769,7 +769,7 @@ public final class GridDhtTxPrepareFuture<K, V> extends GridCompoundIdentityFutu // We are holding transaction-level locks for entries here, so we can get next write version. tx.writeVersion(cctx.versions().next(tx.topologyVersion())); - checkFilters(); + onEntriesLocked(); { Map<UUID, GridDistributedTxMapping<K, V>> futDhtMap = new HashMap<>(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9215a078/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 9b7c788..9ee8eaa 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 @@ -1805,7 +1805,7 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> { if (retVal == null) { computedMap = U.newHashMap(keys.size()); - retVal = new GridCacheReturn<>((Object)computedMap, updRes.success()); + retVal = new GridCacheReturn<>((Object)computedMap, updRes.success(), true); } computedMap.put(k, updRes.computedResult()); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9215a078/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFuture.java index 4d9dadf..ee22b3e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFuture.java @@ -230,7 +230,7 @@ public final class GridNearTxPrepareFuture<K, V> extends GridCompoundIdentityFut log.debug("Still waiting for locks [fut=" + this + ", keys=" + lockKeys + ']'); } - return true; + return locked; } /** @@ -1046,8 +1046,7 @@ public final class GridNearTxPrepareFuture<K, V> extends GridCompoundIdentityFut } } - if (tx.implicitSingle()) - tx.implicitSingleResult(res.returnValue()); + tx.implicitSingleResult(res.returnValue()); for (IgniteTxKey<K> key : res.filterFailedKeys()) { IgniteTxEntry<K, V> txEntry = tx.entry(key); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9215a078/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java index e190023..400daff 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java @@ -282,7 +282,10 @@ public abstract class IgniteTxLocalAdapter<K, V> extends IgniteTxAdapter<K, V> * @param ret Result. */ public void implicitSingleResult(GridCacheReturn<V> ret) { - implicitRes = ret; + if (ret.invokeResult()) + implicitRes.mergeEntryProcessResults(ret); + else + implicitRes = ret; } /** @@ -730,17 +733,32 @@ public abstract class IgniteTxLocalAdapter<K, V> extends IgniteTxAdapter<K, V> boolean evt = !isNearLocallyMapped(txEntry, false); + if (!F.isEmpty(txEntry.entryProcessors()) || !F.isEmpty(txEntry.filters())) + txEntry.cached().unswap(true, false); + + GridTuple3<GridCacheOperation, V, byte[]> res = applyTransformClosures(txEntry, + true); + // For near local transactions we must record DHT version // in order to keep near entries on backup nodes until // backup remote transaction completes. - if (cacheCtx.isNear()) + if (cacheCtx.isNear()) { ((GridNearCacheEntry<K, V>)cached).recordDhtVersion(txEntry.dhtVersion()); - if (!F.isEmpty(txEntry.entryProcessors()) || !F.isEmpty(txEntry.filters())) - txEntry.cached().unswap(true, false); + if (txEntry.op() == CREATE || txEntry.op() == UPDATE && txEntry.drExpireTime() == -1L) { + ExpiryPolicy expiry = txEntry.expiry(); - GridTuple3<GridCacheOperation, V, byte[]> res = applyTransformClosures(txEntry, - true); + if (expiry == null) + expiry = cacheCtx.expiry(); + + if (expiry != null) { + Duration duration = cached.hasValue() ? + expiry.getExpiryForUpdate() : expiry.getExpiryForCreation(); + + txEntry.ttl(CU.toTtl(duration)); + } + } + } GridCacheOperation op = res.get1(); V val = res.get2(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9215a078/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java index d71b78d..3056a44 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java @@ -5392,7 +5392,7 @@ public abstract class GridCacheAbstractFullApiSelfTest extends GridCacheAbstract assertFalse(cache.iterator().hasNext()); - final int SIZE = 20000; + final int SIZE = 5000; Map<String, Integer> entries = new HashMap<>();