You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/10/13 09:05:41 UTC

[08/21] ignite git commit: ignite-1607 WIP

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/7572810f
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/7572810f
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/7572810f

Branch: refs/heads/ignite-1607
Commit: 7572810fe78d026932e8c7a5d6767ffb297c84d4
Parents: fdd6f1c
Author: sboikov <sb...@gridgain.com>
Authored: Thu Oct 8 14:52:48 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Oct 8 15:21:01 2015 +0300

----------------------------------------------------------------------
 .../transactions/IgniteTxLocalAdapter.java      | 59 ++++++++++++--------
 .../CacheSerializableTransactionsTest.java      | 43 ++++++++++++++
 2 files changed, 80 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/7572810f/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 99b4c45..fb82ef6 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
@@ -442,7 +442,13 @@ public abstract class IgniteTxLocalAdapter extends IgniteTxAdapter
 
             for (KeyCacheObject key : keys) {
                 while (true) {
-                    GridCacheEntryEx entry = cacheCtx.cache().entryEx(key);
+                    IgniteTxEntry txEntry = entry(cacheCtx.txKey(key));
+
+                    GridCacheEntryEx entry = txEntry == null ? cacheCtx.cache().entryEx(key) :
+                        txEntry.cached();
+
+                    if (entry == null)
+                        continue;
 
                     try {
                         T2<CacheObject, GridCacheVersion> res = entry.innerGetVersioned(this,
@@ -469,6 +475,9 @@ public abstract class IgniteTxLocalAdapter extends IgniteTxAdapter
                     catch (GridCacheEntryRemovedException ignore) {
                         if (log.isDebugEnabled())
                             log.debug("Got removed entry, will retry: " + key);
+
+                        if (txEntry != null)
+                            txEntry.cached(cacheCtx.cache().entryEx(key));
                     }
                 }
             }
@@ -484,36 +493,42 @@ public abstract class IgniteTxLocalAdapter extends IgniteTxAdapter
 
                         assert ver != null : key;
 
-                        c.apply(key, val, ver);
+                        if (val != null) {
+                            if (nextVer == null)
+                                nextVer = cacheCtx.versions().next();
 
-                        if (nextVer == null)
-                            nextVer = cacheCtx.versions().next();
+                            CacheObject cacheVal = cacheCtx.toCacheObject(val);
 
-                        CacheObject cacheVal = cacheCtx.toCacheObject(val);
+                            while (true) {
+                                GridCacheEntryEx entry = cacheCtx.cache().entryEx(key);
 
-                        while (true) {
-                            GridCacheEntryEx entry = cacheCtx.cache().entryEx(key);
+                                try {
+                                    boolean set = entry.versionedValue(cacheVal, ver, nextVer);
 
-                            try {
-                                boolean set = entry.versionedValue(cacheVal, ver, nextVer);
+                                    if (set)
+                                        ver = nextVer;
 
-                                if (log.isDebugEnabled())
-                                    log.debug("Set value loaded from store into entry [set=" + set +
-                                        ", curVer=" + ver + ", newVer=" + nextVer + ", " +
-                                        "entry=" + entry + ']');
+                                    if (log.isDebugEnabled())
+                                        log.debug("Set value loaded from store into entry [set=" + set +
+                                            ", curVer=" + ver + ", newVer=" + nextVer + ", " +
+                                            "entry=" + entry + ']');
 
-                                break;
-                            }
-                            catch (GridCacheEntryRemovedException ignore) {
-                                if (log.isDebugEnabled())
-                                    log.debug("Got removed entry, (will retry): " + entry);
-                            }
-                            catch (IgniteCheckedException e) {
-                                // Wrap errors (will be unwrapped).
-                                throw new GridClosureException(e);
+                                    break;
+                                }
+                                catch (GridCacheEntryRemovedException ignore) {
+                                    if (log.isDebugEnabled())
+                                        log.debug("Got removed entry, (will retry): " + entry);
+                                }
+                                catch (IgniteCheckedException e) {
+                                    // Wrap errors (will be unwrapped).
+                                    throw new GridClosureException(e);
+                                }
                             }
                         }
+                        else
+                            ver = IgniteTxEntry.READ_NEW_ENTRY_VER;
 
+                        c.apply(key, val, ver);
                     }
                 });
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7572810f/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheSerializableTransactionsTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheSerializableTransactionsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheSerializableTransactionsTest.java
index a620ee5..8ecd045 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheSerializableTransactionsTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheSerializableTransactionsTest.java
@@ -130,6 +130,49 @@ public class CacheSerializableTransactionsTest extends GridCommonAbstractTest {
     /**
      * @throws Exception If failed.
      */
+    public void testTxLoadFromStore() throws Exception {
+        Ignite ignite0 = ignite(0);
+
+        final IgniteTransactions txs = ignite0.transactions();
+
+        for (CacheConfiguration<Integer, Integer> ccfg : cacheConfigurations()) {
+            if (ccfg.getCacheStoreFactory() == null)
+                continue;
+
+            logCacheInfo(ccfg);
+
+            try {
+                IgniteCache<Integer, Integer> cache = ignite0.createCache(ccfg);
+
+                List<Integer> keys = testKeys(cache);
+
+                for (Integer key : keys) {
+                    log.info("Test key: " + key);
+
+                    Integer storeVal = -1;
+
+                    storeMap.put(key, storeVal);
+
+                    try (Transaction tx = txs.txStart(OPTIMISTIC, SERIALIZABLE)) {
+                        Integer val = cache.get(key);
+
+                        assertEquals(storeVal, val);
+
+                        tx.commit();
+                    }
+
+                    checkValue(key, storeVal, cache.getName());
+                }
+            }
+            finally {
+                destroyCache(ignite0, ccfg.getName());
+            }
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
     public void testTxCommitReadOnly1() throws Exception {
         Ignite ignite0 = ignite(0);