ignite-1607 WIP

Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/a50ffa7e
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/a50ffa7e
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/a50ffa7e

Branch: refs/heads/ignite-1607
Commit: a50ffa7edf778094868462f82a5bdab6b1550e25
Parents: 846002f
Author: sboikov <sboi...@gridgain.com>
Authored: Tue Oct 27 12:00:07 2015 +0300
Committer: sboikov <sboi...@gridgain.com>
Committed: Tue Oct 27 12:12:41 2015 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCacheEntryEx.java      |  5 +--
 .../processors/cache/GridCacheMvcc.java         | 36 ++++++++++++--------
 .../distributed/GridDistributedCacheEntry.java  |  3 +-
 .../distributed/dht/GridDhtCacheEntry.java      |  8 ++---
 .../distributed/dht/GridDhtTxPrepareFuture.java | 12 +++----
 .../cache/distributed/near/GridNearTxLocal.java |  2 +-
 .../cache/local/GridLocalCacheEntry.java        |  3 +-
 .../cache/transactions/IgniteTxAdapter.java     |  2 +-
 .../transactions/IgniteTxLocalAdapter.java      |  6 ++--
 .../cache/transactions/IgniteTxManager.java     | 14 ++++----
 .../processors/cache/GridCacheTestEntryEx.java  |  5 ++-
 .../loadtests/hashmap/GridHashMapLoadTest.java  |  6 +++-
 12 files changed, 60 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/a50ffa7e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
index 3b636b4..50b01c8 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
@@ -540,16 +540,17 @@ public interface GridCacheEntryEx {
      *
      * @param tx Cache transaction.
      * @param timeout Timeout for lock acquisition.
+     * @param serOrder Version for serializable transactions ordering.
      * @param serReadVer Optional read entry version for optimistic 
serializable transaction.
      * @return {@code True} if lock was acquired, {@code false} otherwise.
      * @throws GridCacheEntryRemovedException If this entry is obsolete.
      * @throws GridDistributedLockCancelledException If lock has been 
cancelled.
-     * @throws IgniteCheckedException If failed.
      */
     public boolean tmLock(IgniteInternalTx tx,
         long timeout,
+        @Nullable GridCacheVersion serOrder,
         @Nullable GridCacheVersion serReadVer)
-        throws GridCacheEntryRemovedException, 
GridDistributedLockCancelledException, IgniteCheckedException;
+        throws GridCacheEntryRemovedException, 
GridDistributedLockCancelledException;
 
     /**
      * Unlocks acquired lock.

http://git-wip-us.apache.org/repos/asf/ignite/blob/a50ffa7e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java
index d7aca89..12583ad 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvcc.java
@@ -595,13 +595,19 @@ public final class GridCacheMvcc {
             serOrder
         );
 
-        if (!add0(cand)) {
-            assert serOrder != null : cand;
+        if (serOrder == null) {
+            cctx.mvcc().addLocal(cand);
 
-            return null;
+            boolean add = add0(cand);
+
+            assert add : cand;
         }
+        else {
+            if (!add0(cand))
+                return null;
 
-        cctx.mvcc().addLocal(cand);
+            cctx.mvcc().addLocal(cand);
+        }
 
         return cand;
     }
@@ -940,20 +946,22 @@ public final class GridCacheMvcc {
             }
         }
 
-        if (locs != null && !locs.isEmpty()) {
-            GridCacheMvccCandidate first = locs.getFirst();
+        if (locs != null) {
+            boolean first = true;
 
-            if (first.serializable()) {
-                if (first.owner() || !first.ready())
-                    return;
+            for (ListIterator<GridCacheMvccCandidate> it = 
locs.listIterator(); it.hasNext(); ) {
+                GridCacheMvccCandidate cand = it.next();
 
-                first.setOwner();
+                if (first && cand.serializable()) {
+                    if (cand.owner() || !cand.ready())
+                        return;
 
-                return;
-            }
+                    cand.setOwner();
 
-            for (ListIterator<GridCacheMvccCandidate> it = 
locs.listIterator(); it.hasNext(); ) {
-                GridCacheMvccCandidate cand = it.next();
+                    return;
+                }
+
+                first = false;
 
                 if (cand.owner())
                     return;

http://git-wip-us.apache.org/repos/asf/ignite/blob/a50ffa7e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedCacheEntry.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedCacheEntry.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedCacheEntry.java
index 89045ab..a138d30 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedCacheEntry.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedCacheEntry.java
@@ -745,8 +745,9 @@ public class GridDistributedCacheEntry extends 
GridCacheMapEntry {
     /** {@inheritDoc} */
     @Override public boolean tmLock(IgniteInternalTx tx,
         long timeout,
+        @Nullable GridCacheVersion serOrder,
         GridCacheVersion serReadVer)
-        throws GridCacheEntryRemovedException, 
GridDistributedLockCancelledException, IgniteCheckedException {
+        throws GridCacheEntryRemovedException, 
GridDistributedLockCancelledException {
         if (tx.local())
             // Null is returned if timeout is negative and there is other lock 
owner.
             return addLocal(

http://git-wip-us.apache.org/repos/asf/ignite/blob/a50ffa7e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheEntry.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheEntry.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheEntry.java
index 5f2a94d..1b2d834 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheEntry.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheEntry.java
@@ -172,7 +172,6 @@ public class GridDhtCacheEntry extends 
GridDistributedCacheEntry {
      * @return New candidate.
      * @throws GridCacheEntryRemovedException If entry has been removed.
      * @throws GridDistributedLockCancelledException If lock was cancelled.
-     * @throws IgniteCheckedException If failed.
      */
     @Nullable public GridCacheMvccCandidate addDhtLocal(
         UUID nearNodeId,
@@ -186,7 +185,7 @@ public class GridDhtCacheEntry extends 
GridDistributedCacheEntry {
         boolean reenter,
         boolean tx,
         boolean implicitSingle)
-        throws GridCacheEntryRemovedException, 
GridDistributedLockCancelledException, IgniteCheckedException
+        throws GridCacheEntryRemovedException, 
GridDistributedLockCancelledException
     {
         assert serReadVer == null || serOrder != null;
         assert !reenter || serOrder == null;
@@ -263,8 +262,9 @@ public class GridDhtCacheEntry extends 
GridDistributedCacheEntry {
     /** {@inheritDoc} */
     @Override public boolean tmLock(IgniteInternalTx tx,
         long timeout,
+        @Nullable GridCacheVersion serOrder,
         GridCacheVersion serReadVer)
-        throws GridCacheEntryRemovedException, 
GridDistributedLockCancelledException, IgniteCheckedException {
+        throws GridCacheEntryRemovedException, 
GridDistributedLockCancelledException {
         if (tx.local()) {
             GridDhtTxLocalAdapter dhtTx = (GridDhtTxLocalAdapter)tx;
 
@@ -275,7 +275,7 @@ public class GridDhtCacheEntry extends 
GridDistributedCacheEntry {
                 tx.topologyVersion(),
                 tx.threadId(),
                 tx.xidVersion(),
-                (tx.optimistic() && tx.serializable()) ? tx.nearXidVersion() : 
null,
+                serOrder,
                 serReadVer,
                 timeout,
                 /*reenter*/false,

http://git-wip-us.apache.org/repos/asf/ignite/blob/a50ffa7e/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 9ae4d4c..4facfb9 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
@@ -143,10 +143,10 @@ public final class GridDhtTxPrepareFuture extends 
GridCompoundFuture<IgniteInter
     private AtomicBoolean mapped = new AtomicBoolean(false);
 
     /** Prepare reads. */
-    private Collection<IgniteTxEntry> reads;
+    private Iterable<IgniteTxEntry> reads;
 
     /** Prepare writes. */
-    private Collection<IgniteTxEntry> writes;
+    private Iterable<IgniteTxEntry> writes;
 
     /** Tx nodes. */
     private Map<UUID, Collection<UUID>> txNodes;
@@ -471,7 +471,7 @@ public final class GridDhtTxPrepareFuture extends 
GridCompoundFuture<IgniteInter
 
         readyLocks(writes);
 
-        if (tx.optimistic() && tx.serializable())
+        if (tx.serializable() && tx.optimistic())
             readyLocks(reads);
 
         locksReady = true;
@@ -817,7 +817,7 @@ public final class GridDhtTxPrepareFuture extends 
GridCompoundFuture<IgniteInter
         this.writes = writes;
         this.txNodes = txNodes;
 
-        boolean ser = tx.optimistic() && tx.serializable();
+        boolean ser = tx.serializable() && tx.optimistic();
 
         if (!F.isEmpty(writes) || (ser && !F.isEmpty(reads))) {
             Map<Integer, Collection<KeyCacheObject>> forceKeys = null;
@@ -924,7 +924,7 @@ public final class GridDhtTxPrepareFuture extends 
GridCompoundFuture<IgniteInter
      * @return Not null exception if version check failed.
      * @throws IgniteCheckedException If failed.
      */
-    @Nullable private IgniteCheckedException 
checkReadConflict(Collection<IgniteTxEntry> entries)
+    @Nullable private IgniteCheckedException 
checkReadConflict(Iterable<IgniteTxEntry> entries)
         throws IgniteCheckedException {
         try {
             for (IgniteTxEntry entry : entries) {
@@ -962,7 +962,7 @@ public final class GridDhtTxPrepareFuture extends 
GridCompoundFuture<IgniteInter
      */
     private void prepare0() {
         try {
-            if (tx.optimistic() && tx.serializable()) {
+            if (tx.serializable() && tx.optimistic()) {
                 IgniteCheckedException err0;
 
                 try {

http://git-wip-us.apache.org/repos/asf/ignite/blob/a50ffa7e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
index 67fd81e..883c285 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
@@ -908,7 +908,7 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter {
         try {
             // At this point all the entries passed in must be enlisted in 
transaction because this is an
             // optimistic transaction.
-            optimisticLockEntries = optimistic() && serializable() ? 
F.concat(false, writes, reads) : writes;
+            optimisticLockEntries = (serializable() && optimistic()) ? 
F.concat(false, writes, reads) : writes;
 
             userPrepare();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/a50ffa7e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java
index 24cd2c0..85ed881 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java
@@ -206,12 +206,13 @@ public class GridLocalCacheEntry extends 
GridCacheMapEntry {
     /** {@inheritDoc} */
     @Override public boolean tmLock(IgniteInternalTx tx,
         long timeout,
+        @Nullable GridCacheVersion serOrder,
         GridCacheVersion serReadVer)
         throws GridCacheEntryRemovedException {
         GridCacheMvccCandidate cand = addLocal(
             tx.threadId(),
             tx.xidVersion(),
-            (tx.optimistic() && tx.serializable()) ? tx.nearXidVersion() : 
null,
+            serOrder,
             serReadVer,
             timeout,
             /*reenter*/false,

http://git-wip-us.apache.org/repos/asf/ignite/blob/a50ffa7e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
index c6b749a..0e2394a 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
@@ -432,7 +432,7 @@ public abstract class IgniteTxAdapter extends 
GridMetadataAwareAdapter
 
     /** {@inheritDoc} */
     @Override public Collection<IgniteTxEntry> optimisticLockEntries() {
-        if (optimistic() && serializable())
+        if (serializable() && optimistic())
             return F.concat(false, writeEntries(), readEntries());
 
         return writeEntries();

http://git-wip-us.apache.org/repos/asf/ignite/blob/a50ffa7e/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 4d3ad72..556d715 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
@@ -1361,7 +1361,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
 
         AffinityTopologyVersion topVer = topologyVersion();
 
-        boolean needReadVer = optimistic() && serializable();
+        boolean needReadVer = serializable() && optimistic();
 
         // In this loop we cover only read-committed or optimistic 
transactions.
         // Transactions that are pessimistic and not read-committed are covered
@@ -1619,7 +1619,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
         if (log.isDebugEnabled())
             log.debug("Loading missed values for missed map: " + missedMap);
 
-        final boolean needReadVer = optimistic() && serializable();
+        final boolean needReadVer = serializable() && optimistic();
 
         return new GridEmbeddedFuture<>(
             new C2<Void, Exception, Map<K, V>>() {
@@ -2058,7 +2058,7 @@ public abstract class IgniteTxLocalAdapter extends 
IgniteTxAdapter
 
         final boolean hasFilters = !F.isEmptyOrNulls(filter) && 
!F.isAlwaysTrue(filter);
         final boolean needVal = singleRmv || retval || hasFilters;
-        final boolean needReadVer = needVal && (optimistic() && 
serializable());
+        final boolean needReadVer = needVal && (serializable() && 
optimistic());
 
         try {
             // Set transform flag for transaction.

http://git-wip-us.apache.org/repos/asf/ignite/blob/a50ffa7e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
index 24ea634..c1e9202 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
@@ -996,7 +996,10 @@ public class IgniteTxManager extends 
GridCacheSharedManagerAdapter {
      * @return {@code True} if transaction read entries should be unlocked.
      */
     private boolean unlockReadEntries(IgniteInternalTx tx) {
-        return (tx.pessimistic() && !tx.readCommitted()) || (tx.optimistic() 
&& tx.serializable());
+        if (tx.pessimistic())
+            return !tx.readCommitted();
+        else
+            return tx.serializable();
     }
 
     /**
@@ -1381,6 +1384,8 @@ public class IgniteTxManager extends 
GridCacheSharedManagerAdapter {
         // we wait for the lock.
         long timeout = tx.timeout() == 0 ? 0 : remainingTime;
 
+        GridCacheVersion serOrder = (tx.serializable() && tx.optimistic()) ? 
tx.nearXidVersion() : null;
+
         for (IgniteTxEntry txEntry1 : entries) {
             // Check if this entry was prepared before.
             if (!txEntry1.markPrepared() || txEntry1.explicitVersion() != null)
@@ -1399,7 +1404,7 @@ public class IgniteTxManager extends 
GridCacheSharedManagerAdapter {
 
                     assert serReadVer == null || (tx.optimistic() && 
tx.serializable()) : txEntry1;
 
-                    if (!entry1.tmLock(tx, timeout, serReadVer)) {
+                    if (!entry1.tmLock(tx, timeout, serOrder, serReadVer)) {
                         // Unlock locks locked so far.
                         for (IgniteTxEntry txEntry2 : entries) {
                             if (txEntry2 == txEntry1)
@@ -1433,11 +1438,6 @@ public class IgniteTxManager extends 
GridCacheSharedManagerAdapter {
                         break;
                     }
                 }
-                catch (IgniteCheckedException e) {
-                    tx.setRollbackOnly();
-
-                    throw e;
-                }
                 catch (GridDistributedLockCancelledException ignore) {
                     tx.setRollbackOnly();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/a50ffa7e/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
index 84cc572..abb2767 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
@@ -575,7 +575,10 @@ public class GridCacheTestEntryEx extends 
GridMetadataAwareAdapter implements Gr
     }
 
     /** @inheritDoc */
-    @Override public boolean tmLock(IgniteInternalTx tx, long timeout, 
GridCacheVersion serReadVer) {
+    @Override public boolean tmLock(IgniteInternalTx tx,
+        long timeout,
+        @Nullable GridCacheVersion serOrder,
+        GridCacheVersion serReadVer) {
         assert false; return false;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/a50ffa7e/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridHashMapLoadTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridHashMapLoadTest.java
 
b/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridHashMapLoadTest.java
index bbff5a8..a6dfc9c 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridHashMapLoadTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridHashMapLoadTest.java
@@ -26,6 +26,7 @@ import 
org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 import org.apache.ignite.testframework.junits.GridTestKernalContext;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.apache.ignite.testframework.junits.logger.GridTestLog4jLogger;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * Tests hashmap load.
@@ -81,7 +82,10 @@ public class GridHashMapLoadTest extends 
GridCommonAbstractTest {
 
             map.put(key, new GridCacheMapEntry(ctx, ctx.toCacheKeyObject(key),
                 key.hashCode(), ctx.toCacheObject(val), null, 1) {
-                @Override public boolean tmLock(IgniteInternalTx tx, long 
timeout, GridCacheVersion serReadVer) {
+                @Override public boolean tmLock(IgniteInternalTx tx,
+                    long timeout,
+                    @Nullable GridCacheVersion serOrder,
+                    GridCacheVersion serReadVer) {
                     return false;
                 }
 

Reply via email to