Merge remote-tracking branch 'remotes/origin/master' into ignite-1537
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/8edd9dd5 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/8edd9dd5 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/8edd9dd5 Branch: refs/heads/ignite-1537 Commit: 8edd9dd558bd0a3035c0d7eef4d8c4f7e99e49cc Parents: 916b3a9 Author: sboikov <[email protected]> Authored: Wed Oct 28 15:42:14 2015 +0300 Committer: sboikov <[email protected]> Committed: Wed Oct 28 15:42:14 2015 +0300 ---------------------------------------------------------------------- ...arOptimisticSerializableTxPrepareFuture.java | 66 ------------------ .../near/GridNearOptimisticTxPrepareFuture.java | 72 ++------------------ ...ridNearOptimisticTxPrepareFutureAdapter.java | 70 +++++++++++++++++++ 3 files changed, 74 insertions(+), 134 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/8edd9dd5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java index 47c1d21..ab956a5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java @@ -41,12 +41,10 @@ import org.apache.ignite.internal.processors.cache.distributed.GridDistributedTx import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxMapping; import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx; import org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntry; -import org.apache.ignite.internal.processors.cache.transactions.IgniteTxKey; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.transactions.IgniteTxOptimisticCheckedException; import org.apache.ignite.internal.transactions.IgniteTxRollbackCheckedException; import org.apache.ignite.internal.transactions.IgniteTxTimeoutCheckedException; -import org.apache.ignite.internal.util.GridConcurrentHashSet; import org.apache.ignite.internal.util.future.GridCompoundFuture; import org.apache.ignite.internal.util.future.GridFinishedFuture; import org.apache.ignite.internal.util.future.GridFutureAdapter; @@ -863,68 +861,4 @@ public class GridNearOptimisticSerializableTxPrepareFuture extends GridNearOptim return S.toString(MiniFuture.class, this, "done", isDone(), "cancelled", isCancelled(), "err", error()); } } - - /** - * Keys lock future. - */ - private class KeyLockFuture extends GridFutureAdapter<GridNearTxPrepareResponse> { - /** */ - @GridToStringInclude - private Collection<IgniteTxKey> lockKeys = new GridConcurrentHashSet<>(); - - /** */ - private volatile boolean allKeysAdded; - - /** - * @param key Key to track for locking. - */ - private void addLockKey(IgniteTxKey key) { - assert !allKeysAdded; - - lockKeys.add(key); - } - - /** - * @param key Locked keys. - */ - private void onKeyLocked(IgniteTxKey key) { - lockKeys.remove(key); - - checkLocks(); - } - - /** - * Moves future to the ready state. - */ - private void onAllKeysAdded() { - allKeysAdded = true; - - checkLocks(); - } - - /** - * @return {@code True} if all locks are owned. - */ - private boolean checkLocks() { - boolean locked = lockKeys.isEmpty(); - - if (locked && allKeysAdded) { - if (log.isDebugEnabled()) - log.debug("All locks are acquired for near prepare future: " + this); - - onDone((GridNearTxPrepareResponse)null); - } - else { - if (log.isDebugEnabled()) - log.debug("Still waiting for locks [fut=" + this + ", keys=" + lockKeys + ']'); - } - - return locked; - } - - /** {@inheritDoc} */ - @Override public String toString() { - return S.toString(KeyLockFuture.class, this, super.toString()); - } - } } http://git-wip-us.apache.org/repos/asf/ignite/blob/8edd9dd5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java index fb03c6f..199b2d3 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java @@ -38,11 +38,10 @@ import org.apache.ignite.internal.processors.cache.distributed.GridDistributedTx import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxMapping; import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx; import org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntry; -import org.apache.ignite.internal.processors.cache.transactions.IgniteTxKey; import org.apache.ignite.internal.transactions.IgniteTxRollbackCheckedException; import org.apache.ignite.internal.transactions.IgniteTxTimeoutCheckedException; -import org.apache.ignite.internal.util.GridConcurrentHashSet; import org.apache.ignite.internal.util.future.GridFutureAdapter; +import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.C1; import org.apache.ignite.internal.util.typedef.CI1; @@ -68,6 +67,7 @@ import static org.apache.ignite.transactions.TransactionState.PREPARING; public class GridNearOptimisticTxPrepareFuture extends GridNearOptimisticTxPrepareFutureAdapter implements GridCacheMvccFuture<IgniteInternalTx> { /** */ + @GridToStringExclude private KeyLockFuture keyLockFut = new KeyLockFuture(); /** @@ -519,8 +519,8 @@ public class GridNearOptimisticTxPrepareFuture extends GridNearOptimisticTxPrepa ", done=" + f.isDone() + "]"; } }, - new P1<IgniteInternalFuture<IgniteInternalTx>>() { - @Override public boolean apply(IgniteInternalFuture<IgniteInternalTx> f) { + new P1<IgniteInternalFuture<?>>() { + @Override public boolean apply(IgniteInternalFuture<?> f) { return f instanceof MiniFuture; } }); @@ -685,68 +685,4 @@ public class GridNearOptimisticTxPrepareFuture extends GridNearOptimisticTxPrepa return S.toString(MiniFuture.class, this, "done", isDone(), "cancelled", isCancelled(), "err", error()); } } - - /** - * Keys lock future. - */ - private class KeyLockFuture extends GridFutureAdapter<IgniteInternalTx> { - /** */ - @GridToStringInclude - private Collection<IgniteTxKey> lockKeys = new GridConcurrentHashSet<>(); - - /** */ - private volatile boolean allKeysAdded; - - /** - * @param key Key to track for locking. - */ - private void addLockKey(IgniteTxKey key) { - assert !allKeysAdded; - - lockKeys.add(key); - } - - /** - * @param key Locked keys. - */ - private void onKeyLocked(IgniteTxKey key) { - lockKeys.remove(key); - - checkLocks(); - } - - /** - * Moves future to the ready state. - */ - private void onAllKeysAdded() { - allKeysAdded = true; - - checkLocks(); - } - - /** - * @return {@code True} if all locks are owned. - */ - private boolean checkLocks() { - boolean locked = lockKeys.isEmpty(); - - if (locked && allKeysAdded) { - if (log.isDebugEnabled()) - log.debug("All locks are acquired for near prepare future: " + this); - - onDone(tx); - } - else { - if (log.isDebugEnabled()) - log.debug("Still waiting for locks [fut=" + this + ", keys=" + lockKeys + ']'); - } - - return locked; - } - - /** {@inheritDoc} */ - @Override public String toString() { - return S.toString(KeyLockFuture.class, this, super.toString()); - } - } } http://git-wip-us.apache.org/repos/asf/ignite/blob/8edd9dd5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java index fd9183e..4bfa222 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.processors.cache.distributed.near; +import java.util.Collection; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; @@ -24,8 +25,13 @@ import org.apache.ignite.internal.processors.cache.GridCacheContext; import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture; import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx; +import org.apache.ignite.internal.processors.cache.transactions.IgniteTxKey; +import org.apache.ignite.internal.util.GridConcurrentHashSet; +import org.apache.ignite.internal.util.future.GridFutureAdapter; import org.apache.ignite.internal.util.lang.GridPlainRunnable; +import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.CI1; +import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; import org.jetbrains.annotations.Nullable; @@ -219,4 +225,68 @@ public abstract class GridNearOptimisticTxPrepareFutureAdapter extends GridNearT * @param topLocked {@code True} if thread already acquired lock preventing topology change. */ protected abstract void prepare0(boolean remap, boolean topLocked); + + /** + * Keys lock future. + */ + protected final class KeyLockFuture extends GridFutureAdapter<GridNearTxPrepareResponse> { + /** */ + @GridToStringInclude + private Collection<IgniteTxKey> lockKeys = new GridConcurrentHashSet<>(); + + /** */ + private volatile boolean allKeysAdded; + + /** + * @param key Key to track for locking. + */ + protected void addLockKey(IgniteTxKey key) { + assert !allKeysAdded; + + lockKeys.add(key); + } + + /** + * @param key Locked keys. + */ + protected void onKeyLocked(IgniteTxKey key) { + lockKeys.remove(key); + + checkLocks(); + } + + /** + * Moves future to the ready state. + */ + protected void onAllKeysAdded() { + allKeysAdded = true; + + checkLocks(); + } + + /** + * @return {@code True} if all locks are owned. + */ + private boolean checkLocks() { + boolean locked = lockKeys.isEmpty(); + + if (locked && allKeysAdded) { + if (log.isDebugEnabled()) + log.debug("All locks are acquired for near prepare future: " + this); + + onDone((GridNearTxPrepareResponse)null); + } + else { + if (log.isDebugEnabled()) + log.debug("Still waiting for locks [fut=" + this + ", keys=" + lockKeys + ']'); + } + + return locked; + } + + /** {@inheritDoc} */ + @Override public String toString() { + return S.toString(KeyLockFuture.class, this, super.toString()); + } + } }
