Repository: ignite Updated Branches: refs/heads/master 3a9dba5f8 -> 7ea5830a5
Removed condition, simplified logic http://ci.ignite.apache.org/viewLog.html?buildId=606030&tab=buildResultsDiv&buildTypeId=IgniteTests_IgniteDataStrucutures http://ci.ignite.apache.org/viewLog.html?buildId=606029&tab=buildResultsDiv&buildTypeId=IgniteTests_IgniteBinaryObjectsDataStrucutures Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/7ea5830a Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/7ea5830a Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/7ea5830a Branch: refs/heads/master Commit: 7ea5830a5f28bb52db3efa6955f505e731e87f90 Parents: 3a9dba5 Author: Yakov Zhdanov <[email protected]> Authored: Fri May 12 01:06:05 2017 +0300 Committer: Yakov Zhdanov <[email protected]> Committed: Fri May 12 01:06:05 2017 +0300 ---------------------------------------------------------------------- .../GridCacheAtomicSequenceImpl.java | 101 ++++--------------- 1 file changed, 21 insertions(+), 80 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/7ea5830a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicSequenceImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicSequenceImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicSequenceImpl.java index d14bb47..5a87e4a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicSequenceImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicSequenceImpl.java @@ -24,8 +24,6 @@ import java.io.ObjectInput; import java.io.ObjectOutput; import java.io.ObjectStreamException; import java.util.concurrent.Callable; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import org.apache.ignite.IgniteCheckedException; @@ -44,8 +42,6 @@ import org.apache.ignite.internal.processors.cluster.IgniteChangeGlobalStateSupp import org.apache.ignite.lang.IgniteBiTuple; import org.jetbrains.annotations.Nullable; -import static java.util.concurrent.TimeUnit.MILLISECONDS; -import static org.apache.ignite.internal.util.typedef.internal.CU.retryTopologySafe; import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC; import static org.apache.ignite.transactions.TransactionIsolation.REPEATABLE_READ; @@ -87,7 +83,7 @@ public final class GridCacheAtomicSequenceImpl implements GridCacheAtomicSequenc /** Local value of sequence. */ @GridToStringInclude(sensitive = true) - private long locVal; + private volatile long locVal; /** Upper bound of local counter. */ private long upBound; @@ -98,18 +94,12 @@ public final class GridCacheAtomicSequenceImpl implements GridCacheAtomicSequenc /** Synchronization lock. */ private final Lock lock = new ReentrantLock(); - /** Await condition. */ - private Condition cond = lock.newCondition(); - /** Callable for execution {@link #incrementAndGet} operation in async and sync mode. */ private final Callable<Long> incAndGetCall = internalUpdate(1, true); /** Callable for execution {@link #getAndIncrement} operation in async and sync mode. */ private final Callable<Long> getAndIncCall = internalUpdate(1, false); - /** Add and get cache call guard. */ - private final AtomicBoolean updateGuard = new AtomicBoolean(); - /** * Empty constructor required by {@link Externalizable}. */ @@ -161,14 +151,7 @@ public final class GridCacheAtomicSequenceImpl implements GridCacheAtomicSequenc @Override public long get() { checkRemoved(); - lock.lock(); - - try { - return locVal; - } - finally { - lock.unlock(); - } + return locVal; } /** {@inheritDoc} */ @@ -235,70 +218,30 @@ public final class GridCacheAtomicSequenceImpl implements GridCacheAtomicSequenc try { // If reserved range isn't exhausted. - if (locVal + l <= upBound) { - long curVal = locVal; + long locVal0 = locVal; - locVal += l; + if (locVal0 + l <= upBound) { + locVal = locVal0 + l; - return updated ? locVal : curVal; + return updated ? locVal0 + l : locVal0; } - } - finally { - lock.unlock(); - } - - if (updateCall == null) - updateCall = internalUpdate(l, updated); - - while (true) { - if (updateGuard.compareAndSet(false, true)) { - try { - try { - return retryTopologySafe(updateCall); - } - catch (IgniteCheckedException | IgniteException | IllegalStateException e) { - throw e; - } - catch (Exception e) { - throw new IgniteCheckedException(e); - } - } - finally { - lock.lock(); - try { - updateGuard.set(false); + if (updateCall == null) + updateCall = internalUpdate(l, updated); - cond.signalAll(); - } - finally { - lock.unlock(); - } - } + try { + return updateCall.call(); } - else { - lock.lock(); - - try { - while (locVal >= upBound && updateGuard.get()) - U.await(cond, 500, MILLISECONDS); - - checkRemoved(); - - // If reserved range isn't exhausted. - if (locVal + l <= upBound) { - long curVal = locVal; - - locVal += l; - - return updated ? locVal : curVal; - } - } - finally { - lock.unlock(); - } + catch (IgniteCheckedException | IgniteException | IllegalStateException e) { + throw e; + } + catch (Exception e) { + throw new IgniteCheckedException(e); } } + finally { + lock.unlock(); + } } /** Get local batch size for this sequences. @@ -422,12 +365,10 @@ public final class GridCacheAtomicSequenceImpl implements GridCacheAtomicSequenc curLocVal = locVal; // If local range was already reserved in another thread. - if (locVal + l <= upBound) { - long retVal = locVal; - - locVal += l; + if (curLocVal + l <= upBound) { + locVal = curLocVal + l; - return updated ? locVal : retVal; + return updated ? curLocVal + l : curLocVal; } long curGlobalVal = seq.get();
