Repository: ignite Updated Branches: refs/heads/ignite-1607-read b1d07144f -> dab9f23c7
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/dab9f23c Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/dab9f23c Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/dab9f23c Branch: refs/heads/ignite-1607-read Commit: dab9f23c76850b7f746438618509373d85ce72bf Parents: b1d0714 Author: sboikov <[email protected]> Authored: Mon Oct 12 15:06:19 2015 +0300 Committer: sboikov <[email protected]> Committed: Mon Oct 12 15:06:19 2015 +0300 ---------------------------------------------------------------------- .../processors/cache/local/GridLocalCacheEntry.java | 11 +++++++++++ .../processors/cache/local/GridLocalLockFuture.java | 1 + 2 files changed, 12 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/dab9f23c/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 383ba69..fcc6abe 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 @@ -25,6 +25,7 @@ import org.apache.ignite.internal.processors.cache.GridCacheMvcc; import org.apache.ignite.internal.processors.cache.GridCacheMvccCandidate; import org.apache.ignite.internal.processors.cache.KeyCacheObject; 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.version.GridCacheVersion; import org.jetbrains.annotations.Nullable; @@ -67,6 +68,7 @@ public class GridLocalCacheEntry extends GridCacheMapEntry { * * @param threadId Owning thread ID. * @param ver Lock version. + * @param serReadVer Optional read entry version for optimistic serializable transaction. * @param timeout Timeout to acquire lock. * @param reenter Reentry flag. * @param tx Transaction flag. @@ -77,6 +79,7 @@ public class GridLocalCacheEntry extends GridCacheMapEntry { @Nullable public GridCacheMvccCandidate addLocal( long threadId, GridCacheVersion ver, + @Nullable GridCacheVersion serReadVer, long timeout, boolean reenter, boolean tx, @@ -91,6 +94,13 @@ public class GridLocalCacheEntry extends GridCacheMapEntry { synchronized (this) { checkObsolete(); + if (serReadVer != null) { + if (!serReadVer.equals(this.ver)) { + if (!((isNew() || deleted()) && serReadVer.equals(IgniteTxEntry.READ_NEW_ENTRY_VER))) + return null; + } + } + GridCacheMvcc mvcc = mvccExtras(); if (mvcc == null) { @@ -196,6 +206,7 @@ public class GridLocalCacheEntry extends GridCacheMapEntry { GridCacheMvccCandidate cand = addLocal( tx.threadId(), tx.xidVersion(), + serReadVer, timeout, /*reenter*/false, /*tx*/true, http://git-wip-us.apache.org/repos/asf/ignite/blob/dab9f23c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java index 7018c4e..b865255 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java @@ -225,6 +225,7 @@ public final class GridLocalLockFuture<K, V> extends GridFutureAdapter<Boolean> GridCacheMvccCandidate c = entry.addLocal( threadId, lockVer, + null, timeout, !inTx(), inTx(),
