ignite-sql-tests - swap fix

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

Branch: refs/heads/ignite-45
Commit: 0cced36e2da0464a84a4c2ffd177c14f900e936f
Parents: 0b1c0d7
Author: S.Vladykin <svlady...@gridgain.com>
Authored: Fri Mar 13 20:00:48 2015 +0300
Committer: S.Vladykin <svlady...@gridgain.com>
Committed: Fri Mar 13 20:00:48 2015 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCacheSwapListener.java |  5 +++-
 .../processors/cache/GridCacheSwapManager.java  | 29 ++++++++++++++------
 .../spi/swapspace/file/FileSwapSpaceSpi.java    | 10 +++++--
 .../processors/query/h2/IgniteH2Indexing.java   | 10 ++++++-
 4 files changed, 42 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cced36e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapListener.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapListener.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapListener.java
index ff5ad32..811b951f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapListener.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapListener.java
@@ -17,6 +17,8 @@
 
 package org.apache.ignite.internal.processors.cache;
 
+import org.apache.ignite.*;
+
 /**
  * Provides ability to listen to swap events in cache which is necessary for 
preloading.
  */
@@ -25,6 +27,7 @@ public interface GridCacheSwapListener {
      * @param part Partition.
      * @param key Cache key.
      * @param e Entry.
+     * @throws IgniteCheckedException If failed.
      */
-    public void onEntryUnswapped(int part, KeyCacheObject key, 
GridCacheSwapEntry e);
+    public void onEntryUnswapped(int part, KeyCacheObject key, 
GridCacheSwapEntry e) throws IgniteCheckedException;
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cced36e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
index d6aef65..ca29f89 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java
@@ -226,8 +226,9 @@ public class GridCacheSwapManager extends 
GridCacheManagerAdapter {
      * @param part Partition.
      * @param key Cache key.
      * @param e Entry.
+     * @throws IgniteCheckedException If failed.
      */
-    private void onUnswapped(int part, KeyCacheObject key, GridCacheSwapEntry 
e) {
+    private void onUnswapped(int part, KeyCacheObject key, GridCacheSwapEntry 
e) throws IgniteCheckedException {
         onEntryUnswapped(swapLsnrs, part, key, e);
     }
 
@@ -235,8 +236,9 @@ public class GridCacheSwapManager extends 
GridCacheManagerAdapter {
      * @param part Partition.
      * @param key Cache key.
      * @param e Entry.
+     * @throws IgniteCheckedException If failed.
      */
-    private void onOffHeaped(int part, KeyCacheObject key, GridCacheSwapEntry 
e) {
+    private void onOffHeaped(int part, KeyCacheObject key, GridCacheSwapEntry 
e) throws IgniteCheckedException {
         onEntryUnswapped(offheapLsnrs, part, key, e);
     }
 
@@ -245,9 +247,10 @@ public class GridCacheSwapManager extends 
GridCacheManagerAdapter {
      * @param part Partition.
      * @param key Cache key.
      * @param e Entry.
+     * @throws IgniteCheckedException If failed.
      */
     private void onEntryUnswapped(ConcurrentMap<Integer, 
Collection<GridCacheSwapListener>> map,
-        int part, KeyCacheObject key, GridCacheSwapEntry e) {
+        int part, KeyCacheObject key, GridCacheSwapEntry e) throws 
IgniteCheckedException {
         Collection<GridCacheSwapListener> lsnrs = map.get(part);
 
         if (lsnrs == null) {
@@ -391,7 +394,7 @@ public class GridCacheSwapManager extends 
GridCacheManagerAdapter {
      * @return Reconstituted swap entry or {@code null} if entry is obsolete.
      * @throws IgniteCheckedException If failed.
      */
-    @Nullable private GridCacheSwapEntry swapEntry(GridCacheSwapEntry e) 
throws IgniteCheckedException
+    @Nullable private <X extends GridCacheSwapEntry> X swapEntry(X e) throws 
IgniteCheckedException
     {
         assert e != null;
 
@@ -1849,7 +1852,7 @@ public class GridCacheSwapManager extends 
GridCacheManagerAdapter {
     /**
      *
      */
-    private static class KeySwapListener implements GridCacheSwapListener {
+    private class KeySwapListener implements GridCacheSwapListener {
         /** */
         private final KeyCacheObject key;
 
@@ -1866,16 +1869,26 @@ public class GridCacheSwapManager extends 
GridCacheManagerAdapter {
         /** {@inheritDoc} */
         @Override public void onEntryUnswapped(int part,
             KeyCacheObject key,
-            GridCacheSwapEntry e)
-        {
+            GridCacheSwapEntry e) throws IgniteCheckedException {
             if (this.key.equals(key)) {
-                entry = new 
GridCacheSwapEntryImpl(ByteBuffer.wrap(e.valueBytes()),
+                GridCacheSwapEntryImpl e0 = new 
GridCacheSwapEntryImpl(ByteBuffer.wrap(e.valueBytes()),
                     e.type(),
                     e.version(),
                     e.ttl(),
                     e.expireTime(),
                     e.keyClassLoaderId(),
                     e.valueClassLoaderId());
+
+                CacheObject v = e.value();
+
+                if (v != null)
+                    e0.value(v);
+                else
+                    e0 = swapEntry(e0);
+
+                assert e0 != null;
+
+                entry = e0;
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cced36e/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java
 
b/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java
index 5eec025..858db79 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java
@@ -718,8 +718,14 @@ public class FileSwapSpaceSpi extends IgniteSpiAdapter 
implements SwapSpaceSpi,
             try {
                 res = ch.read(ByteBuffer.wrap(v), pos);
             }
-            catch (ClosedChannelException ignore) {
-                assert idx == DELETED;
+            catch (ClosedByInterruptException e) {
+                throw new IgniteSpiException("Operation was interrupted.", e);
+            }
+            catch (AsynchronousCloseException ignore) {
+                assert idx == DELETED; // We closed it ourselves.
+            }
+            catch (ClosedChannelException e) {
+                throw new IgniteSpiException("File channel was unexpectedly 
closed.", e);
             }
             catch (IOException e) {
                 throw new IgniteSpiException("Failed to read value.", e);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0cced36e/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
index 0892a6f..c3a3da3 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
@@ -24,6 +24,7 @@ import org.apache.ignite.cache.query.annotations.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.internal.*;
 import org.apache.ignite.internal.processors.cache.*;
+import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.query.*;
 import org.apache.ignite.internal.processors.query.*;
 import org.apache.ignite.internal.processors.query.h2.opt.*;
@@ -1912,7 +1913,14 @@ public class IgniteH2Indexing implements 
GridQueryIndexing {
 
             GridCacheSwapEntry e = 
cctx.swap().read(cctx.toCacheKeyObject(key), true, true);
 
-            return e != null ? e.value().value(cctx.cacheObjectContext(), 
false) : null;
+            if (e == null)
+                return null;
+
+            CacheObject v = e.value();
+
+            assert v != null : "swap must unmarshall it for us";
+
+            return v.value(cctx.cacheObjectContext(), false);
         }
 
         /** {@inheritDoc} */

Reply via email to