You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by iv...@apache.org on 2015/07/21 13:24:55 UTC

[01/29] incubator-ignite git commit: # IGNITE-1131 Handle non-file codebase URI.

Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-961 72b91c180 -> 4699dd884


# IGNITE-1131 Handle non-file codebase URI.


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

Branch: refs/heads/ignite-961
Commit: a6b8764e8b8b7f8bb0779106cd89de131e64aeb6
Parents: f0d24f6
Author: sevdokimov <se...@jetbrains.com>
Authored: Fri Jul 17 14:32:11 2015 +0300
Committer: sevdokimov <se...@jetbrains.com>
Committed: Fri Jul 17 14:32:11 2015 +0300

----------------------------------------------------------------------
 .../ignite/internal/util/IgniteUtils.java       | 21 +++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a6b8764e/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index 66eb596..2d5887c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -3134,7 +3134,7 @@ public abstract class IgniteUtils {
                 return ggHome0;
         }
 
-        URI uri;
+        URI classesUri;
 
         Class<IgniteUtils> cls = IgniteUtils.class;
 
@@ -3149,11 +3149,11 @@ public abstract class IgniteUtils {
             }
 
             // Resolve path to class-file.
-            uri = domain.getCodeSource().getLocation().toURI();
+            classesUri = domain.getCodeSource().getLocation().toURI();
 
             // Overcome UNC path problem on Windows (http://www.tomergabel.com/JavaMishandlesUNCPathsOnWindows.aspx)
-            if (isWindows() && uri.getAuthority() != null)
-                uri = new URI(uri.toString().replace("file://", "file:/"));
+            if (isWindows() && classesUri.getAuthority() != null)
+                classesUri = new URI(classesUri.toString().replace("file://", "file:/"));
         }
         catch (URISyntaxException | SecurityException e) {
             logResolveFailed(cls, e);
@@ -3161,7 +3161,18 @@ public abstract class IgniteUtils {
             return null;
         }
 
-        return findProjectHome(new File(uri));
+        File classesFile;
+
+        try {
+            classesFile = new File(classesUri);
+        }
+        catch (IllegalArgumentException e) {
+            logResolveFailed(cls, e);
+
+            return null;
+        }
+
+        return findProjectHome(classesFile);
     }
 
     /**


[26/29] incubator-ignite git commit: Merge remote-tracking branch 'remotes/origin/ignite-1131'

Posted by iv...@apache.org.
Merge remote-tracking branch 'remotes/origin/ignite-1131'


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

Branch: refs/heads/ignite-961
Commit: 83bba05ca976377210f09b2a6eb6b590355ae028
Parents: 9aa928c a6b8764
Author: sevdokimov <se...@jetbrains.com>
Authored: Tue Jul 21 12:59:45 2015 +0300
Committer: sevdokimov <se...@jetbrains.com>
Committed: Tue Jul 21 12:59:45 2015 +0300

----------------------------------------------------------------------
 .../ignite/internal/util/IgniteUtils.java       | 21 +++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/83bba05c/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
----------------------------------------------------------------------


[22/29] incubator-ignite git commit: # ignite-1134 avoid hang on nio session send after nio server stop

Posted by iv...@apache.org.
# ignite-1134 avoid hang on nio session send after nio server stop


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

Branch: refs/heads/ignite-961
Commit: 79712aa2ee30ccff6d7e30e7ed13707d6bad40bf
Parents: f62744e
Author: sboikov <sb...@gridgain.com>
Authored: Tue Jul 21 10:45:39 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Tue Jul 21 10:45:39 2015 +0300

----------------------------------------------------------------------
 .../distributed/dht/GridDhtTxPrepareFuture.java |  7 +-
 .../ignite/internal/util/nio/GridNioServer.java |  9 ++
 .../util/nio/GridSelectorNioSessionImpl.java    |  8 ++
 .../internal/util/nio/GridNioSelfTest.java      | 88 ++++++++++++++++++--
 .../internal/util/nio/GridNioSslSelfTest.java   | 16 ++--
 5 files changed, 107 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/79712aa2/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 6efa4d8..fbc8c84 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
@@ -880,7 +880,8 @@ public final class GridDhtTxPrepareFuture extends GridCompoundFuture<IgniteInter
                         fut.onNodeLeft(e);
                     }
                     catch (IgniteCheckedException e) {
-                        fut.onResult(e);
+                        if (!cctx.kernalContext().isStopping())
+                            fut.onResult(e);
                     }
                 }
 
@@ -927,7 +928,6 @@ public final class GridDhtTxPrepareFuture extends GridCompoundFuture<IgniteInter
 
                         assert req.transactionNodes() != null;
 
-                        //noinspection TryWithIdenticalCatches
                         try {
                             cctx.io().send(nearMapping.node(), req, tx.system() ? UTILITY_CACHE_POOL : SYSTEM_POOL);
                         }
@@ -935,7 +935,8 @@ public final class GridDhtTxPrepareFuture extends GridCompoundFuture<IgniteInter
                             fut.onNodeLeft(e);
                         }
                         catch (IgniteCheckedException e) {
-                            fut.onResult(e);
+                            if (!cctx.kernalContext().isStopping())
+                                fut.onResult(e);
                         }
                     }
                 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/79712aa2/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
index 24e1e08..b36f9f5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
@@ -311,6 +311,9 @@ public class GridNioServer<T> {
             U.join(clientWorkers, log);
 
             filterChain.stop();
+
+            for (GridSelectorNioSessionImpl ses : sessions)
+                ses.onServerStopped();
         }
     }
 
@@ -1496,6 +1499,9 @@ public class GridNioServer<T> {
 
                     req.onDone(e);
                 }
+
+                if (closed)
+                    ses.onServerStopped();
             }
             catch (ClosedChannelException e) {
                 U.warn(log, "Failed to register accepted socket channel to selector (channel was closed): "
@@ -1525,6 +1531,9 @@ public class GridNioServer<T> {
 
             sessions.remove(ses);
 
+            if (closed)
+                ses.onServerStopped();
+
             SelectionKey key = ses.key();
 
             // Shutdown input and output so that remote client will see correct socket close.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/79712aa2/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
index cf240ca..458786b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
@@ -290,6 +290,14 @@ class GridSelectorNioSessionImpl extends GridNioSessionImpl {
             return super.addMeta(key, val);
     }
 
+    /**
+     *
+     */
+    void onServerStopped() {
+        if (sem != null)
+            sem.release(1_000_000);
+    }
+
     /** {@inheritDoc} */
     @Override public String toString() {
         return S.toString(GridSelectorNioSessionImpl.class, this, super.toString());

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/79712aa2/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSelfTest.java
index c81ed56..fa8d4a0 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSelfTest.java
@@ -393,6 +393,62 @@ public class GridNioSelfTest extends GridCommonAbstractTest {
     }
 
     /**
+     * @throws Exception If failed.
+     */
+    public void testSendAfterServerStop() throws Exception {
+        final AtomicReference<GridNioSession> sesRef = new AtomicReference<>();
+
+        final CountDownLatch connectLatch = new CountDownLatch(1);
+
+        GridNioServerListener lsnr = new GridNioServerListenerAdapter() {
+            @Override public void onConnected(GridNioSession ses) {
+                info("On connected: " + ses);
+
+                sesRef.set(ses);
+
+                connectLatch.countDown();
+            }
+
+            @Override public void onDisconnected(GridNioSession ses, @Nullable Exception e) {
+            }
+
+            @Override public void onMessage(GridNioSession ses, Object msg) {
+                log.info("Message: " + msg);
+            }
+        };
+
+        GridNioServer.Builder<?> builder = serverBuilder(PORT, new GridPlainParser(), lsnr);
+
+        GridNioServer<?> srvr = builder.sendQueueLimit(5).build();
+
+        srvr.start();
+
+        try {
+            Socket s = createSocket();
+
+            s.connect(new InetSocketAddress(U.getLocalHost(), PORT), 1000);
+
+            s.getOutputStream().write(new byte[1]);
+
+            U.await(connectLatch);
+
+            GridNioSession ses = sesRef.get();
+
+            assertNotNull(ses);
+
+            ses.send(new byte[1]);
+
+            srvr.stop();
+
+            for (int i = 0; i < 10; i++)
+                ses.send(new byte[1]);
+        }
+        finally {
+            srvr.stop();
+        }
+    }
+
+    /**
      * Sends message and validates reply.
      *
      * @param msg Message to send.
@@ -480,10 +536,29 @@ public class GridNioSelfTest extends GridCommonAbstractTest {
      * @return Started server.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
-    protected GridNioServer<?> startServer(int port, GridNioParser parser, GridNioServerListener lsnr)
+    protected final GridNioServer<?> startServer(int port, GridNioParser parser, GridNioServerListener lsnr)
         throws Exception {
-        GridNioServer<?> srvr = GridNioServer.builder()
+        GridNioServer<?> srvr = serverBuilder(port, parser, lsnr).build();
+
+        srvr.start();
+
+        return srvr;
+    }
+
+    /**
+     * @param port Port to listen.
+     * @param parser Parser to use.
+     * @param lsnr Listener.
+     * @return Server builder.
+     * @throws Exception If failed.
+     */
+    @SuppressWarnings("unchecked")
+    protected GridNioServer.Builder<?> serverBuilder(int port,
+        GridNioParser parser,
+        GridNioServerListener lsnr)
+        throws Exception
+    {
+        return GridNioServer.builder()
             .address(U.getLocalHost())
             .port(port)
             .listener(lsnr)
@@ -496,12 +571,7 @@ public class GridNioSelfTest extends GridCommonAbstractTest {
             .socketSendBufferSize(0)
             .socketReceiveBufferSize(0)
             .sendQueueLimit(0)
-            .filters(new GridNioCodecFilter(parser, log, false))
-            .build();
-
-        srvr.start();
-
-        return srvr;
+            .filters(new GridNioCodecFilter(parser, log, false));
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/79712aa2/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSslSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSslSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSslSelfTest.java
index 930b5d1..73f5ba5 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSslSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/util/nio/GridNioSslSelfTest.java
@@ -52,9 +52,12 @@ public class GridNioSslSelfTest extends GridNioSelfTest {
 
     /** {@inheritDoc} */
     @SuppressWarnings("unchecked")
-    @Override protected GridNioServer<?> startServer(int port, GridNioParser parser, GridNioServerListener lsnr)
-        throws Exception {
-        GridNioServer<?> srvr = GridNioServer.builder()
+    @Override protected GridNioServer.Builder<?> serverBuilder(int port,
+        GridNioParser parser,
+        GridNioServerListener lsnr)
+        throws Exception
+    {
+        return GridNioServer.builder()
             .address(U.getLocalHost())
             .port(port)
             .listener(lsnr)
@@ -69,12 +72,7 @@ public class GridNioSslSelfTest extends GridNioSelfTest {
             .sendQueueLimit(0)
             .filters(
                 new GridNioCodecFilter(parser, log, false),
-                new GridNioSslFilter(sslCtx, log))
-            .build();
-
-        srvr.start();
-
-        return srvr;
+                new GridNioSslFilter(sslCtx, log));
     }
 
     /** {@inheritDoc} */


[05/29] incubator-ignite git commit: minor

Posted by iv...@apache.org.
minor


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

Branch: refs/heads/ignite-961
Commit: 05672fedcf2ddd2adba764d7cb2ae75e8d607a3a
Parents: d8f86f1
Author: Yakov Zhdanov <yz...@gridgain.com>
Authored: Mon Jul 20 11:51:49 2015 +0300
Committer: Yakov Zhdanov <yz...@gridgain.com>
Committed: Mon Jul 20 11:51:49 2015 +0300

----------------------------------------------------------------------
 .../apache/ignite/internal/processors/cache/GridCacheAdapter.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/05672fed/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
index d2a730a..7a5a0aa 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
@@ -1627,7 +1627,7 @@ public abstract class GridCacheAdapter<K, V> implements IgniteInternalCache<K, V
     ) {
         ctx.checkSecurity(SecurityPermission.CACHE_READ);
 
-       if (keyCheck)
+        if (keyCheck)
             validateCacheKeys(keys);
 
         return getAllAsync0(ctx.cacheKeysView(keys),


[18/29] incubator-ignite git commit: #master: fix affinityCall tests.

Posted by iv...@apache.org.
#master: fix affinityCall tests.


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

Branch: refs/heads/ignite-961
Commit: 7ae5ce63fa09da0f3b9c25f77090f8091c6455a5
Parents: 3194415
Author: ivasilinets <iv...@gridgain.com>
Authored: Mon Jul 20 18:25:35 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Mon Jul 20 18:25:35 2015 +0300

----------------------------------------------------------------------
 .../processors/cache/CacheAffinityCallSelfTest.java     | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7ae5ce63/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAffinityCallSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAffinityCallSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAffinityCallSelfTest.java
index c4436ca..90160e1 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAffinityCallSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAffinityCallSelfTest.java
@@ -45,7 +45,7 @@ public class CacheAffinityCallSelfTest extends GridCommonAbstractTest {
     private static final String CACHE_NAME = "myCache";
 
     /** */
-    private static final int MAX_FAILOVER_ATTEMPTS = 5;
+    private static final int MAX_FAILOVER_ATTEMPTS = 105;
 
     /** */
     private static final int SERVERS_COUNT = 4;
@@ -81,7 +81,7 @@ public class CacheAffinityCallSelfTest extends GridCommonAbstractTest {
     }
 
     /** {@inheritDoc} */
-    @Override protected void afterTest() throws Exception {
+    @Override protected void afterTestsStopped() throws Exception {
         stopAllGrids();
     }
 
@@ -138,10 +138,16 @@ public class CacheAffinityCallSelfTest extends GridCommonAbstractTest {
             assertTrue(e.getMessage().contains("Topology projection is empty"));
         }
         catch(IgniteException e) {
-            assertTrue(e.getMessage().contains("cache (or node) is stopping"));
+            assertTrue(e.getMessage().contains("Client node disconnected") ||
+                e.getMessage().contains("Failed to reconnect to cluster") ||
+                e.getMessage().contains("Failed to execute task, client node disconnected."));
         }
 
+        startGrid(0);
+
         stopGrid(SERVERS_COUNT);
+
+        stopGrid(0);
     }
 
     /**


[13/29] incubator-ignite git commit: # master fixed test

Posted by iv...@apache.org.
# master fixed test


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

Branch: refs/heads/ignite-961
Commit: d623d7e4913998b29a3ba91e78e8409cd1d89d46
Parents: cf08181
Author: sboikov <sb...@gridgain.com>
Authored: Mon Jul 20 14:42:52 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Mon Jul 20 14:42:52 2015 +0300

----------------------------------------------------------------------
 .../ignite/internal/IgniteClientReconnectFailoverTest.java     | 6 ++++++
 1 file changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d623d7e4/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectFailoverTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectFailoverTest.java b/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectFailoverTest.java
index b7de3eb..ab0e726 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectFailoverTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectFailoverTest.java
@@ -148,6 +148,12 @@ public class IgniteClientReconnectFailoverTest extends IgniteClientReconnectFail
 
                     assertEquals(map, res);
                 }
+                catch (IgniteClientDisconnectedException e) {
+                    throw e;
+                }
+                catch (IgniteException e) {
+                    log.info("Ignore error: " + e);
+                }
                 catch (CacheException e) {
                     if (e.getCause() instanceof IgniteClientDisconnectedException)
                         throw e;


[02/29] incubator-ignite git commit: #ignite-961-master: add rest commands.

Posted by iv...@apache.org.
#ignite-961-master: add rest commands.


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

Branch: refs/heads/ignite-961
Commit: 952ac7246add47ea315a8dafe7ae06d1d46c63ff
Parents: f557728
Author: ivasilinets <iv...@gridgain.com>
Authored: Mon Jul 20 11:21:57 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Mon Jul 20 11:21:57 2015 +0300

----------------------------------------------------------------------
 .../rest/AbstractRestProcessorSelfTest.java     |   1 +
 .../JettyRestProcessorAbstractSelfTest.java     | 458 +++++++++++++++++++
 .../processors/cache/GridCacheAdapter.java      |   2 +-
 .../processors/rest/GridRestCommand.java        |  53 ++-
 .../processors/rest/GridRestProcessor.java      |  14 +
 .../handlers/cache/GridCacheCommandHandler.java | 415 ++++++++++++++++-
 .../rest/handlers/query/CacheQueryResult.java   | 101 ++++
 .../handlers/query/QueryCommandHandler.java     | 291 ++++++++++++
 .../version/GridVersionCommandHandler.java      |  14 +-
 .../rest/request/RestSqlQueryRequest.java       | 125 +++++
 .../http/jetty/GridJettyRestHandler.java        |  68 ++-
 11 files changed, 1509 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/952ac724/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/AbstractRestProcessorSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/AbstractRestProcessorSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/AbstractRestProcessorSelfTest.java
index 4f1969f..8310b0f 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/AbstractRestProcessorSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/AbstractRestProcessorSelfTest.java
@@ -84,6 +84,7 @@ abstract class AbstractRestProcessorSelfTest extends GridCommonAbstractTest {
         CacheConfiguration ccfg = defaultCacheConfiguration();
 
         ccfg.setStatisticsEnabled(true);
+        ccfg.setIndexedTypes(String.class, String.class);
 
         cfg.setCacheConfiguration(ccfg);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/952ac724/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
index d5a3cc1..c6c8195 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
@@ -17,12 +17,20 @@
 
 package org.apache.ignite.internal.processors.rest;
 
+import net.sf.json.*;
+import org.apache.ignite.*;
 import org.apache.ignite.cache.*;
+import org.apache.ignite.cache.query.*;
+import org.apache.ignite.cache.query.annotations.*;
+import org.apache.ignite.configuration.*;
+import org.apache.ignite.internal.processors.rest.handlers.*;
 import org.apache.ignite.internal.util.typedef.*;
+import org.apache.ignite.testframework.*;
 
 import java.io.*;
 import java.net.*;
 import java.util.*;
+import java.util.concurrent.*;
 import java.util.regex.*;
 
 import static org.apache.ignite.IgniteSystemProperties.*;
@@ -40,6 +48,8 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
         System.setProperty(IGNITE_JETTY_PORT, Integer.toString(restPort()));
 
         super.beforeTestsStarted();
+
+        initCache();
     }
 
     /** {@inheritDoc} */
@@ -50,6 +60,11 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
     }
 
     /** {@inheritDoc} */
+    @Override protected void beforeTest() throws Exception {
+        grid(0).cache(null).clear();
+    }
+
+    /** {@inheritDoc} */
     @Override protected int gridCount() {
         return GRID_CNT;
     }
@@ -115,6 +130,18 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
     }
 
     /**
+     * @param err Error.
+     * @return Regex pattern for JSON.
+     */
+    private String errorPattern(String err) {
+        return "\\{" +
+            "\\\"error\\\":\\\"" + err + "\\\"\\," +
+            "\\\"response\\\":null\\," +
+            "\\\"sessionToken\\\":\\\"\\\"," +
+            "\\\"successStatus\\\":" + 1 + "\\}";
+    }
+
+    /**
      * @param res Response.
      * @param success Success flag.
      * @return Regex pattern for JSON.
@@ -144,6 +171,19 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
      * @param success Success flag.
      * @return Regex pattern for JSON.
      */
+    private String cacheBulkPattern(int res, boolean success) {
+        return "\\{\\\"affinityNodeId\\\":\\\"\\\"\\," +
+            "\\\"error\\\":\\\"\\\"\\," +
+            "\\\"response\\\":" + res + "\\," +
+            "\\\"sessionToken\\\":\\\"\\\"," +
+            "\\\"successStatus\\\":" + (success ? 0 : 1) + "\\}";
+    }
+
+    /**
+     * @param res Response.
+     * @param success Success flag.
+     * @return Regex pattern for JSON.
+     */
     private String cachePattern(boolean res, boolean success) {
         return "\\{\\\"affinityNodeId\\\":\\\"\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}\\\"\\," +
             "\\\"error\\\":\\\"\\\"\\," +
@@ -221,6 +261,59 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
     /**
      * @throws Exception If failed.
      */
+    public void testCacheSize() throws Exception {
+        jcache().removeAll();
+
+        jcache().put("getKey", "getVal");
+
+        String ret = content(F.asMap("cmd", "cachesize"));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        info("Size command result: " + ret);
+
+        jsonEquals(ret, cacheBulkPattern(1, true));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testIgniteName() throws Exception {
+        String ret = content(F.asMap("cmd", "name"));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        info("Name command result: " + ret);
+
+        jsonEquals(ret, stringPattern(getTestGridName(0), true));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testGetOrCreateCache() throws Exception {
+        String ret = content(F.asMap("cmd", "getorcreatecache", "cacheName", "testCache"));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        info("Name command result: " + ret);
+
+        grid(0).cache("testCache").put("1", "1");
+
+        ret = content(F.asMap("cmd", "destroycache", "cacheName", "testCache"));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        assertNull(grid(0).cache("testCache"));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
     public void testGetAll() throws Exception {
         jcache().put("getKey1", "getVal1");
         jcache().put("getKey2", "getVal2");
@@ -241,6 +334,174 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
     /**
      * @throws Exception If failed.
      */
+    public void testIncorrectPut() throws Exception {
+        String ret = content(F.asMap("cmd", "put", "key", "key0"));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+        jsonEquals(ret, errorPattern("Failed to find mandatory parameter in request: val"));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testContainsKey() throws Exception {
+        grid(0).cache(null).put("key0", "val0");
+
+        String ret = content(F.asMap("cmd", "containskey", "key", "key0"));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        jsonEquals(ret, cachePattern(true, true));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testContainesKeys() throws Exception {
+        grid(0).cache(null).put("key0", "val0");
+        grid(0).cache(null).put("key1", "val1");
+
+        String ret = content(F.asMap("cmd", "containskeys", "k1", "key0", "k2", "key1"));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        jsonEquals(ret, cacheBulkPattern(true, true));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testGetAndPut() throws Exception {
+        grid(0).cache(null).put("key0", "val0");
+
+        String ret = content(F.asMap("cmd", "getandput", "key", "key0", "val", "val1"));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        jsonEquals(ret, cachePattern("val0", true));
+
+        assertEquals("val1", grid(0).cache(null).get("key0"));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testGetAndPutIfAbsent() throws Exception {
+        grid(0).cache(null).put("key0", "val0");
+
+        String ret = content(F.asMap("cmd", "getandputifabsent", "key", "key0", "val", "val1"));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        jsonEquals(ret, cachePattern("val0", true));
+
+        assertEquals("val0", grid(0).cache(null).get("key0"));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testPutIfAbsent2() throws Exception {
+        String ret = content(F.asMap("cmd", "putifabsent", "key", "key0", "val", "val1"));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        jsonEquals(ret, cachePattern(true, true));
+
+        assertEquals("val1", grid(0).cache(null).get("key0"));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testRemoveValue() throws Exception {
+        grid(0).cache(null).put("key0", "val0");
+
+        String ret = content(F.asMap("cmd", "rmvvalue", "key", "key0", "val", "val1"));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        jsonEquals(ret, cachePattern(false, true));
+
+        assertEquals("val0", grid(0).cache(null).get("key0"));
+
+        ret = content(F.asMap("cmd", "rmvvalue", "key", "key0", "val", "val0"));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        jsonEquals(ret, cachePattern(true, true));
+
+        assertNull(grid(0).cache(null).get("key0"));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testGetAndRemove() throws Exception {
+        grid(0).cache(null).put("key0", "val0");
+
+        String ret = content(F.asMap("cmd", "getandrmv", "key", "key0"));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        jsonEquals(ret, cachePattern("val0", true));
+
+        assertNull(grid(0).cache(null).get("key0"));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testReplaceValue() throws Exception {
+        grid(0).cache(null).put("key0", "val0");
+
+        String ret = content(F.asMap("cmd", "repval", "key", "key0", "val", "val1", "val2", "val2"));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        jsonEquals(ret, cachePattern(false, true));
+
+        assertEquals("val0", grid(0).cache(null).get("key0"));
+
+        ret = content(F.asMap("cmd", "repval", "key", "key0", "val", "val1", "val2", "val0"));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        jsonEquals(ret, cachePattern(true, true));
+
+        assertEquals("val1", grid(0).cache(null).get("key0"));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testGetAndReplace() throws Exception {
+        grid(0).cache(null).put("key0", "val0");
+
+        String ret = content(F.asMap("cmd", "getandreplace", "key", "key0", "val", "val1"));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        jsonEquals(ret, cachePattern("val0", true));
+
+        assertEquals("val1", grid(0).cache(null).get("key0"));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
     public void testPut() throws Exception {
         String ret = content(F.asMap("cmd", "put", "key", "putKey", "val", "putVal"));
 
@@ -722,5 +983,202 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
         jsonEquals(ret, stringPattern(".+", true));
     }
 
+    /**
+     * @throws Exception If failed.
+     */
+    public void testQueryArgs() throws Exception {
+        String qry = "salary > ? and salary <= ?";
+
+        Map<String, String> params = new HashMap<>();
+        params.put("cmd", "qryexecute");
+        params.put("type", "Person");
+        params.put("psz", "10");
+        params.put("cacheName", "person");
+        params.put("qry", URLEncoder.encode(qry));
+        params.put("arg1", "1000");
+        params.put("arg2", "2000");
+
+        String ret = content(params);
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        JSONObject json = JSONObject.fromObject(ret);
+
+        List items = (List)((Map)json.get("response")).get("items");
+
+        assertEquals(2, items.size());
+
+        for (int i = 0; i < GRID_CNT; ++i) {
+            Map<GridRestCommand, GridRestCommandHandler> handlers =
+                GridTestUtils.getFieldValue(grid(i).context().rest(), "handlers");
+
+            GridRestCommandHandler qryHnd = handlers.get(GridRestCommand.CLOSE_SQL_QUERY);
+
+            ConcurrentHashMap<Long, Iterator> its = GridTestUtils.getFieldValue(qryHnd, "curs");
+
+            assertEquals(0, its.size());
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testQueryClose() throws Exception {
+        String qry = "salary > ? and salary <= ?";
+
+        Map<String, String> params = new HashMap<>();
+        params.put("cmd", "qryexecute");
+        params.put("type", "Person");
+        params.put("psz", "1");
+        params.put("cacheName", "person");
+        params.put("qry", URLEncoder.encode(qry));
+        params.put("arg1", "1000");
+        params.put("arg2", "2000");
+
+        String ret = content(params);
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        JSONObject json = JSONObject.fromObject(ret);
+
+        List items = (List)((Map)json.get("response")).get("items");
+
+        assertEquals(1, items.size());
+
+        boolean found = false;
+
+        for (int i = 0; i < GRID_CNT; ++i) {
+            Map<GridRestCommand, GridRestCommandHandler> handlers =
+                GridTestUtils.getFieldValue(grid(i).context().rest(), "handlers");
+
+            GridRestCommandHandler qryHnd = handlers.get(GridRestCommand.CLOSE_SQL_QUERY);
+
+            ConcurrentHashMap<Long, Iterator> its = GridTestUtils.getFieldValue(qryHnd, "curs");
+
+            found |= its.size() != 0;
+        }
+
+        assertTrue(found);
+
+        Integer qryId = (Integer)((Map)json.get("response")).get("queryId");
+
+        assertNotNull(qryId);
+
+        ret = content(F.asMap("cmd", "qryclose", "cacheName", "person", "qryId", String.valueOf(qryId)));
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        found = false;
+
+        for (int i = 0; i < GRID_CNT; ++i) {
+            Map<GridRestCommand, GridRestCommandHandler> handlers =
+                GridTestUtils.getFieldValue(grid(i).context().rest(), "handlers");
+
+            GridRestCommandHandler qryHnd = handlers.get(GridRestCommand.CLOSE_SQL_QUERY);
+
+            ConcurrentHashMap<Long, Iterator> its = GridTestUtils.getFieldValue(qryHnd, "curs");
+
+            found |= its.size() != 0;
+        }
+
+        assertFalse(found);
+    }
+
     protected abstract String signature() throws Exception;
+
+    /**
+     * Init cache.
+     */
+    private void initCache() {
+        CacheConfiguration<Integer, Person> personCacheCfg = new CacheConfiguration<>("person");
+        personCacheCfg.setIndexedTypes(Integer.class, Person.class);
+
+        IgniteCache<Integer, Person> personCache = grid(0).getOrCreateCache(personCacheCfg);
+
+        personCache.clear();
+
+        Person p1 = new Person("John", "Doe", 2000);
+        Person p2 = new Person("Jane", "Doe", 1000);
+        Person p3 = new Person("John", "Smith", 1000);
+        Person p4 = new Person("Jane", "Smith", 2000);
+
+        personCache.put(p1.getId(), p1);
+        personCache.put(p2.getId(), p2);
+        personCache.put(p3.getId(), p3);
+        personCache.put(p4.getId(), p4);
+
+        SqlQuery<Integer, Person> qry = new SqlQuery<>(Person.class, "salary > ? and salary <= ?");
+
+        qry.setArgs(1000, 2000);
+
+        assertEquals(2, personCache.query(qry).getAll().size());
+    }
+
+    /**
+     * Person class.
+     */
+    public static class Person implements Serializable {
+        /** Person id. */
+        private static int PERSON_ID = 0;
+
+        /** Person ID (indexed). */
+        @QuerySqlField(index = true)
+        private Integer id;
+
+        /** First name (not-indexed). */
+        @QuerySqlField
+        private String firstName;
+
+        /** Last name (not indexed). */
+        @QuerySqlField
+        private String lastName;
+
+        /** Salary (indexed). */
+        @QuerySqlField(index = true)
+        private double salary;
+
+        /**
+         * @param firstName First name.
+         * @param lastName Last name.
+         * @param salary Salary.
+         */
+        Person(String firstName, String lastName, double salary) {
+            id = PERSON_ID++;
+
+            this.firstName = firstName;
+            this.lastName = lastName;
+            this.salary = salary;
+        }
+
+        /**
+         * @return First name.
+         */
+        public String getFirstName() {
+            return firstName;
+        }
+
+        /**
+         * @return Last name.
+         */
+        public String getLastName() {
+            return lastName;
+        }
+        /**
+         * @return Salary.
+         */
+        public double getSalary() {
+
+            return salary;
+        }
+
+        /**
+         * @return Id.
+         */
+        public Integer getId() {
+            return id;
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/952ac724/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
index d2a730a..cacadc7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
@@ -2284,7 +2284,7 @@ public abstract class GridCacheAdapter<K, V> implements IgniteInternalCache<K, V
      * @return Put future.
      */
     public IgniteInternalFuture<Boolean> putAsync(K key, V val,
-                                                  @Nullable CacheEntryPredicate... filter) {
+        @Nullable CacheEntryPredicate... filter) {
         final boolean statsEnabled = ctx.config().isStatisticsEnabled();
 
         final long start = statsEnabled ? System.nanoTime() : 0L;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/952ac724/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
index 62732f0..ab8929f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
@@ -33,12 +33,27 @@ public enum GridRestCommand {
     /** Get cached value. */
     CACHE_GET("get"),
 
+    /** Contains cached value. */
+    CACHE_CONTAINS_KEY("containskey"),
+
+    /** Contains cached values. */
+    CACHE_CONTAINS_KEYS("containskeys"),
+
     /** Get several cached values. */
     CACHE_GET_ALL("getall"),
 
+    /** Store value in cache and return previous value. */
+    CACHE_GET_AND_PUT("getandput"),
+
+    /** Store value in cache and return previous value. */
+    CACHE_GET_AND_PUT_IF_ABSENT("getandputifabsent"),
+
     /** Store value in cache. */
     CACHE_PUT("put"),
 
+    /** Store value in cache. */
+    CACHE_PUT_IF_ABSENT("putifabsent"),
+
     /** Store value in cache if it doesn't exist. */
     CACHE_ADD("add"),
 
@@ -48,12 +63,24 @@ public enum GridRestCommand {
     /** Remove value from cache. */
     CACHE_REMOVE("rmv"),
 
+    /** Remove value from cache. */
+    CACHE_REMOVE_VALUE("rmvvalue"),
+
+    /** Remove value from cache. */
+    CACHE_GET_AND_REMOVE("getandrmv"),
+
     /** Remove several values from cache. */
     CACHE_REMOVE_ALL("rmvall"),
 
     /** Replace cache value only if there is currently a mapping for it. */
     CACHE_REPLACE("rep"),
 
+    /** Replace cache value only if there is currently a mapping for it. */
+    CACHE_REPLACE_VALUE("repval"),
+
+    /** Replace cache value only if there is currently a mapping for it. */
+    CACHE_GET_AND_REPLACE("getandreplace"),
+
     /** Compare and set. */
     CACHE_CAS("cas"),
 
@@ -66,6 +93,9 @@ public enum GridRestCommand {
     /** Cache metrics. */
     CACHE_METRICS("cache"),
 
+    /** Cache size. */
+    CACHE_SIZE("cachesize"),
+
     /** Increment. */
     ATOMIC_INCREMENT("incr"),
 
@@ -87,6 +117,9 @@ public enum GridRestCommand {
     /** Version. */
     VERSION("version"),
 
+    /** Name. */
+    NAME("name"),
+
     /** Log. */
     LOG("log"),
 
@@ -94,7 +127,25 @@ public enum GridRestCommand {
     NOOP("noop"),
 
     /** Quit. */
-    QUIT("quit");
+    QUIT("quit"),
+
+    /** Get or create cache. */
+    GET_OR_CREATE_CACHE("getorcreatecache"),
+
+    /** Stops dynamically started cache. */
+    DESTROY_CACHE("destroycache"),
+
+    /** Execute sql query. */
+    EXECUTE_SQL_QUERY("qryexecute"),
+
+    /** Execute sql fields query. */
+    EXECUTE_SQL_FIELDS_QUERY("qryfieldsexecute"),
+
+    /** Fetch query results. */
+    FETCH_SQL_QUERY("qryfetch"),
+
+    /** Close query. */
+    CLOSE_SQL_QUERY("qryclose");
 
     /** Enum values. */
     private static final GridRestCommand[] VALS = values();

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/952ac724/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
index 2d1d802..d454fd7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
@@ -25,6 +25,7 @@ import org.apache.ignite.internal.processors.rest.client.message.*;
 import org.apache.ignite.internal.processors.rest.handlers.*;
 import org.apache.ignite.internal.processors.rest.handlers.cache.*;
 import org.apache.ignite.internal.processors.rest.handlers.datastructures.*;
+import org.apache.ignite.internal.processors.rest.handlers.query.*;
 import org.apache.ignite.internal.processors.rest.handlers.task.*;
 import org.apache.ignite.internal.processors.rest.handlers.top.*;
 import org.apache.ignite.internal.processors.rest.handlers.version.*;
@@ -254,6 +255,7 @@ public class GridRestProcessor extends GridProcessorAdapter {
             addHandler(new GridTopologyCommandHandler(ctx));
             addHandler(new GridVersionCommandHandler(ctx));
             addHandler(new DataStructuresCommandHandler(ctx));
+            addHandler(new QueryCommandHandler(ctx));
 
             // Start protocols.
             startTcpProtocol();
@@ -384,6 +386,8 @@ public class GridRestProcessor extends GridProcessorAdapter {
 
         if (interceptor != null && res.getResponse() != null) {
             switch (req.command()) {
+                case CACHE_CONTAINS_KEYS:
+                case CACHE_CONTAINS_KEY:
                 case CACHE_GET:
                 case CACHE_GET_ALL:
                 case CACHE_PUT:
@@ -527,6 +531,8 @@ public class GridRestProcessor extends GridProcessorAdapter {
 
         switch (req.command()) {
             case CACHE_GET:
+            case CACHE_CONTAINS_KEY:
+            case CACHE_CONTAINS_KEYS:
             case CACHE_GET_ALL:
                 perm = SecurityPermission.CACHE_READ;
                 name = ((GridRestCacheRequest)req).cacheName();
@@ -540,6 +546,11 @@ public class GridRestProcessor extends GridProcessorAdapter {
             case CACHE_CAS:
             case CACHE_APPEND:
             case CACHE_PREPEND:
+            case CACHE_GET_AND_PUT:
+            case CACHE_GET_AND_REPLACE:
+            case CACHE_GET_AND_PUT_IF_ABSENT:
+            case CACHE_PUT_IF_ABSENT:
+            case CACHE_REPLACE_VALUE:
                 perm = SecurityPermission.CACHE_PUT;
                 name = ((GridRestCacheRequest)req).cacheName();
 
@@ -547,6 +558,8 @@ public class GridRestProcessor extends GridProcessorAdapter {
 
             case CACHE_REMOVE:
             case CACHE_REMOVE_ALL:
+            case CACHE_GET_AND_REMOVE:
+            case CACHE_REMOVE_VALUE:
                 perm = SecurityPermission.CACHE_REMOVE;
                 name = ((GridRestCacheRequest)req).cacheName();
 
@@ -560,6 +573,7 @@ public class GridRestProcessor extends GridProcessorAdapter {
                 break;
 
             case CACHE_METRICS:
+            case CACHE_SIZE:
             case TOPOLOGY:
             case NODE:
             case VERSION:

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/952ac724/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
index 1f24023..c20360a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
@@ -53,26 +53,46 @@ import static org.apache.ignite.transactions.TransactionIsolation.*;
 public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
     /** Supported commands. */
     private static final Collection<GridRestCommand> SUPPORTED_COMMANDS = U.sealList(
+        DESTROY_CACHE,
+        GET_OR_CREATE_CACHE,
+        CACHE_CONTAINS_KEYS,
+        CACHE_CONTAINS_KEY,
         CACHE_GET,
+        CACHE_GET_AND_PUT,
+        CACHE_GET_AND_REPLACE,
+        CACHE_GET_AND_PUT_IF_ABSENT,
+        CACHE_PUT_IF_ABSENT,
         CACHE_GET_ALL,
         CACHE_PUT,
         CACHE_ADD,
         CACHE_PUT_ALL,
         CACHE_REMOVE,
+        CACHE_REMOVE_VALUE,
+        CACHE_REPLACE_VALUE,
+        CACHE_GET_AND_REMOVE,
         CACHE_REMOVE_ALL,
         CACHE_REPLACE,
         CACHE_CAS,
         CACHE_APPEND,
         CACHE_PREPEND,
-        CACHE_METRICS
+        CACHE_METRICS,
+        CACHE_SIZE
     );
 
     /** Requests with required parameter {@code key}. */
     private static final EnumSet<GridRestCommand> KEY_REQUIRED_REQUESTS = EnumSet.of(
+        CACHE_CONTAINS_KEY,
         CACHE_GET,
+        CACHE_GET_AND_PUT,
+        CACHE_GET_AND_REPLACE,
+        CACHE_GET_AND_PUT_IF_ABSENT,
+        CACHE_PUT_IF_ABSENT,
         CACHE_PUT,
         CACHE_ADD,
         CACHE_REMOVE,
+        CACHE_REMOVE_VALUE,
+        CACHE_REPLACE_VALUE,
+        CACHE_GET_AND_REMOVE,
         CACHE_REPLACE,
         ATOMIC_INCREMENT,
         ATOMIC_DECREMENT,
@@ -137,6 +157,32 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
             IgniteInternalFuture<GridRestResponse> fut;
 
             switch (cmd) {
+                case DESTROY_CACHE: {
+                    fut = ctx.closure().callLocalSafe(new DestroyCacheCommand(ctx, cacheName));
+
+                    break;
+                }
+
+                case GET_OR_CREATE_CACHE: {
+                    fut = ctx.closure().callLocalSafe(new GetOrCreateCacheCallable(ctx, cacheName));
+
+                    break;
+                }
+
+                case CACHE_CONTAINS_KEYS: {
+                    fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key,
+                        new ContainsKeysCommand(getKeys(req0)));
+
+                    break;
+                }
+
+                case CACHE_CONTAINS_KEY: {
+                    fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key,
+                        new ContainsKeyCommand(key));
+
+                    break;
+                }
+
                 case CACHE_GET: {
                     fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key,
                         new GetCommand(key));
@@ -144,48 +190,51 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
                     break;
                 }
 
-                case CACHE_GET_ALL: {
-                    Set<Object> keys = req0.values().keySet();
+                case CACHE_GET_AND_PUT: {
+                    fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key,
+                        new GetAndPutCommand(key, getValue(req0)));
 
-                    if (F.isEmpty(keys))
-                        throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("keys"));
+                    break;
+                }
 
-                    // HashSet wrapping for correct serialization
-                    HashSet<Object> keys0 = new HashSet<>();
+                case CACHE_GET_AND_REPLACE: {
+                    fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key,
+                        new GetAndReplaceCommand(key, getValue(req0)));
 
-                    for (Object getKey : keys) {
-                        if (getKey == null)
-                            throw new IgniteCheckedException("Failing getAll operation (null keys are not allowed).");
+                    break;
+                }
 
-                        keys0.add(getKey);
-                    }
+                case CACHE_GET_AND_PUT_IF_ABSENT: {
+                    fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key,
+                        new GetAndPutIfAbsentCommand(key, getValue(req0)));
+
+                    break;
+                }
 
+                case CACHE_PUT_IF_ABSENT: {
                     fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key,
-                        new GetAllCommand(keys0));
+                        new PutIfAbsentCommand(key, getValue(req0)));
 
                     break;
                 }
 
-                case CACHE_PUT: {
-                    final Object val = req0.value();
+                case CACHE_GET_ALL: {
+                    fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key,
+                        new GetAllCommand(getKeys(req0)));
 
-                    if (val == null)
-                        throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("val"));
+                    break;
+                }
 
+                case CACHE_PUT: {
                     fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key, new
-                        PutCommand(key, ttl, val));
+                        PutCommand(key, ttl, getValue(req0)));
 
                     break;
                 }
 
                 case CACHE_ADD: {
-                    final Object val = req0.value();
-
-                    if (val == null)
-                        throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("val"));
-
                     fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key,
-                        new AddCommand(key, ttl, val));
+                        new AddCommand(key, ttl, getValue(req0)));
 
                     break;
                 }
@@ -220,6 +269,27 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
                     break;
                 }
 
+                case CACHE_REMOVE_VALUE: {
+                    fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key,
+                        new RemoveValueCommand(key, getValue(req0)));
+
+                    break;
+                }
+
+                case CACHE_REPLACE_VALUE: {
+                    fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key,
+                        new ReplaceValueCommand(key, getValue(req0), req0.value2()));
+
+                    break;
+                }
+
+                case CACHE_GET_AND_REMOVE: {
+                    fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key,
+                        new GetAndRemoveCommand(key));
+
+                    break;
+                }
+
                 case CACHE_REMOVE_ALL: {
                     Map<Object, Object> map = req0.values();
 
@@ -274,6 +344,12 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
                     break;
                 }
 
+                case CACHE_SIZE: {
+                    fut = executeCommand(req.destinationId(), req.clientId(), cacheName, key, new SizeCommand());
+
+                    break;
+                }
+
                 default:
                     throw new IllegalArgumentException("Invalid command for cache handler: " + req);
             }
@@ -297,6 +373,44 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
     }
 
     /**
+     * @param req Request.
+     * @return Request keys.
+     * @throws IgniteCheckedException If incorrect keys are presented.
+     */
+    private Set<Object> getKeys(GridRestCacheRequest req) throws IgniteCheckedException {
+        Set<Object> keys = req.values().keySet();
+
+        if (F.isEmpty(keys))
+            throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("keys"));
+
+        // HashSet wrapping for correct serialization
+        HashSet<Object> keys0 = new HashSet<>();
+
+        for (Object getKey : keys) {
+            if (getKey == null)
+                throw new IgniteCheckedException("Failing operation (null keys are not allowed).");
+
+            keys0.add(getKey);
+        }
+
+        return keys0;
+    }
+
+    /**
+     * @param req Request.
+     * @return Request value.
+     * @throws IgniteCheckedException If incorrect keys are presented.
+     */
+    private Object getValue(GridRestCacheRequest req) throws IgniteCheckedException {
+        final Object val = req.value();
+
+        if (val == null)
+            throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("val"));
+
+        return val;
+    }
+
+    /**
      * Executes command on flagged cache projection. Checks {@code destId} to find
      * if command could be performed locally or routed to a remote node.
      *
@@ -702,6 +816,48 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
     }
 
     /** */
+    private static class ContainsKeyCommand extends CacheProjectionCommand {
+        /** */
+        private static final long serialVersionUID = 0L;
+
+        /** */
+        private final Object key;
+
+        /**
+         * @param key Key.
+         */
+        ContainsKeyCommand(Object key) {
+            this.key = key;
+        }
+
+        /** {@inheritDoc} */
+        @Override public IgniteInternalFuture<?> applyx(IgniteInternalCache<Object, Object> c, GridKernalContext ctx) {
+            return c.containsKeyAsync(key);
+        }
+    }
+
+    /** */
+    private static class ContainsKeysCommand extends CacheProjectionCommand {
+        /** */
+        private static final long serialVersionUID = 0L;
+
+        /** */
+        private final Collection<Object> keys;
+
+        /**
+         * @param keys Keys.
+         */
+        ContainsKeysCommand(Collection<Object> keys) {
+            this.keys = keys;
+        }
+
+        /** {@inheritDoc} */
+        @Override public IgniteInternalFuture<?> applyx(IgniteInternalCache<Object, Object> c, GridKernalContext ctx) {
+            return c.containsKeysAsync(keys);
+        }
+    }
+
+    /** */
     private static class GetCommand extends CacheProjectionCommand {
         /** */
         private static final long serialVersionUID = 0L;
@@ -723,6 +879,113 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
     }
 
     /** */
+    private static class GetAndPutCommand extends CacheProjectionCommand {
+        /** */
+        private static final long serialVersionUID = 0L;
+
+        /** Key. */
+        protected final Object key;
+
+        /** Value.*/
+        protected final Object val;
+
+        /**
+         * @param key Key.
+         * @param val Value.
+         */
+        GetAndPutCommand(Object key, Object val) {
+            this.key = key;
+            this.val = val;
+        }
+
+        /** {@inheritDoc} */
+        @Override public IgniteInternalFuture<?> applyx(IgniteInternalCache<Object, Object> c, GridKernalContext ctx) {
+            return c.getAndPutAsync(key, val);
+        }
+    }
+
+    /** */
+    private static class GetAndReplaceCommand extends GetAndPutCommand {
+        /** */
+        private static final long serialVersionUID = 0L;
+
+        /**
+         * @param key Key.
+         * @param val Value.
+         */
+        GetAndReplaceCommand(Object key, Object val) {
+            super(key, val);
+        }
+
+        /** {@inheritDoc} */
+        @Override public IgniteInternalFuture<?> applyx(IgniteInternalCache<Object, Object> c, GridKernalContext ctx) {
+            return c.getAndReplaceAsync(key, val);
+        }
+    }
+
+    /** */
+    private static class ReplaceValueCommand extends GetAndReplaceCommand {
+        /** */
+        private static final long serialVersionUID = 0L;
+
+        /** */
+        private final Object oldVal;
+
+        /**
+         * @param key Key.
+         * @param val Value.
+         * @param oldVal Old value.
+         */
+        ReplaceValueCommand(Object key, Object val, Object oldVal) {
+            super(key, val);
+            this.oldVal = oldVal;
+        }
+
+        /** {@inheritDoc} */
+        @Override public IgniteInternalFuture<?> applyx(IgniteInternalCache<Object, Object> c, GridKernalContext ctx) {
+            return c.replaceAsync(key, oldVal, val);
+        }
+    }
+
+    /** */
+    private static class GetAndPutIfAbsentCommand extends GetAndPutCommand {
+        /** */
+        private static final long serialVersionUID = 0L;
+
+        /**
+         * @param key Key.
+         * @param val Value.
+         */
+        GetAndPutIfAbsentCommand(Object key, Object val) {
+            super(key, val);
+        }
+
+        /** {@inheritDoc} */
+        @Override public IgniteInternalFuture<?> applyx(IgniteInternalCache<Object, Object> c, GridKernalContext ctx) {
+            return c.getAndPutIfAbsentAsync(key, val);
+        }
+    }
+
+    /** */
+    private static class PutIfAbsentCommand extends GetAndPutCommand {
+        /** */
+        private static final long serialVersionUID = 0L;
+
+        /**
+         * @param key Key.
+         * @param val Value.
+         */
+        PutIfAbsentCommand(Object key, Object val) {
+            super(key, val);
+        }
+
+        /** {@inheritDoc} */
+        @Override public IgniteInternalFuture<?> applyx(IgniteInternalCache<Object, Object> c, GridKernalContext ctx) {
+            return c.putIfAbsentAsync(key, val);
+        }
+    }
+
+    /** */
     private static class GetAllCommand extends CacheProjectionCommand {
         /** */
         private static final long serialVersionUID = 0L;
@@ -770,7 +1033,7 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
         private static final long serialVersionUID = 0L;
 
         /** */
-        private final Object key;
+        protected final Object key;
 
         /**
          * @param key Key.
@@ -786,6 +1049,43 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
     }
 
     /** */
+    private static class RemoveValueCommand extends GetAndPutCommand {
+        /** */
+        private static final long serialVersionUID = 0L;
+
+        /**
+         * @param key Key.
+         * @param val Value.
+         */
+        RemoveValueCommand(Object key, Object val) {
+            super(key, val);
+        }
+
+        /** {@inheritDoc} */
+        @Override public IgniteInternalFuture<?> applyx(IgniteInternalCache<Object, Object> c, GridKernalContext ctx) {
+            return c.removeAsync(key, val);
+        }
+    }
+
+    /** */
+    private static class GetAndRemoveCommand extends RemoveCommand {
+        /** */
+        private static final long serialVersionUID = 0L;
+
+        /**
+         * @param key Key.
+         */
+        GetAndRemoveCommand(Object key) {
+            super(key);
+        }
+
+        /** {@inheritDoc} */
+        @Override public IgniteInternalFuture<?> applyx(IgniteInternalCache<Object, Object> c, GridKernalContext ctx) {
+            return c.getAndRemoveAsync(key);
+        }
+    }
+
+    /** */
     private static class RemoveAllCommand extends CacheProjectionCommand {
         /** */
         private static final long serialVersionUID = 0L;
@@ -1025,4 +1325,69 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
             );
         }
     }
+
+    /** */
+    private static class SizeCommand extends CacheCommand {
+        /** */
+        private static final long serialVersionUID = 0L;
+
+        /** {@inheritDoc} */
+        @Override public IgniteInternalFuture<?> applyx(IgniteInternalCache<Object, Object> c, GridKernalContext ctx) {
+            return c.sizeAsync(new CachePeekMode[]{CachePeekMode.PRIMARY});
+        }
+    }
+
+    /**
+     * Destroy cache callable.
+     */
+    private static class DestroyCacheCommand extends GetOrCreateCacheCallable {
+
+        public DestroyCacheCommand(GridKernalContext ctx, String cacheName) {
+            super(ctx, cacheName);
+        }
+
+        /** {@inheritDoc} */
+        @Override public GridRestResponse call() throws Exception {
+            try {
+                ctx.grid().destroyCache(cacheName);
+
+                return new GridRestResponse();
+            }
+            catch (Exception e) {
+                return new GridRestResponse(GridRestResponse.STATUS_FAILED, e.getMessage());
+            }
+        }
+    }
+
+    /**
+     * Get or create cache callable.
+     */
+    private static class GetOrCreateCacheCallable implements Callable<GridRestResponse> {
+        /** Kernal context. */
+        protected GridKernalContext ctx;
+
+        /** Cache name. */
+        protected String cacheName;
+
+        /**
+         * @param ctx Kernal context.
+         * @param cacheName Cache name.
+         */
+        public GetOrCreateCacheCallable(GridKernalContext ctx, String cacheName) {
+            this.ctx = ctx;
+            this.cacheName = cacheName;
+        }
+
+        /** {@inheritDoc} */
+        @Override public GridRestResponse call() throws Exception {
+            try {
+                ctx.grid().getOrCreateCache(cacheName);
+
+                return new GridRestResponse();
+            }
+            catch (Exception e) {
+                return new GridRestResponse(GridRestResponse.STATUS_FAILED, e.getMessage());
+            }
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/952ac724/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/CacheQueryResult.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/CacheQueryResult.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/CacheQueryResult.java
new file mode 100644
index 0000000..3e49576
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/CacheQueryResult.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.rest.handlers.query;
+
+import org.apache.ignite.internal.util.typedef.internal.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Client query result.
+ */
+public class CacheQueryResult implements Externalizable {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Query ID. */
+    private long qryId;
+
+    /** Result items. */
+    private Collection<?> items;
+
+    /** Last flag. */
+    private boolean last;
+
+    /**
+     * @return Query ID.
+     */
+    public long getQueryId() {
+        return qryId;
+    }
+
+    /**
+     * @param qryId Query ID.
+     */
+    public void setQueryId(long qryId) {
+        this.qryId = qryId;
+    }
+
+    /**
+     * @return Items.
+     */
+    public Collection<?> getItems() {
+        return items;
+    }
+
+    /**
+     * @param items Items.
+     */
+    public void setItems(Collection<?> items) {
+        this.items = items;
+    }
+
+    /**
+     * @return Last flag.
+     */
+    public boolean getLast() {
+        return last;
+    }
+
+    /**
+     * @param last Last flag.
+     */
+    public void setLast(boolean last) {
+        this.last = last;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(CacheQueryResult.class, this);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeBoolean(last);
+        out.writeLong(qryId);
+        U.writeCollection(out, items);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        last = in.readBoolean();
+        qryId = in.readLong();
+        items = U.readCollection(in);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/952ac724/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
new file mode 100644
index 0000000..097c7aa
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
@@ -0,0 +1,291 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.rest.handlers.query;
+
+import org.apache.ignite.*;
+import org.apache.ignite.cache.query.*;
+import org.apache.ignite.internal.*;
+import org.apache.ignite.internal.processors.rest.*;
+import org.apache.ignite.internal.processors.rest.handlers.*;
+import org.apache.ignite.internal.processors.rest.request.*;
+import org.apache.ignite.internal.util.future.*;
+import org.apache.ignite.internal.util.typedef.internal.*;
+
+import java.util.*;
+import java.util.concurrent.*;
+import java.util.concurrent.atomic.*;
+
+import static org.apache.ignite.internal.processors.rest.GridRestCommand.*;
+
+/**
+ * Query command handler.
+ */
+public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
+    /** Supported commands. */
+    private static final Collection<GridRestCommand> SUPPORTED_COMMANDS = U.sealList(EXECUTE_SQL_QUERY,
+        EXECUTE_SQL_FIELDS_QUERY,
+        FETCH_SQL_QUERY,
+        CLOSE_SQL_QUERY);
+
+    /** Query ID sequence. */
+    private static final AtomicLong qryIdGen = new AtomicLong();
+
+    /** Current queries. */
+    private final ConcurrentHashMap<Long, Iterator> curs = new ConcurrentHashMap<>();
+
+    /** Current queries cursors. */
+    private final ConcurrentHashMap<Long, QueryCursor> qryCurs = new ConcurrentHashMap<>();
+
+    /**
+     * @param ctx Context.
+     */
+    public QueryCommandHandler(GridKernalContext ctx) {
+        super(ctx);
+    }
+
+    /** {@inheritDoc} */
+    @Override public Collection<GridRestCommand> supportedCommands() {
+        return SUPPORTED_COMMANDS;
+    }
+
+    /** {@inheritDoc} */
+    @Override public IgniteInternalFuture<GridRestResponse> handleAsync(GridRestRequest req) {
+        assert req != null;
+
+        assert SUPPORTED_COMMANDS.contains(req.command());
+        assert req instanceof RestSqlQueryRequest : "Invalid type of query request.";
+
+        switch (req.command()) {
+            case EXECUTE_SQL_QUERY:
+            case EXECUTE_SQL_FIELDS_QUERY: {
+                return ctx.closure().callLocalSafe(
+                    new ExecuteQueryCallable(ctx, (RestSqlQueryRequest)req, curs, qryCurs), false);
+            }
+
+            case FETCH_SQL_QUERY: {
+                return ctx.closure().callLocalSafe(
+                    new FetchQueryCallable((RestSqlQueryRequest)req, curs, qryCurs), false);
+            }
+
+            case CLOSE_SQL_QUERY: {
+                return ctx.closure().callLocalSafe(
+                    new CloseQueryCallable((RestSqlQueryRequest)req, curs, qryCurs), false);
+            }
+        }
+
+        return new GridFinishedFuture<>();
+    }
+
+    /**
+     * Execute query callable.
+     */
+    private static class ExecuteQueryCallable implements Callable<GridRestResponse> {
+        /** Kernal context. */
+        private GridKernalContext ctx;
+
+        /** Execute query request. */
+        private RestSqlQueryRequest req;
+
+        /** Queries iterators. */
+        private ConcurrentHashMap<Long, Iterator> curs;
+
+        /** Queries cursors. */
+        private ConcurrentHashMap<Long, QueryCursor> qryCurs;
+
+        /**
+         * @param ctx Kernal context.
+         * @param req Execute query request.
+         * @param curs Queries cursors.
+         */
+        public ExecuteQueryCallable(GridKernalContext ctx, RestSqlQueryRequest req,
+                                    ConcurrentHashMap<Long, Iterator> curs, ConcurrentHashMap<Long, QueryCursor> qryCurs) {
+            this.ctx = ctx;
+            this.req = req;
+            this.curs = curs;
+            this.qryCurs = qryCurs;
+        }
+
+        /** {@inheritDoc} */
+        @Override public GridRestResponse call() throws Exception {
+            try {
+                Query qry;
+
+                if (req.typeName() != null) {
+                    qry = new SqlQuery(req.typeName(), req.sqlQuery());
+
+                    ((SqlQuery)qry).setArgs(req.arguments());
+                }
+                else {
+                    qry = new SqlFieldsQuery(req.sqlQuery());
+
+                    ((SqlFieldsQuery)qry).setArgs(req.arguments());
+                }
+
+                IgniteCache<Object, Object> cache = ctx.grid().cache(req.cacheName());
+
+                if (cache == null)
+                    return new GridRestResponse(GridRestResponse.STATUS_FAILED,
+                        "No cache with name. [cacheName=" + req.cacheName() + "]");
+
+                QueryCursor qryCur = cache.query(qry);
+
+                Iterator cur = qryCur.iterator();
+
+                long qryId = qryIdGen.getAndIncrement();
+
+                qryCurs.put(qryId, qryCur);
+                curs.put(qryId, cur);
+
+                CacheQueryResult res = createQueryResult(qryCurs, curs, cur, req, qryId);
+
+                return new GridRestResponse(res);
+            }
+            catch (Exception e) {
+                return new GridRestResponse(GridRestResponse.STATUS_FAILED, e.getMessage());
+            }
+        }
+    }
+
+    /**
+     * Close query callable.
+     */
+    private static class CloseQueryCallable implements Callable<GridRestResponse> {
+        /** Execute query request. */
+        private RestSqlQueryRequest req;
+
+        /** Queries iterators. */
+        private ConcurrentHashMap<Long, Iterator> curs;
+
+        /** Queries cursors. */
+        private ConcurrentHashMap<Long, QueryCursor> qryCurs;
+
+        /**
+         * @param req Execute query request.
+         * @param curs Queries cursors.
+         */
+        public CloseQueryCallable(RestSqlQueryRequest req,
+                                  ConcurrentHashMap<Long, Iterator> curs,
+                                  ConcurrentHashMap<Long, QueryCursor> qryCurs) {
+            this.req = req;
+            this.curs = curs;
+            this.qryCurs = qryCurs;
+        }
+
+        /** {@inheritDoc} */
+        @Override public GridRestResponse call() throws Exception {
+            try {
+                QueryCursor cur = qryCurs.get(req.queryId());
+
+                if (cur == null)
+                    return new GridRestResponse(GridRestResponse.STATUS_FAILED,
+                        "Cannot find query [qryId=" + req.queryId() + "]");
+
+                cur.close();
+
+                qryCurs.remove(req.queryId());
+                curs.remove(req.queryId());
+
+                return new GridRestResponse(true);
+            }
+            catch (Exception e) {
+                qryCurs.remove(req.queryId());
+                curs.remove(req.queryId());
+
+                return new GridRestResponse(GridRestResponse.STATUS_FAILED, e.getMessage());
+            }
+        }
+    }
+
+    /**
+     * Fetch query callable.
+     */
+    private static class FetchQueryCallable implements Callable<GridRestResponse> {
+        /** Execute query request. */
+        private RestSqlQueryRequest req;
+
+        /** Queries iterators. */
+        private ConcurrentHashMap<Long, Iterator> curs;
+
+        /** Queries cursors. */
+        private ConcurrentHashMap<Long, QueryCursor> qryCurs;
+
+        /**
+         * @param req Execute query request.
+         * @param curs Queries cursors.
+         */
+        public FetchQueryCallable(RestSqlQueryRequest req, ConcurrentHashMap<Long, Iterator> curs,
+                                  ConcurrentHashMap<Long, QueryCursor> qryCurs) {
+            this.req = req;
+            this.curs = curs;
+            this.qryCurs = qryCurs;
+        }
+
+        /** {@inheritDoc} */
+        @Override public GridRestResponse call() throws Exception {
+            try {
+                Iterator cur = curs.get(req.queryId());
+
+                if (cur == null)
+                    return new GridRestResponse(GridRestResponse.STATUS_FAILED,
+                        "Cannot find query [qryId=" + req.queryId() + "]");
+
+                CacheQueryResult res = createQueryResult(qryCurs, curs, cur, req, req.queryId());
+
+                return new GridRestResponse(res);
+            }
+            catch (Exception e) {
+                curs.remove(req.queryId());
+                qryCurs.remove(req.queryId());
+
+                return new GridRestResponse(GridRestResponse.STATUS_FAILED, e.getMessage());
+            }
+        }
+    }
+
+    /**
+     * @param qryCurs Query cursors.
+     * @param curs Queries iterators.
+     * @param cur Current cursor.
+     * @param req Sql request.
+     * @param qryId Query id.
+     * @return Query result with items.
+     */
+    private static CacheQueryResult createQueryResult(ConcurrentHashMap<Long, QueryCursor> qryCurs,
+                                                      ConcurrentHashMap<Long, Iterator> curs, Iterator cur,
+                                                      RestSqlQueryRequest req, Long qryId) {
+        CacheQueryResult res = new CacheQueryResult();
+
+        List<Object> items = new ArrayList<>();
+
+        for (int i = 0; i < req.pageSize() && cur.hasNext(); ++i)
+            items.add(cur.next());
+
+        res.setItems(items);
+
+        res.setLast(!cur.hasNext());
+
+        res.setQueryId(qryId);
+
+        if (!cur.hasNext()) {
+            qryCurs.remove(qryId);
+            curs.remove(qryId);
+        }
+
+        return res;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/952ac724/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/version/GridVersionCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/version/GridVersionCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/version/GridVersionCommandHandler.java
index 2bfb704..bf09d30 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/version/GridVersionCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/version/GridVersionCommandHandler.java
@@ -30,11 +30,11 @@ import static org.apache.ignite.internal.IgniteVersionUtils.*;
 import static org.apache.ignite.internal.processors.rest.GridRestCommand.*;
 
 /**
- * Handler for {@link GridRestCommand#VERSION} command.
+ * Handler for {@link GridRestCommand#VERSION} and {@link GridRestCommand#NAME} command.
  */
 public class GridVersionCommandHandler extends GridRestCommandHandlerAdapter {
     /** Supported commands. */
-    private static final Collection<GridRestCommand> SUPPORTED_COMMANDS = U.sealList(VERSION);
+    private static final Collection<GridRestCommand> SUPPORTED_COMMANDS = U.sealList(VERSION, NAME);
 
     /**
      * @param ctx Context.
@@ -54,6 +54,14 @@ public class GridVersionCommandHandler extends GridRestCommandHandlerAdapter {
 
         assert SUPPORTED_COMMANDS.contains(req.command());
 
-        return new GridFinishedFuture<>(new GridRestResponse(VER_STR));
+        switch (req.command()){
+            case VERSION:
+                return new GridFinishedFuture<>(new GridRestResponse(VER_STR));
+
+            case NAME:
+                return new GridFinishedFuture<>(new GridRestResponse(ctx.gridName()));
+        }
+
+        return new GridFinishedFuture<>();
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/952ac724/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/RestSqlQueryRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/RestSqlQueryRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/RestSqlQueryRequest.java
new file mode 100644
index 0000000..5ba3a50
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/RestSqlQueryRequest.java
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.rest.request;
+
+/**
+ * Sql query request.
+ */
+public class RestSqlQueryRequest extends GridRestRequest {
+    /** Sql query. */
+    private String sqlQry;
+
+    /** Sql query arguments. */
+    private Object[] args;
+
+    /** Page size. */
+    private Integer pageSize;
+
+    /** Cache name. */
+    private String cacheName;
+
+    /** Query id. */
+    private Long qryId;
+
+    /** Query type name. */
+    private String typeName;
+
+    /**
+     * @param sqlQry Sql query.
+     */
+    public void sqlQuery(String sqlQry) {
+        this.sqlQry = sqlQry;
+    }
+
+    /**
+     * @return Sql query.
+     */
+    public String sqlQuery() {
+        return sqlQry;
+    }
+
+    /**
+     * @param args Sql query arguments.
+     */
+    public void arguments(Object[] args) {
+        this.args = args;
+    }
+
+    /**
+     * @return Sql query arguments.
+     */
+    public Object[] arguments() {
+        return args;
+    }
+
+    /**
+     * @param pageSize Page size.
+     */
+    public void pageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    /**
+     * @return Page size.
+     */
+    public int pageSize() {
+        return pageSize;
+    }
+
+    /**
+     * @param cacheName Cache name.
+     */
+    public void cacheName(String cacheName) {
+        this.cacheName = cacheName;
+    }
+
+    /**
+     * @return Cache name.
+     */
+    public String cacheName() {
+        return cacheName;
+    }
+
+    /**
+     * @param id Query id.
+     */
+    public void queryId(Long id) {
+        this.qryId = id;
+    }
+
+    /**
+     * @return Query id.
+     */
+    public Long queryId() {
+        return qryId;
+    }
+
+    /**
+     * @param typeName Query type name.
+     */
+    public void typeName(String typeName) {
+        this.typeName = typeName;
+    }
+
+    /**
+     * @return Query type name.
+     */
+    public String typeName() {
+        return typeName;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/952ac724/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
----------------------------------------------------------------------
diff --git a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
index fac9818..d8bcac2 100644
--- a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
+++ b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
@@ -323,11 +323,21 @@ public class GridJettyRestHandler extends AbstractHandler {
      * @throws IgniteCheckedException If creation failed.
      */
     @Nullable private GridRestRequest createRequest(GridRestCommand cmd,
-        Map<String, Object> params,
-        ServletRequest req) throws IgniteCheckedException {
+        Map<String, Object> params, HttpServletRequest req) throws IgniteCheckedException {
         GridRestRequest restReq;
 
         switch (cmd) {
+            case GET_OR_CREATE_CACHE:
+            case DESTROY_CACHE: {
+                GridRestCacheRequest restReq0 = new GridRestCacheRequest();
+
+                restReq0.cacheName((String)params.get("cacheName"));
+
+                restReq = restReq0;
+
+                break;
+            }
+
             case ATOMIC_DECREMENT:
             case ATOMIC_INCREMENT: {
                 DataStructuresRequest restReq0 = new DataStructuresRequest();
@@ -341,15 +351,25 @@ public class GridJettyRestHandler extends AbstractHandler {
                 break;
             }
 
+            case CACHE_CONTAINS_KEY:
+            case CACHE_CONTAINS_KEYS:
             case CACHE_GET:
             case CACHE_GET_ALL:
+            case CACHE_GET_AND_PUT:
+            case CACHE_GET_AND_REPLACE:
+            case CACHE_PUT_IF_ABSENT:
+            case CACHE_GET_AND_PUT_IF_ABSENT:
             case CACHE_PUT:
             case CACHE_PUT_ALL:
             case CACHE_REMOVE:
+            case CACHE_REMOVE_VALUE:
+            case CACHE_REPLACE_VALUE:
+            case CACHE_GET_AND_REMOVE:
             case CACHE_REMOVE_ALL:
             case CACHE_ADD:
             case CACHE_CAS:
             case CACHE_METRICS:
+            case CACHE_SIZE:
             case CACHE_REPLACE:
             case CACHE_APPEND:
             case CACHE_PREPEND: {
@@ -370,7 +390,8 @@ public class GridJettyRestHandler extends AbstractHandler {
                 restReq0.cacheFlags(intValue("cacheFlags", params, 0));
                 restReq0.ttl(longValue("exp", params, null));
 
-                if (cmd == CACHE_GET_ALL || cmd == CACHE_PUT_ALL || cmd == CACHE_REMOVE_ALL) {
+                if (cmd == CACHE_GET_ALL || cmd == CACHE_PUT_ALL || cmd == CACHE_REMOVE_ALL ||
+                    cmd == CACHE_CONTAINS_KEYS) {
                     List<Object> keys = values("k", params);
                     List<Object> vals = values("v", params);
 
@@ -441,12 +462,53 @@ public class GridJettyRestHandler extends AbstractHandler {
                 break;
             }
 
+            case NAME:
             case VERSION: {
                 restReq = new GridRestRequest();
 
                 break;
             }
 
+            case EXECUTE_SQL_QUERY:
+            case EXECUTE_SQL_FIELDS_QUERY: {
+                RestSqlQueryRequest restReq0 = new RestSqlQueryRequest();
+
+                restReq0.sqlQuery((String) params.get("qry"));
+
+                restReq0.arguments(values("arg", params).toArray());
+
+                restReq0.typeName((String)params.get("type"));
+                restReq0.pageSize(Integer.parseInt((String) params.get("psz")));
+                restReq0.cacheName((String)params.get("cacheName"));
+
+                restReq = restReq0;
+
+                break;
+            }
+
+            case FETCH_SQL_QUERY: {
+                RestSqlQueryRequest restReq0 = new RestSqlQueryRequest();
+
+                restReq0.queryId(Long.parseLong((String)params.get("qryId")));
+                restReq0.pageSize(Integer.parseInt((String)params.get("psz")));
+                restReq0.cacheName((String)params.get("cacheName"));
+
+                restReq = restReq0;
+
+                break;
+            }
+
+            case CLOSE_SQL_QUERY: {
+                RestSqlQueryRequest restReq0 = new RestSqlQueryRequest();
+
+                restReq0.queryId(Long.parseLong((String)params.get("qryId")));
+                restReq0.cacheName((String)params.get("cacheName"));
+
+                restReq = restReq0;
+
+                break;
+            }
+
             default:
                 throw new IgniteCheckedException("Invalid command: " + cmd);
         }


[12/29] incubator-ignite git commit: #ignite-961: fix comments after review.

Posted by iv...@apache.org.
#ignite-961: fix comments after review.


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

Branch: refs/heads/ignite-961
Commit: f93ec6994b62ade48687cb9d4784588d366f8861
Parents: c99433b
Author: ivasilinets <iv...@gridgain.com>
Authored: Mon Jul 20 14:31:13 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Mon Jul 20 14:31:13 2015 +0300

----------------------------------------------------------------------
 .../JettyRestProcessorAbstractSelfTest.java     | 82 +++++++++++++++-----
 .../handlers/query/QueryCommandHandler.java     | 21 ++---
 2 files changed, 75 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f93ec699/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
index c6c8195..c6bf945 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
@@ -328,7 +328,7 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
         jsonEquals(ret,
             // getKey[12] is used since the order is not determined.
             cacheBulkPattern("\\{\\\"getKey[12]\\\":\\\"getVal[12]\\\"\\,\\\"getKey[12]\\\":\\\"getVal[12]\\\"\\}",
-            true));
+                true));
     }
 
     /**
@@ -1024,6 +1024,56 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
     /**
      * @throws Exception If failed.
      */
+    public void testQuery() throws Exception {
+        grid(0).cache(null).put("1", "1");
+        grid(0).cache(null).put("2", "2");
+        grid(0).cache(null).put("3", "3");
+
+        Map<String, String> params = new HashMap<>();
+        params.put("cmd", "qryexecute");
+        params.put("type", "String");
+        params.put("psz", "1");
+        params.put("qry", URLEncoder.encode("select * from String"));
+
+        String ret = content(params);
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        JSONObject json = JSONObject.fromObject(ret);
+
+        Integer qryId = (Integer)((Map)json.get("response")).get("queryId");
+
+        assertNotNull(qryId);
+
+        ret = content(F.asMap("cmd", "qryfetch", "psz", "1", "qryId", String.valueOf(qryId)));
+
+        json = JSONObject.fromObject(ret);
+
+        Integer qryId0 = (Integer)((Map)json.get("response")).get("queryId");
+
+        Boolean last = (Boolean)((Map)json.get("response")).get("last");
+
+        assertEquals(qryId0, qryId);
+        assertFalse(last);
+
+        ret = content(F.asMap("cmd", "qryfetch", "psz", "1", "qryId", String.valueOf(qryId)));
+
+        json = JSONObject.fromObject(ret);
+
+        qryId0 = (Integer)((Map)json.get("response")).get("queryId");
+
+        last = (Boolean)((Map)json.get("response")).get("last");
+
+        assertEquals(qryId0, qryId);
+        assertTrue(last);
+
+        assertFalse(queryCursorFound());
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
     public void testQueryClose() throws Exception {
         String qry = "salary > ? and salary <= ?";
 
@@ -1047,20 +1097,7 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
 
         assertEquals(1, items.size());
 
-        boolean found = false;
-
-        for (int i = 0; i < GRID_CNT; ++i) {
-            Map<GridRestCommand, GridRestCommandHandler> handlers =
-                GridTestUtils.getFieldValue(grid(i).context().rest(), "handlers");
-
-            GridRestCommandHandler qryHnd = handlers.get(GridRestCommand.CLOSE_SQL_QUERY);
-
-            ConcurrentHashMap<Long, Iterator> its = GridTestUtils.getFieldValue(qryHnd, "curs");
-
-            found |= its.size() != 0;
-        }
-
-        assertTrue(found);
+        assertTrue(queryCursorFound());
 
         Integer qryId = (Integer)((Map)json.get("response")).get("queryId");
 
@@ -1071,7 +1108,16 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
         assertNotNull(ret);
         assertTrue(!ret.isEmpty());
 
-        found = false;
+        assertFalse(queryCursorFound());
+    }
+
+    protected abstract String signature() throws Exception;
+
+    /**
+     * @return True if any query cursor is available.
+     */
+    private boolean queryCursorFound() {
+        boolean found = false;
 
         for (int i = 0; i < GRID_CNT; ++i) {
             Map<GridRestCommand, GridRestCommandHandler> handlers =
@@ -1084,11 +1130,9 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
             found |= its.size() != 0;
         }
 
-        assertFalse(found);
+        return found;
     }
 
-    protected abstract String signature() throws Exception;
-
     /**
      * Init cache.
      */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f93ec699/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
index 097c7aa..1a97995 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
@@ -113,7 +113,7 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
          * @param curs Queries cursors.
          */
         public ExecuteQueryCallable(GridKernalContext ctx, RestSqlQueryRequest req,
-                                    ConcurrentHashMap<Long, Iterator> curs, ConcurrentHashMap<Long, QueryCursor> qryCurs) {
+            ConcurrentHashMap<Long, Iterator> curs, ConcurrentHashMap<Long, QueryCursor> qryCurs) {
             this.ctx = ctx;
             this.req = req;
             this.curs = curs;
@@ -122,6 +122,8 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
 
         /** {@inheritDoc} */
         @Override public GridRestResponse call() throws Exception {
+            long qryId = qryIdGen.getAndIncrement();
+
             try {
                 Query qry;
 
@@ -140,14 +142,12 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
 
                 if (cache == null)
                     return new GridRestResponse(GridRestResponse.STATUS_FAILED,
-                        "No cache with name. [cacheName=" + req.cacheName() + "]");
+                        "No cache with name [cacheName=" + req.cacheName() + "]");
 
                 QueryCursor qryCur = cache.query(qry);
 
                 Iterator cur = qryCur.iterator();
 
-                long qryId = qryIdGen.getAndIncrement();
-
                 qryCurs.put(qryId, qryCur);
                 curs.put(qryId, cur);
 
@@ -156,6 +156,9 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
                 return new GridRestResponse(res);
             }
             catch (Exception e) {
+                qryCurs.remove(qryId);
+                curs.remove(qryId);
+
                 return new GridRestResponse(GridRestResponse.STATUS_FAILED, e.getMessage());
             }
         }
@@ -179,8 +182,8 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
          * @param curs Queries cursors.
          */
         public CloseQueryCallable(RestSqlQueryRequest req,
-                                  ConcurrentHashMap<Long, Iterator> curs,
-                                  ConcurrentHashMap<Long, QueryCursor> qryCurs) {
+            ConcurrentHashMap<Long, Iterator> curs,
+            ConcurrentHashMap<Long, QueryCursor> qryCurs) {
             this.req = req;
             this.curs = curs;
             this.qryCurs = qryCurs;
@@ -229,7 +232,7 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
          * @param curs Queries cursors.
          */
         public FetchQueryCallable(RestSqlQueryRequest req, ConcurrentHashMap<Long, Iterator> curs,
-                                  ConcurrentHashMap<Long, QueryCursor> qryCurs) {
+            ConcurrentHashMap<Long, QueryCursor> qryCurs) {
             this.req = req;
             this.curs = curs;
             this.qryCurs = qryCurs;
@@ -266,8 +269,8 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
      * @return Query result with items.
      */
     private static CacheQueryResult createQueryResult(ConcurrentHashMap<Long, QueryCursor> qryCurs,
-                                                      ConcurrentHashMap<Long, Iterator> curs, Iterator cur,
-                                                      RestSqlQueryRequest req, Long qryId) {
+        ConcurrentHashMap<Long, Iterator> curs, Iterator cur,
+        RestSqlQueryRequest req, Long qryId) {
         CacheQueryResult res = new CacheQueryResult();
 
         List<Object> items = new ArrayList<>();


[10/29] incubator-ignite git commit: 1.4.1-SNAPSHOT

Posted by iv...@apache.org.
1.4.1-SNAPSHOT


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

Branch: refs/heads/ignite-961
Commit: 0ac5fe7565a709b666c9d225574cca5bfbb38a95
Parents: cf08181
Author: Ignite Teamcity <ig...@apache.org>
Authored: Mon Jul 20 13:59:53 2015 +0300
Committer: Ignite Teamcity <ig...@apache.org>
Committed: Mon Jul 20 13:59:53 2015 +0300

----------------------------------------------------------------------
 pom.xml | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0ac5fe75/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index a6ca9f5..2ae259c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -607,12 +607,12 @@
                                         </copy>
 
                                         <!-- appending filename to md5 and sha1 files. to be improved. -->
-                                        <echo file="${basedir}/target/site/${project.artifactId}-fabric-${project.version}-bin.zip.md5" append="true" message="  ${project.artifactId}-fabric-${project.version}-bin.zip" />
-                                        <echo file="${basedir}/target/site/${project.artifactId}-fabric-${project.version}-bin.zip.sha1" append="true" message="  ${project.artifactId}-fabric-${project.version}-bin.zip" />
-                                        <echo file="${basedir}/target/site/${project.artifactId}-hadoop-${project.version}-bin.zip.md5" append="true" message="  ${project.artifactId}-hadoop-${project.version}-bin.zip" />
-                                        <echo file="${basedir}/target/site/${project.artifactId}-hadoop-${project.version}-bin.zip.sha1" append="true" message="  ${project.artifactId}-hadoop-${project.version}-bin.zip" />
-                                        <echo file="${basedir}/target/site/${project.artifactId}-${project.version}-src.zip.md5" append="true" message="  ${project.artifactId}-${project.version}-src.zip" />
-                                        <echo file="${basedir}/target/site/${project.artifactId}-${project.version}-src.zip.sha1" append="true" message="  ${project.artifactId}-${project.version}-src.zip" />
+                                        <echo file="${basedir}/target/site/${project.artifactId}-fabric-${project.version}-bin.zip.md5" append="true" message=" ${project.artifactId}-fabric-${project.version}-bin.zip" />
+                                        <echo file="${basedir}/target/site/${project.artifactId}-fabric-${project.version}-bin.zip.sha1" append="true" message=" ${project.artifactId}-fabric-${project.version}-bin.zip" />
+                                        <echo file="${basedir}/target/site/${project.artifactId}-hadoop-${project.version}-bin.zip.md5" append="true" message=" ${project.artifactId}-hadoop-${project.version}-bin.zip" />
+                                        <echo file="${basedir}/target/site/${project.artifactId}-hadoop-${project.version}-bin.zip.sha1" append="true" message=" ${project.artifactId}-hadoop-${project.version}-bin.zip" />
+                                        <echo file="${basedir}/target/site/${project.artifactId}-${project.version}-src.zip.md5" append="true" message=" ${project.artifactId}-${project.version}-src.zip" />
+                                        <echo file="${basedir}/target/site/${project.artifactId}-${project.version}-src.zip.sha1" append="true" message=" ${project.artifactId}-${project.version}-src.zip" />
                                     </target>
                                 </configuration>
                             </execution>


[21/29] incubator-ignite git commit: #ignite-961-master: small fixes

Posted by iv...@apache.org.
#ignite-961-master: small fixes


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

Branch: refs/heads/ignite-961
Commit: ec76ec75884e066346495e17952feebbd1ddd190
Parents: dd9999d
Author: ivasilinets <iv...@gridgain.com>
Authored: Mon Jul 20 22:45:51 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Mon Jul 20 22:45:51 2015 +0300

----------------------------------------------------------------------
 .../org/apache/ignite/internal/IgniteKernal.java   |  4 +---
 .../handlers/cache/GridCacheCommandHandler.java    | 17 ++++++++++++-----
 2 files changed, 13 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ec76ec75/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index 7fd75ce..8a16e48 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -439,8 +439,7 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
         assert cfg != null;
 
         return F.transform(cfg.getUserAttributes().entrySet(), new C1<Map.Entry<String, ?>, String>() {
-            @Override
-            public String apply(Map.Entry<String, ?> e) {
+            @Override public String apply(Map.Entry<String, ?> e) {
                 return e.getKey() + ", " + e.getValue().toString();
             }
         });
@@ -2466,7 +2465,6 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
         }
     }
 
-
     /** {@inheritDoc} */
     @Override public <K, V> IgniteCache<K, V> getOrCreateCache(String cacheName) {
         guard();

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ec76ec75/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
index 883a2bf..2d75341 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
@@ -172,11 +172,11 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
                 case GET_OR_CREATE_CACHE: {
                     fut = new GetOrCreateCacheClosure(cacheName).apply(ctx).chain(
                         new CX1<IgniteInternalFuture<?>, GridRestResponse>() {
-                        @Override public GridRestResponse applyx(IgniteInternalFuture<?> f)
-                            throws IgniteCheckedException {
-                            return new GridRestResponse(f.get());
-                        }
-                    });
+                            @Override public GridRestResponse applyx(IgniteInternalFuture<?> f)
+                                throws IgniteCheckedException {
+                                return new GridRestResponse(f.get());
+                            }
+                        });
 
                     break;
                 }
@@ -1353,7 +1353,12 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
      * Destroy cache callable.
      */
     private static class DestroyCacheCommand extends GetOrCreateCacheClosure {
+        /** */
+        private static final long serialVersionUID = 0L;
 
+        /**
+         * @param cacheName Cache name.
+         */
         public DestroyCacheCommand(String cacheName) {
             super(cacheName);
         }
@@ -1369,6 +1374,8 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
      */
     private static class GetOrCreateCacheClosure implements
         IgniteClosure<GridKernalContext, IgniteInternalFuture<?>> {
+        /** */
+        private static final long serialVersionUID = 0L;
 
         /** Cache name. */
         protected String cacheName;


[08/29] incubator-ignite git commit: # master minor

Posted by iv...@apache.org.
# master minor


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

Branch: refs/heads/ignite-961
Commit: 7494a86b9ce166e547e7e5cad14f7202ab597b97
Parents: d8f86f1
Author: sboikov <sb...@gridgain.com>
Authored: Mon Jul 20 12:31:01 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Mon Jul 20 12:36:02 2015 +0300

----------------------------------------------------------------------
 .../cache/distributed/dht/GridDhtTxPrepareFuture.java       | 9 ++++-----
 .../near/GridCachePartitionedMultiNodeFullApiSelfTest.java  | 4 +++-
 2 files changed, 7 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7494a86b/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 af0fbdf..6efa4d8 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
@@ -256,7 +256,7 @@ public final class GridDhtTxPrepareFuture extends GridCompoundFuture<IgniteInter
                 MiniFuture f = (MiniFuture)fut;
 
                 if (f.node().id().equals(nodeId)) {
-                    f.onResult(new ClusterTopologyCheckedException("Remote node left grid: " + nodeId));
+                    f.onNodeLeft(new ClusterTopologyCheckedException("Remote node left grid: " + nodeId));
 
                     return true;
                 }
@@ -873,12 +873,11 @@ public final class GridDhtTxPrepareFuture extends GridCompoundFuture<IgniteInter
 
                     assert req.transactionNodes() != null;
 
-                    //noinspection TryWithIdenticalCatches
                     try {
                         cctx.io().send(n, req, tx.ioPolicy());
                     }
                     catch (ClusterTopologyCheckedException e) {
-                        fut.onResult(e);
+                        fut.onNodeLeft(e);
                     }
                     catch (IgniteCheckedException e) {
                         fut.onResult(e);
@@ -933,7 +932,7 @@ public final class GridDhtTxPrepareFuture extends GridCompoundFuture<IgniteInter
                             cctx.io().send(nearMapping.node(), req, tx.system() ? UTILITY_CACHE_POOL : SYSTEM_POOL);
                         }
                         catch (ClusterTopologyCheckedException e) {
-                            fut.onResult(e);
+                            fut.onNodeLeft(e);
                         }
                         catch (IgniteCheckedException e) {
                             fut.onResult(e);
@@ -1148,7 +1147,7 @@ public final class GridDhtTxPrepareFuture extends GridCompoundFuture<IgniteInter
         /**
          * @param e Node failure.
          */
-        void onResult(ClusterTopologyCheckedException e) {
+        void onNodeLeft(ClusterTopologyCheckedException e) {
             if (log.isDebugEnabled())
                 log.debug("Remote node left grid while sending or waiting for reply (will ignore): " + this);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7494a86b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeFullApiSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeFullApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeFullApiSelfTest.java
index a5e7a31..7572aaf 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeFullApiSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeFullApiSelfTest.java
@@ -372,7 +372,9 @@ public class GridCachePartitionedMultiNodeFullApiSelfTest extends GridCacheParti
         boolean nearEnabled = cache2.getConfiguration(CacheConfiguration.class).getNearConfiguration() != null;
 
         assertEquals(nearEnabled ? 2 : 0, cache2.localSize(NEAR));
-        assertEquals(0, cache2.localSize(CachePeekMode.ALL) - cache2.localSize(NEAR));
+
+        if (cacheMode() != REPLICATED)
+            assertEquals(0, cache2.localSize(CachePeekMode.ALL) - cache2.localSize(NEAR));
     }
 
     /**


[09/29] incubator-ignite git commit: Merge remote-tracking branch 'origin/master'

Posted by iv...@apache.org.
Merge remote-tracking branch 'origin/master'


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

Branch: refs/heads/ignite-961
Commit: cf08181144e4a0394cedffd844988cf7fdc75093
Parents: 7494a86 7ae2b0a
Author: sboikov <sb...@gridgain.com>
Authored: Mon Jul 20 12:37:32 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Mon Jul 20 12:37:32 2015 +0300

----------------------------------------------------------------------
 .../ignite/internal/processors/cache/GridCacheAdapter.java       | 2 +-
 .../ignite/internal/processors/cache/IgniteCacheProxy.java       | 2 +-
 .../ignite/internal/processors/cache/IgniteInternalCache.java    | 1 +
 .../main/java/org/apache/ignite/internal/util/IgniteUtils.java   | 4 ++--
 4 files changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------



[28/29] incubator-ignite git commit: Merge remote-tracking branch 'remotes/origin/master' into ignite-961

Posted by iv...@apache.org.
Merge remote-tracking branch 'remotes/origin/master' into ignite-961


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

Branch: refs/heads/ignite-961
Commit: 4e2f26b799d099f5ef99a97108f53eeb12e48b96
Parents: 72b91c1 83bba05
Author: ivasilinets <iv...@gridgain.com>
Authored: Tue Jul 21 13:52:35 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Tue Jul 21 13:52:35 2015 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCacheAdapter.java      |  2 +-
 .../processors/cache/IgniteCacheProxy.java      |  2 +-
 .../processors/cache/IgniteInternalCache.java   |  1 +
 .../distributed/dht/GridDhtTxPrepareFuture.java | 16 ++--
 .../ignite/internal/util/IgniteUtils.java       | 25 ++++--
 .../ignite/internal/util/nio/GridNioServer.java |  9 ++
 .../util/nio/GridSelectorNioSessionImpl.java    |  8 ++
 .../IgniteClientReconnectFailoverTest.java      |  6 ++
 .../cache/CacheAffinityCallSelfTest.java        | 10 ++-
 .../IgniteCachePutRetryAbstractSelfTest.java    | 52 +++++++-----
 ...gniteCachePutRetryTransactionalSelfTest.java | 17 ++--
 ...achePartitionedMultiNodeFullApiSelfTest.java |  4 +-
 .../internal/util/nio/GridNioSelfTest.java      | 88 ++++++++++++++++++--
 .../internal/util/nio/GridNioSslSelfTest.java   | 16 ++--
 .../testframework/junits/GridAbstractTest.java  |  3 +-
 pom.xml                                         | 12 +--
 16 files changed, 199 insertions(+), 72 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4e2f26b7/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4e2f26b7/pom.xml
----------------------------------------------------------------------


[23/29] incubator-ignite git commit: #master: fix client tests.

Posted by iv...@apache.org.
#master: fix client tests.


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

Branch: refs/heads/ignite-961
Commit: 9aa928c2c0e7fc0f88e347a15d8f404864e97ff2
Parents: 79712aa
Author: ivasilinets <iv...@gridgain.com>
Authored: Tue Jul 21 10:59:11 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Tue Jul 21 10:59:11 2015 +0300

----------------------------------------------------------------------
 .../internal/processors/cache/CacheAffinityCallSelfTest.java     | 4 ----
 .../org/apache/ignite/testframework/junits/GridAbstractTest.java | 3 ++-
 2 files changed, 2 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9aa928c2/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAffinityCallSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAffinityCallSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAffinityCallSelfTest.java
index e107c21..befd8c7 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAffinityCallSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAffinityCallSelfTest.java
@@ -143,10 +143,6 @@ public class CacheAffinityCallSelfTest extends GridCommonAbstractTest {
                 e.getMessage().contains("Failed to execute task, client node disconnected."));
         }
 
-        startGrid(0);
-
-        U.sleep(3000);
-
         stopAllGrids();
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9aa928c2/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
index 9a55ccf..d6591cd 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
@@ -753,7 +753,8 @@ public abstract class GridAbstractTest extends TestCase {
 
             assert ignite != null : "Ignite returned null grid for name: " + gridName;
 
-            info(">>> Stopping grid [name=" + ignite.name() + ", id=" + ignite.cluster().localNode().id() + ']');
+            info(">>> Stopping grid [name=" + ignite.name() + ", id=" +
+                ((IgniteKernal)ignite).context().localNodeId() + ']');
 
             if (!isRemoteJvm(gridName))
                 G.stop(gridName, cancel);


[25/29] incubator-ignite git commit: # ignite-961 review

Posted by iv...@apache.org.
# ignite-961 review


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

Branch: refs/heads/ignite-961
Commit: ed1482934e777d9a0aa99aa1fefd2f73231a6b2a
Parents: 829311d
Author: sboikov <sb...@gridgain.com>
Authored: Tue Jul 21 11:55:22 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Tue Jul 21 11:55:22 2015 +0300

----------------------------------------------------------------------
 .../apache/ignite/internal/IgniteKernal.java    |  8 ++--
 .../handlers/cache/GridCacheCommandHandler.java | 48 +-------------------
 2 files changed, 6 insertions(+), 50 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ed148293/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index 8a16e48..af38b20 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -2454,7 +2454,7 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
      * @param cacheName Cache name.
      * @return Ignite future.
      */
-    public IgniteInternalFuture destroyCacheAsync(String cacheName) {
+    public IgniteInternalFuture<?> destroyCacheAsync(String cacheName) {
         guard();
 
         try {
@@ -2487,14 +2487,14 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
      * @param cacheName Cache name.
      * @return Future that will be completed when cache is deployed.
      */
-    public IgniteInternalFuture getOrCreateCacheAsync(String cacheName) {
+    public IgniteInternalFuture<?> getOrCreateCacheAsync(String cacheName) {
         guard();
 
         try {
             if (ctx.cache().cache(cacheName) == null)
-                ctx.cache().getOrCreateFromTemplate(cacheName);
+                return ctx.cache().getOrCreateFromTemplate(cacheName);
 
-            return ctx.cache().dynamicStartCache(null, cacheName, null, false, true);
+            return new GridFinishedFuture<>();
         }
         finally {
             unguard();

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/ed148293/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
index 2d75341..64f595d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
@@ -158,7 +158,7 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
 
             switch (cmd) {
                 case DESTROY_CACHE: {
-                    fut = new DestroyCacheCommand(cacheName).apply(ctx).chain(
+                    fut = ((IgniteKernal)ctx.grid()).destroyCacheAsync(cacheName).chain(
                         new CX1<IgniteInternalFuture<?>, GridRestResponse>() {
                             @Override public GridRestResponse applyx(IgniteInternalFuture<?> f)
                                 throws IgniteCheckedException {
@@ -170,7 +170,7 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
                 }
 
                 case GET_OR_CREATE_CACHE: {
-                    fut = new GetOrCreateCacheClosure(cacheName).apply(ctx).chain(
+                    fut = ((IgniteKernal)ctx.grid()).getOrCreateCacheAsync(cacheName).chain(
                         new CX1<IgniteInternalFuture<?>, GridRestResponse>() {
                             @Override public GridRestResponse applyx(IgniteInternalFuture<?> f)
                                 throws IgniteCheckedException {
@@ -1348,48 +1348,4 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
             return c.sizeAsync(new CachePeekMode[]{CachePeekMode.PRIMARY});
         }
     }
-
-    /**
-     * Destroy cache callable.
-     */
-    private static class DestroyCacheCommand extends GetOrCreateCacheClosure {
-        /** */
-        private static final long serialVersionUID = 0L;
-
-        /**
-         * @param cacheName Cache name.
-         */
-        public DestroyCacheCommand(String cacheName) {
-            super(cacheName);
-        }
-
-        /** {@inheritDoc} */
-        @Override public IgniteInternalFuture<?> apply(GridKernalContext ctx) {
-            return ((IgniteKernal)ctx.grid()).destroyCacheAsync(cacheName);
-        }
-    }
-
-    /**
-     * Get or create cache callable.
-     */
-    private static class GetOrCreateCacheClosure implements
-        IgniteClosure<GridKernalContext, IgniteInternalFuture<?>> {
-        /** */
-        private static final long serialVersionUID = 0L;
-
-        /** Cache name. */
-        protected String cacheName;
-
-        /**
-         * @param cacheName Cache name.
-         */
-        public GetOrCreateCacheClosure(String cacheName) {
-            this.cacheName = cacheName;
-        }
-
-        /** {@inheritDoc} */
-        @Override public IgniteInternalFuture<?> apply(GridKernalContext ctx) {
-            return ((IgniteKernal)ctx.grid()).getOrCreateCacheAsync(cacheName);
-        }
-    }
 }


[27/29] incubator-ignite git commit: #ignite-961: add test for security.

Posted by iv...@apache.org.
#ignite-961: add test for security.


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

Branch: refs/heads/ignite-961
Commit: cab277b8500fc69db5e2ec6f87ebcc5190367ad8
Parents: ed14829
Author: ivasilinets <iv...@gridgain.com>
Authored: Tue Jul 21 13:02:23 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Tue Jul 21 13:02:23 2015 +0300

----------------------------------------------------------------------
 .../JettyRestProcessorAbstractSelfTest.java     |  4 +--
 .../processors/rest/GridRestProcessor.java      | 13 +++++++---
 .../http/jetty/GridJettyRestHandler.java        | 27 ++++++++++++++++----
 3 files changed, 33 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cab277b8/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
index 7354214..55d60d2 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
@@ -39,7 +39,7 @@ import static org.apache.ignite.IgniteSystemProperties.*;
  * Tests for Jetty REST protocol.
  */
 @SuppressWarnings("unchecked")
-abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorSelfTest {
+public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorSelfTest {
     /** Grid count. */
     private static final int GRID_CNT = 3;
 
@@ -80,7 +80,7 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
      * @return Returned content.
      * @throws Exception If failed.
      */
-    private String content(Map<String, String> params) throws Exception {
+    protected String content(Map<String, String> params) throws Exception {
         String addr = "http://" + LOC_HOST + ":" + restPort() + "/ignite?";
 
         for (Map.Entry<String, String> e : params.entrySet())

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cab277b8/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
index 079794e..4549db0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
@@ -539,6 +539,15 @@ public class GridRestProcessor extends GridProcessorAdapter {
 
                 break;
 
+            case EXECUTE_SQL_QUERY:
+            case EXECUTE_SQL_FIELDS_QUERY:
+            case CLOSE_SQL_QUERY:
+            case FETCH_SQL_QUERY:
+                perm = SecurityPermission.CACHE_READ;
+                name = ((RestSqlQueryRequest)req).cacheName();
+
+                break;
+
             case CACHE_PUT:
             case CACHE_ADD:
             case CACHE_PUT_ALL:
@@ -585,10 +594,6 @@ public class GridRestProcessor extends GridProcessorAdapter {
             case LOG:
             case GET_OR_CREATE_CACHE:
             case DESTROY_CACHE:
-            case EXECUTE_SQL_QUERY:
-            case EXECUTE_SQL_FIELDS_QUERY:
-            case CLOSE_SQL_QUERY:
-            case FETCH_SQL_QUERY:
                 break;
 
             default:

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/cab277b8/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
----------------------------------------------------------------------
diff --git a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
index d8bcac2..bf0f2c8 100644
--- a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
+++ b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
@@ -477,8 +477,13 @@ public class GridJettyRestHandler extends AbstractHandler {
 
                 restReq0.arguments(values("arg", params).toArray());
 
-                restReq0.typeName((String)params.get("type"));
-                restReq0.pageSize(Integer.parseInt((String) params.get("psz")));
+                restReq0.typeName((String) params.get("type"));
+
+                String psz = (String) params.get("psz");
+
+                if (psz != null)
+                    restReq0.pageSize(Integer.parseInt(psz));
+
                 restReq0.cacheName((String)params.get("cacheName"));
 
                 restReq = restReq0;
@@ -489,8 +494,16 @@ public class GridJettyRestHandler extends AbstractHandler {
             case FETCH_SQL_QUERY: {
                 RestSqlQueryRequest restReq0 = new RestSqlQueryRequest();
 
-                restReq0.queryId(Long.parseLong((String)params.get("qryId")));
-                restReq0.pageSize(Integer.parseInt((String)params.get("psz")));
+                String qryId = (String) params.get("qryId");
+
+                if (qryId != null)
+                    restReq0.queryId(Long.parseLong(qryId));
+
+                String psz = (String) params.get("psz");
+
+                if (psz != null)
+                    restReq0.pageSize(Integer.parseInt(psz));
+
                 restReq0.cacheName((String)params.get("cacheName"));
 
                 restReq = restReq0;
@@ -501,7 +514,11 @@ public class GridJettyRestHandler extends AbstractHandler {
             case CLOSE_SQL_QUERY: {
                 RestSqlQueryRequest restReq0 = new RestSqlQueryRequest();
 
-                restReq0.queryId(Long.parseLong((String)params.get("qryId")));
+                String qryId = (String) params.get("qryId");
+
+                if (qryId != null)
+                    restReq0.queryId(Long.parseLong(qryId));
+
                 restReq0.cacheName((String)params.get("cacheName"));
 
                 restReq = restReq0;


[19/29] incubator-ignite git commit: #master: fix affinityCall tests.

Posted by iv...@apache.org.
#master: fix affinityCall tests.


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

Branch: refs/heads/ignite-961
Commit: f62744e09e7afad550ddbf4a65e9db5cf883f8ee
Parents: 7ae5ce6
Author: ivasilinets <iv...@gridgain.com>
Authored: Mon Jul 20 19:42:05 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Mon Jul 20 19:42:05 2015 +0300

----------------------------------------------------------------------
 .../internal/processors/cache/CacheAffinityCallSelfTest.java     | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f62744e0/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAffinityCallSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAffinityCallSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAffinityCallSelfTest.java
index 90160e1..e107c21 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAffinityCallSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAffinityCallSelfTest.java
@@ -145,9 +145,9 @@ public class CacheAffinityCallSelfTest extends GridCommonAbstractTest {
 
         startGrid(0);
 
-        stopGrid(SERVERS_COUNT);
+        U.sleep(3000);
 
-        stopGrid(0);
+        stopAllGrids();
     }
 
     /**


[20/29] incubator-ignite git commit: Merge remote-tracking branch 'remotes/origin/master' into ignite-961-master

Posted by iv...@apache.org.
Merge remote-tracking branch 'remotes/origin/master' into ignite-961-master


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

Branch: refs/heads/ignite-961
Commit: dd9999d9d0da7bdbe241789dd425ce5f662245ac
Parents: 268f30a f62744e
Author: ivasilinets <iv...@gridgain.com>
Authored: Mon Jul 20 22:41:11 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Mon Jul 20 22:41:11 2015 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCacheAdapter.java      |  2 +-
 .../processors/cache/IgniteCacheProxy.java      |  2 +-
 .../processors/cache/IgniteInternalCache.java   |  1 +
 .../distributed/dht/GridDhtTxPrepareFuture.java |  9 ++--
 .../ignite/internal/util/IgniteUtils.java       |  4 +-
 .../IgniteClientReconnectFailoverTest.java      |  6 +++
 .../cache/CacheAffinityCallSelfTest.java        | 14 ++++--
 .../IgniteCachePutRetryAbstractSelfTest.java    | 52 +++++++++++++-------
 ...gniteCachePutRetryTransactionalSelfTest.java | 17 ++++---
 ...achePartitionedMultiNodeFullApiSelfTest.java |  4 +-
 pom.xml                                         | 12 ++---
 11 files changed, 78 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd9999d9/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
----------------------------------------------------------------------


[17/29] incubator-ignite git commit: #ignite-961: wip.

Posted by iv...@apache.org.
#ignite-961: wip.


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

Branch: refs/heads/ignite-961
Commit: 268f30acb0493bc0ec5ce9b76bdaeb85aa68bf68
Parents: 09d598e
Author: ivasilinets <iv...@gridgain.com>
Authored: Mon Jul 20 16:16:38 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Mon Jul 20 16:16:38 2015 +0300

----------------------------------------------------------------------
 .../apache/ignite/internal/IgniteKernal.java    | 46 +++++++++++++----
 .../handlers/cache/GridCacheCommandHandler.java | 53 +++++++++-----------
 2 files changed, 60 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/268f30ac/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index c411f2e..7fd75ce 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -439,7 +439,8 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
         assert cfg != null;
 
         return F.transform(cfg.getUserAttributes().entrySet(), new C1<Map.Entry<String, ?>, String>() {
-            @Override public String apply(Map.Entry<String, ?> e) {
+            @Override
+            public String apply(Map.Entry<String, ?> e) {
                 return e.getKey() + ", " + e.getValue().toString();
             }
         });
@@ -2440,25 +2441,32 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
 
     /** {@inheritDoc} */
     @Override public void destroyCache(String cacheName) {
-        guard();
-
-        IgniteInternalFuture<?> stopFut;
+        IgniteInternalFuture stopFut = destroyCacheAsync(cacheName);
 
         try {
-            stopFut = ctx.cache().dynamicDestroyCache(cacheName);
+            stopFut.get();
         }
-        finally {
-            unguard();
+        catch (IgniteCheckedException e) {
+            throw CU.convertToCacheException(e);
         }
+    }
+
+    /**
+     * @param cacheName Cache name.
+     * @return Ignite future.
+     */
+    public IgniteInternalFuture destroyCacheAsync(String cacheName) {
+        guard();
 
         try {
-            stopFut.get();
+            return ctx.cache().dynamicDestroyCache(cacheName);
         }
-        catch (IgniteCheckedException e) {
-            throw CU.convertToCacheException(e);
+        finally {
+            unguard();
         }
     }
 
+
     /** {@inheritDoc} */
     @Override public <K, V> IgniteCache<K, V> getOrCreateCache(String cacheName) {
         guard();
@@ -2477,6 +2485,24 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
         }
     }
 
+    /**
+     * @param cacheName Cache name.
+     * @return Future that will be completed when cache is deployed.
+     */
+    public IgniteInternalFuture getOrCreateCacheAsync(String cacheName) {
+        guard();
+
+        try {
+            if (ctx.cache().cache(cacheName) == null)
+                ctx.cache().getOrCreateFromTemplate(cacheName);
+
+            return ctx.cache().dynamicStartCache(null, cacheName, null, false, true);
+        }
+        finally {
+            unguard();
+        }
+    }
+
     /** {@inheritDoc} */
     @Override public <K, V> void addCacheConfiguration(CacheConfiguration<K, V> cacheCfg) {
         A.notNull(cacheCfg, "cacheCfg");

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/268f30ac/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
index c20360a..883a2bf 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
@@ -158,13 +158,25 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
 
             switch (cmd) {
                 case DESTROY_CACHE: {
-                    fut = ctx.closure().callLocalSafe(new DestroyCacheCommand(ctx, cacheName));
+                    fut = new DestroyCacheCommand(cacheName).apply(ctx).chain(
+                        new CX1<IgniteInternalFuture<?>, GridRestResponse>() {
+                            @Override public GridRestResponse applyx(IgniteInternalFuture<?> f)
+                                throws IgniteCheckedException {
+                                return new GridRestResponse(f.get());
+                            }
+                        });
 
                     break;
                 }
 
                 case GET_OR_CREATE_CACHE: {
-                    fut = ctx.closure().callLocalSafe(new GetOrCreateCacheCallable(ctx, cacheName));
+                    fut = new GetOrCreateCacheClosure(cacheName).apply(ctx).chain(
+                        new CX1<IgniteInternalFuture<?>, GridRestResponse>() {
+                        @Override public GridRestResponse applyx(IgniteInternalFuture<?> f)
+                            throws IgniteCheckedException {
+                            return new GridRestResponse(f.get());
+                        }
+                    });
 
                     break;
                 }
@@ -1340,54 +1352,37 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
     /**
      * Destroy cache callable.
      */
-    private static class DestroyCacheCommand extends GetOrCreateCacheCallable {
+    private static class DestroyCacheCommand extends GetOrCreateCacheClosure {
 
-        public DestroyCacheCommand(GridKernalContext ctx, String cacheName) {
-            super(ctx, cacheName);
+        public DestroyCacheCommand(String cacheName) {
+            super(cacheName);
         }
 
         /** {@inheritDoc} */
-        @Override public GridRestResponse call() throws Exception {
-            try {
-                ctx.grid().destroyCache(cacheName);
-
-                return new GridRestResponse();
-            }
-            catch (Exception e) {
-                return new GridRestResponse(GridRestResponse.STATUS_FAILED, e.getMessage());
-            }
+        @Override public IgniteInternalFuture<?> apply(GridKernalContext ctx) {
+            return ((IgniteKernal)ctx.grid()).destroyCacheAsync(cacheName);
         }
     }
 
     /**
      * Get or create cache callable.
      */
-    private static class GetOrCreateCacheCallable implements Callable<GridRestResponse> {
-        /** Kernal context. */
-        protected GridKernalContext ctx;
+    private static class GetOrCreateCacheClosure implements
+        IgniteClosure<GridKernalContext, IgniteInternalFuture<?>> {
 
         /** Cache name. */
         protected String cacheName;
 
         /**
-         * @param ctx Kernal context.
          * @param cacheName Cache name.
          */
-        public GetOrCreateCacheCallable(GridKernalContext ctx, String cacheName) {
-            this.ctx = ctx;
+        public GetOrCreateCacheClosure(String cacheName) {
             this.cacheName = cacheName;
         }
 
         /** {@inheritDoc} */
-        @Override public GridRestResponse call() throws Exception {
-            try {
-                ctx.grid().getOrCreateCache(cacheName);
-
-                return new GridRestResponse();
-            }
-            catch (Exception e) {
-                return new GridRestResponse(GridRestResponse.STATUS_FAILED, e.getMessage());
-            }
+        @Override public IgniteInternalFuture<?> apply(GridKernalContext ctx) {
+            return ((IgniteKernal)ctx.grid()).getOrCreateCacheAsync(cacheName);
         }
     }
 }


[15/29] incubator-ignite git commit: #ignite-961: fix comments after review.

Posted by iv...@apache.org.
#ignite-961: fix comments after review.


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

Branch: refs/heads/ignite-961
Commit: 65c72c5b58bf483d10a6d08513c6848164924fb4
Parents: f93ec69
Author: ivasilinets <iv...@gridgain.com>
Authored: Mon Jul 20 14:43:52 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Mon Jul 20 14:43:52 2015 +0300

----------------------------------------------------------------------
 .../JettyRestProcessorAbstractSelfTest.java     |  2 +-
 .../handlers/query/QueryCommandHandler.java     | 71 +++++++-------------
 2 files changed, 25 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65c72c5b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
index c6bf945..f1cfe96 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
@@ -1125,7 +1125,7 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
 
             GridRestCommandHandler qryHnd = handlers.get(GridRestCommand.CLOSE_SQL_QUERY);
 
-            ConcurrentHashMap<Long, Iterator> its = GridTestUtils.getFieldValue(qryHnd, "curs");
+            ConcurrentHashMap<Long, Iterator> its = GridTestUtils.getFieldValue(qryHnd, "qryCurs");
 
             found |= its.size() != 0;
         }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65c72c5b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
index 1a97995..defca37 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
@@ -25,6 +25,7 @@ import org.apache.ignite.internal.processors.rest.handlers.*;
 import org.apache.ignite.internal.processors.rest.request.*;
 import org.apache.ignite.internal.util.future.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
+import org.apache.ignite.lang.*;
 
 import java.util.*;
 import java.util.concurrent.*;
@@ -45,11 +46,8 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
     /** Query ID sequence. */
     private static final AtomicLong qryIdGen = new AtomicLong();
 
-    /** Current queries. */
-    private final ConcurrentHashMap<Long, Iterator> curs = new ConcurrentHashMap<>();
-
     /** Current queries cursors. */
-    private final ConcurrentHashMap<Long, QueryCursor> qryCurs = new ConcurrentHashMap<>();
+    private final ConcurrentHashMap<Long, IgniteBiTuple<QueryCursor, Iterator>> qryCurs = new ConcurrentHashMap<>();
 
     /**
      * @param ctx Context.
@@ -74,17 +72,17 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
             case EXECUTE_SQL_QUERY:
             case EXECUTE_SQL_FIELDS_QUERY: {
                 return ctx.closure().callLocalSafe(
-                    new ExecuteQueryCallable(ctx, (RestSqlQueryRequest)req, curs, qryCurs), false);
+                    new ExecuteQueryCallable(ctx, (RestSqlQueryRequest)req, qryCurs), false);
             }
 
             case FETCH_SQL_QUERY: {
                 return ctx.closure().callLocalSafe(
-                    new FetchQueryCallable((RestSqlQueryRequest)req, curs, qryCurs), false);
+                    new FetchQueryCallable((RestSqlQueryRequest)req, qryCurs), false);
             }
 
             case CLOSE_SQL_QUERY: {
                 return ctx.closure().callLocalSafe(
-                    new CloseQueryCallable((RestSqlQueryRequest)req, curs, qryCurs), false);
+                    new CloseQueryCallable((RestSqlQueryRequest)req, qryCurs), false);
             }
         }
 
@@ -101,22 +99,18 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
         /** Execute query request. */
         private RestSqlQueryRequest req;
 
-        /** Queries iterators. */
-        private ConcurrentHashMap<Long, Iterator> curs;
-
         /** Queries cursors. */
-        private ConcurrentHashMap<Long, QueryCursor> qryCurs;
+        private ConcurrentHashMap<Long, IgniteBiTuple<QueryCursor, Iterator>> qryCurs;
 
         /**
          * @param ctx Kernal context.
          * @param req Execute query request.
-         * @param curs Queries cursors.
+         * @param qryCurs Queries cursors.
          */
         public ExecuteQueryCallable(GridKernalContext ctx, RestSqlQueryRequest req,
-            ConcurrentHashMap<Long, Iterator> curs, ConcurrentHashMap<Long, QueryCursor> qryCurs) {
+            ConcurrentHashMap<Long, IgniteBiTuple<QueryCursor, Iterator>> qryCurs) {
             this.ctx = ctx;
             this.req = req;
-            this.curs = curs;
             this.qryCurs = qryCurs;
         }
 
@@ -148,16 +142,14 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
 
                 Iterator cur = qryCur.iterator();
 
-                qryCurs.put(qryId, qryCur);
-                curs.put(qryId, cur);
+                qryCurs.put(qryId, new IgniteBiTuple<>(qryCur, cur));
 
-                CacheQueryResult res = createQueryResult(qryCurs, curs, cur, req, qryId);
+                CacheQueryResult res = createQueryResult(qryCurs, cur, req, qryId);
 
                 return new GridRestResponse(res);
             }
             catch (Exception e) {
                 qryCurs.remove(qryId);
-                curs.remove(qryId);
 
                 return new GridRestResponse(GridRestResponse.STATUS_FAILED, e.getMessage());
             }
@@ -171,28 +163,23 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
         /** Execute query request. */
         private RestSqlQueryRequest req;
 
-        /** Queries iterators. */
-        private ConcurrentHashMap<Long, Iterator> curs;
-
         /** Queries cursors. */
-        private ConcurrentHashMap<Long, QueryCursor> qryCurs;
+        private final ConcurrentHashMap<Long, IgniteBiTuple<QueryCursor, Iterator>> qryCurs;
 
         /**
          * @param req Execute query request.
-         * @param curs Queries cursors.
+         * @param qryCurs Queries cursors.
          */
         public CloseQueryCallable(RestSqlQueryRequest req,
-            ConcurrentHashMap<Long, Iterator> curs,
-            ConcurrentHashMap<Long, QueryCursor> qryCurs) {
+            ConcurrentHashMap<Long, IgniteBiTuple<QueryCursor, Iterator>> qryCurs) {
             this.req = req;
-            this.curs = curs;
             this.qryCurs = qryCurs;
         }
 
         /** {@inheritDoc} */
         @Override public GridRestResponse call() throws Exception {
             try {
-                QueryCursor cur = qryCurs.get(req.queryId());
+                QueryCursor cur = qryCurs.get(req.queryId()).get1();
 
                 if (cur == null)
                     return new GridRestResponse(GridRestResponse.STATUS_FAILED,
@@ -201,13 +188,11 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
                 cur.close();
 
                 qryCurs.remove(req.queryId());
-                curs.remove(req.queryId());
 
                 return new GridRestResponse(true);
             }
             catch (Exception e) {
                 qryCurs.remove(req.queryId());
-                curs.remove(req.queryId());
 
                 return new GridRestResponse(GridRestResponse.STATUS_FAILED, e.getMessage());
             }
@@ -221,38 +206,33 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
         /** Execute query request. */
         private RestSqlQueryRequest req;
 
-        /** Queries iterators. */
-        private ConcurrentHashMap<Long, Iterator> curs;
-
         /** Queries cursors. */
-        private ConcurrentHashMap<Long, QueryCursor> qryCurs;
+        private final ConcurrentHashMap<Long, IgniteBiTuple<QueryCursor, Iterator>> qryCurs;
 
         /**
          * @param req Execute query request.
-         * @param curs Queries cursors.
+         * @param qryCurs Queries cursors.
          */
-        public FetchQueryCallable(RestSqlQueryRequest req, ConcurrentHashMap<Long, Iterator> curs,
-            ConcurrentHashMap<Long, QueryCursor> qryCurs) {
+        public FetchQueryCallable(RestSqlQueryRequest req,
+            ConcurrentHashMap<Long, IgniteBiTuple<QueryCursor, Iterator>> qryCurs) {
             this.req = req;
-            this.curs = curs;
             this.qryCurs = qryCurs;
         }
 
         /** {@inheritDoc} */
         @Override public GridRestResponse call() throws Exception {
             try {
-                Iterator cur = curs.get(req.queryId());
+                Iterator cur = qryCurs.get(req.queryId()).get2();
 
                 if (cur == null)
                     return new GridRestResponse(GridRestResponse.STATUS_FAILED,
                         "Cannot find query [qryId=" + req.queryId() + "]");
 
-                CacheQueryResult res = createQueryResult(qryCurs, curs, cur, req, req.queryId());
+                CacheQueryResult res = createQueryResult(qryCurs, cur, req, req.queryId());
 
                 return new GridRestResponse(res);
             }
             catch (Exception e) {
-                curs.remove(req.queryId());
                 qryCurs.remove(req.queryId());
 
                 return new GridRestResponse(GridRestResponse.STATUS_FAILED, e.getMessage());
@@ -262,15 +242,14 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
 
     /**
      * @param qryCurs Query cursors.
-     * @param curs Queries iterators.
      * @param cur Current cursor.
      * @param req Sql request.
      * @param qryId Query id.
      * @return Query result with items.
      */
-    private static CacheQueryResult createQueryResult(ConcurrentHashMap<Long, QueryCursor> qryCurs,
-        ConcurrentHashMap<Long, Iterator> curs, Iterator cur,
-        RestSqlQueryRequest req, Long qryId) {
+    private static CacheQueryResult createQueryResult(
+        ConcurrentHashMap<Long, IgniteBiTuple<QueryCursor, Iterator>> qryCurs,
+        Iterator cur, RestSqlQueryRequest req, Long qryId) {
         CacheQueryResult res = new CacheQueryResult();
 
         List<Object> items = new ArrayList<>();
@@ -284,10 +263,8 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter {
 
         res.setQueryId(qryId);
 
-        if (!cur.hasNext()) {
+        if (!cur.hasNext())
             qryCurs.remove(qryId);
-            curs.remove(qryId);
-        }
 
         return res;
     }


[11/29] incubator-ignite git commit: #ignite-961: fix authorize commands.

Posted by iv...@apache.org.
#ignite-961: fix authorize commands.


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

Branch: refs/heads/ignite-961
Commit: c99433ba9019cbe30f84ca1e5a2f26df4576c3f3
Parents: c80e649
Author: ivasilinets <iv...@gridgain.com>
Authored: Mon Jul 20 14:12:47 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Mon Jul 20 14:12:47 2015 +0300

----------------------------------------------------------------------
 .../ignite/internal/processors/rest/GridRestProcessor.java   | 8 ++++++++
 1 file changed, 8 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c99433ba/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
index d454fd7..079794e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
@@ -581,6 +581,14 @@ public class GridRestProcessor extends GridProcessorAdapter {
             case QUIT:
             case ATOMIC_INCREMENT:
             case ATOMIC_DECREMENT:
+            case NAME:
+            case LOG:
+            case GET_OR_CREATE_CACHE:
+            case DESTROY_CACHE:
+            case EXECUTE_SQL_QUERY:
+            case EXECUTE_SQL_FIELDS_QUERY:
+            case CLOSE_SQL_QUERY:
+            case FETCH_SQL_QUERY:
                 break;
 
             default:


[04/29] incubator-ignite git commit: # master minor

Posted by iv...@apache.org.
# master minor


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

Branch: refs/heads/ignite-961
Commit: d8f86f18315da2c6882eae72117f5f2033e3b67a
Parents: f9d2a2e
Author: sboikov <sb...@gridgain.com>
Authored: Mon Jul 20 11:40:52 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Mon Jul 20 11:40:52 2015 +0300

----------------------------------------------------------------------
 .../IgniteCachePutRetryAbstractSelfTest.java    | 52 +++++++++++++-------
 ...gniteCachePutRetryTransactionalSelfTest.java | 17 ++++---
 2 files changed, 44 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d8f86f18/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePutRetryAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePutRetryAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePutRetryAbstractSelfTest.java
index bfddbe7..7f2d173 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePutRetryAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePutRetryAbstractSelfTest.java
@@ -71,6 +71,8 @@ public abstract class IgniteCachePutRetryAbstractSelfTest extends GridCacheAbstr
     public void testPut() throws Exception {
         final AtomicBoolean finished = new AtomicBoolean();
 
+        int keysCnt = keysCount();
+
         IgniteInternalFuture<Object> fut = GridTestUtils.runAsync(new Callable<Object>() {
             @Override public Object call() throws Exception {
                 while (!finished.get()) {
@@ -85,13 +87,18 @@ public abstract class IgniteCachePutRetryAbstractSelfTest extends GridCacheAbstr
             }
         });
 
-        int keysCnt = keysCount();
 
-        for (int i = 0; i < keysCnt; i++)
-            ignite(0).cache(null).put(i, i);
+        try {
+            for (int i = 0; i < keysCnt; i++)
+                ignite(0).cache(null).put(i, i);
 
-        finished.set(true);
-        fut.get();
+            finished.set(true);
+
+            fut.get();
+        }
+        finally {
+            finished.set(true);
+        }
 
         for (int i = 0; i < keysCnt; i++)
             assertEquals(i, ignite(0).cache(null).get(i));
@@ -117,27 +124,34 @@ public abstract class IgniteCachePutRetryAbstractSelfTest extends GridCacheAbstr
             }
         });
 
-        int keysCnt = keysCount();
+        try {
+            int keysCnt = keysCount();
 
-        boolean exceptionThrown = false;
+            boolean eThrown = false;
 
-        for (int i = 0; i < keysCnt; i++) {
-            try {
-                ignite(0).cache(null).withNoRetries().put(i, i);
-            }
-            catch (Exception e) {
-                assertTrue("Invalid exception: " + e, X.hasCause(e, ClusterTopologyCheckedException.class) || X.hasCause(e, CachePartialUpdateException.class));
+            for (int i = 0; i < keysCnt; i++) {
+                try {
+                    ignite(0).cache(null).withNoRetries().put(i, i);
+                }
+                catch (Exception e) {
+                    assertTrue("Invalid exception: " + e, X.hasCause(e, ClusterTopologyCheckedException.class) ||
+                        X.hasCause(e, CachePartialUpdateException.class));
 
-                exceptionThrown = true;
+                    eThrown = true;
 
-                break;
+                    break;
+                }
             }
-        }
 
-        assertTrue(exceptionThrown);
+            assertTrue(eThrown);
 
-        finished.set(true);
-        fut.get();
+            finished.set(true);
+
+            fut.get();
+        }
+        finally {
+            finished.set(true);
+        }
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d8f86f18/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePutRetryTransactionalSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePutRetryTransactionalSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePutRetryTransactionalSelfTest.java
index 91c454a..1d14dec 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePutRetryTransactionalSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePutRetryTransactionalSelfTest.java
@@ -49,8 +49,7 @@ public class IgniteCachePutRetryTransactionalSelfTest extends IgniteCachePutRetr
         IgniteAtomicLong atomic = ignite(0).atomicLong("TestAtomic", 0, true);
 
         IgniteInternalFuture<Object> fut = GridTestUtils.runAsync(new Callable<Object>() {
-            @Override
-            public Object call() throws Exception {
+            @Override public Object call() throws Exception {
                 while (!finished.get()) {
                     stopGrid(3);
 
@@ -65,10 +64,16 @@ public class IgniteCachePutRetryTransactionalSelfTest extends IgniteCachePutRetr
 
         int keysCnt = keysCount();
 
-        for (int i = 0; i < keysCnt; i++)
-            atomic.incrementAndGet();
+        try {
+            for (int i = 0; i < keysCnt; i++)
+                atomic.incrementAndGet();
 
-        finished.set(true);
-        fut.get();
+            finished.set(true);
+
+            fut.get();
+        }
+        finally {
+            finished.set(true);
+        }
     }
 }


[03/29] incubator-ignite git commit: Merge remote-tracking branch 'remotes/origin/master' into ignite-961-master

Posted by iv...@apache.org.
Merge remote-tracking branch 'remotes/origin/master' into ignite-961-master


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

Branch: refs/heads/ignite-961
Commit: c80e649cb6e3e7cae4f260e19fa3eab31f2d2803
Parents: 952ac72 f9d2a2e
Author: ivasilinets <iv...@gridgain.com>
Authored: Mon Jul 20 11:26:07 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Mon Jul 20 11:26:07 2015 +0300

----------------------------------------------------------------------
 .../ignite/compute/ComputeJobResultPolicy.java  |   3 +-
 .../failover/GridFailoverContextImpl.java       |  28 ++-
 .../managers/failover/GridFailoverManager.java  |  13 +-
 .../processors/cache/GridCacheUtils.java        |   4 +-
 .../processors/closure/AffinityTask.java        |  35 ++++
 .../closure/GridClosureProcessor.java           |  63 ++++++-
 .../processors/task/GridTaskWorker.java         |  24 ++-
 .../ignite/internal/util/IgniteUtils.java       |   4 +-
 .../ignite/spi/failover/FailoverContext.java    |  18 ++
 .../spi/failover/always/AlwaysFailoverSpi.java  |  25 +++
 .../IgniteClientReconnectFailoverTest.java      |  47 +++--
 .../cache/CacheAffinityCallSelfTest.java        | 172 +++++++++++++++++++
 .../cache/GridCacheAffinityRoutingSelfTest.java | 157 ++++++++++++++++-
 .../cache/IgniteCacheNearLockValueSelfTest.java |   2 +
 .../spi/failover/GridFailoverTestContext.java   |  10 ++
 .../ignite/testsuites/IgniteCacheTestSuite.java |   1 +
 .../ignite/schema/ui/SchemaImportApp.java       |  36 +++-
 17 files changed, 594 insertions(+), 48 deletions(-)
----------------------------------------------------------------------



[14/29] incubator-ignite git commit: Merge remote-tracking branch 'origin/master'

Posted by iv...@apache.org.
Merge remote-tracking branch 'origin/master'


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

Branch: refs/heads/ignite-961
Commit: 3194415cdd35827ee9c3e150fdb8c9ca069b37f0
Parents: d623d7e 0ac5fe7
Author: sboikov <sb...@gridgain.com>
Authored: Mon Jul 20 14:43:10 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Mon Jul 20 14:43:10 2015 +0300

----------------------------------------------------------------------
 pom.xml | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------



[24/29] incubator-ignite git commit: Merge remote-tracking branch 'remotes/origin/master' into ignite-961-master

Posted by iv...@apache.org.
Merge remote-tracking branch 'remotes/origin/master' into ignite-961-master


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

Branch: refs/heads/ignite-961
Commit: 829311d94570c9d4f238e2ba1cfc000a5f4b4e24
Parents: ec76ec7 9aa928c
Author: ivasilinets <iv...@gridgain.com>
Authored: Tue Jul 21 11:29:59 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Tue Jul 21 11:29:59 2015 +0300

----------------------------------------------------------------------
 .../distributed/dht/GridDhtTxPrepareFuture.java |  7 +-
 .../ignite/internal/util/nio/GridNioServer.java |  9 ++
 .../util/nio/GridSelectorNioSessionImpl.java    |  8 ++
 .../cache/CacheAffinityCallSelfTest.java        |  4 -
 .../internal/util/nio/GridNioSelfTest.java      | 88 ++++++++++++++++++--
 .../internal/util/nio/GridNioSslSelfTest.java   | 16 ++--
 .../testframework/junits/GridAbstractTest.java  |  3 +-
 7 files changed, 109 insertions(+), 26 deletions(-)
----------------------------------------------------------------------



[06/29] incubator-ignite git commit: minor

Posted by iv...@apache.org.
minor


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

Branch: refs/heads/ignite-961
Commit: d24c2da35ac300484566bf2fe40d2664e4942686
Parents: 05672fe
Author: Yakov Zhdanov <yz...@gridgain.com>
Authored: Mon Jul 20 11:53:41 2015 +0300
Committer: Yakov Zhdanov <yz...@gridgain.com>
Committed: Mon Jul 20 11:53:41 2015 +0300

----------------------------------------------------------------------
 .../apache/ignite/internal/processors/cache/IgniteCacheProxy.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d24c2da3/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
index 0b2eba0..e532778 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
@@ -556,7 +556,7 @@ public class IgniteCacheProxy<K, V> extends AsyncSupportAdapter<IgniteCache<K, V
                 if (isReplicatedDataNode() || ctx.isLocal() || qry.isLocal())
                     return (QueryCursor<R>)new QueryCursorImpl<>(new Iterable<Cache.Entry<K, V>>() {
                         @Override public Iterator<Cache.Entry<K, V>> iterator() {
-                            return ctx.kernalContext().query().<K, V>queryLocal(ctx, p);
+                            return ctx.kernalContext().query().queryLocal(ctx, p);
                         }
                     });
 


[16/29] incubator-ignite git commit: #ignite-961: fix comments after review.

Posted by iv...@apache.org.
#ignite-961: fix comments after review.


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

Branch: refs/heads/ignite-961
Commit: 09d598e46a083c1ce98274a37d34639f91fc7ba7
Parents: 65c72c5
Author: ivasilinets <iv...@gridgain.com>
Authored: Mon Jul 20 14:55:07 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Mon Jul 20 14:55:07 2015 +0300

----------------------------------------------------------------------
 .../JettyRestProcessorAbstractSelfTest.java     | 39 ++++++++++++++------
 1 file changed, 28 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/09d598e4/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
index f1cfe96..7354214 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
@@ -61,7 +61,7 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
 
     /** {@inheritDoc} */
     @Override protected void beforeTest() throws Exception {
-        grid(0).cache(null).clear();
+        grid(0).cache(null).removeAll();
     }
 
     /** {@inheritDoc} */
@@ -1009,16 +1009,7 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
 
         assertEquals(2, items.size());
 
-        for (int i = 0; i < GRID_CNT; ++i) {
-            Map<GridRestCommand, GridRestCommandHandler> handlers =
-                GridTestUtils.getFieldValue(grid(i).context().rest(), "handlers");
-
-            GridRestCommandHandler qryHnd = handlers.get(GridRestCommand.CLOSE_SQL_QUERY);
-
-            ConcurrentHashMap<Long, Iterator> its = GridTestUtils.getFieldValue(qryHnd, "curs");
-
-            assertEquals(0, its.size());
-        }
+        assertFalse(queryCursorFound());
     }
 
     /**
@@ -1074,6 +1065,32 @@ abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestProcessorS
     /**
      * @throws Exception If failed.
      */
+    public void testSqlFieldsQuery() throws Exception {
+        String qry = "select concat(firstName, ' ', lastName) from Person";
+
+        Map<String, String> params = new HashMap<>();
+        params.put("cmd", "qryfieldsexecute");
+        params.put("psz", "10");
+        params.put("cacheName", "person");
+        params.put("qry", URLEncoder.encode(qry));
+
+        String ret = content(params);
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        JSONObject json = JSONObject.fromObject(ret);
+
+        List items = (List)((Map)json.get("response")).get("items");
+
+        assertEquals(4, items.size());
+
+        assertFalse(queryCursorFound());
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
     public void testQueryClose() throws Exception {
         String qry = "salary > ? and salary <= ?";
 


[07/29] incubator-ignite git commit: minor

Posted by iv...@apache.org.
minor


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

Branch: refs/heads/ignite-961
Commit: 7ae2b0af43f914f7af4975da76db3ea6acc0e43d
Parents: d24c2da
Author: Yakov Zhdanov <yz...@gridgain.com>
Authored: Mon Jul 20 12:24:39 2015 +0300
Committer: Yakov Zhdanov <yz...@gridgain.com>
Committed: Mon Jul 20 12:24:39 2015 +0300

----------------------------------------------------------------------
 .../ignite/internal/processors/cache/IgniteInternalCache.java    | 1 +
 .../main/java/org/apache/ignite/internal/util/IgniteUtils.java   | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7ae2b0af/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteInternalCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteInternalCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteInternalCache.java
index 9972f92..7396c84 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteInternalCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteInternalCache.java
@@ -1473,6 +1473,7 @@ public interface IgniteInternalCache<K, V> extends Iterable<Cache.Entry<K, V>> {
      * @return Internal projection.
      */
     IgniteInternalCache<K, V> forSubjectId(UUID subjId);
+
     /**
      * Store DR data.
      *

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7ae2b0af/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index 42982b9..c4f6712 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -984,7 +984,7 @@ public abstract class IgniteUtils {
     }
 
     /**
-     * Returns current JVM maxMemory in the same format as {@link #heapSize(org.apache.ignite.cluster.ClusterNode, int)}.
+     * Returns current JVM maxMemory in the same format as {@link #heapSize(ClusterNode, int)}.
      *
      * @param precision Precision.
      * @return Maximum memory size in GB.
@@ -8069,7 +8069,7 @@ public abstract class IgniteUtils {
     /**
      * @param addrs Node's addresses.
      * @param port Port discovery number.
-     * @return A string compatible with {@link org.apache.ignite.cluster.ClusterNode#consistentId()} requirements.
+     * @return A string compatible with {@link ClusterNode#consistentId()} requirements.
      */
     public static String consistentId(Collection<String> addrs, int port) {
         assert !F.isEmpty(addrs);


[29/29] incubator-ignite git commit: Merge remote-tracking branch 'remotes/origin/ignite-961-master' into ignite-961

Posted by iv...@apache.org.
Merge remote-tracking branch 'remotes/origin/ignite-961-master' into ignite-961

Conflicts:
	modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java
	modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
	modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java


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

Branch: refs/heads/ignite-961
Commit: 4699dd88496de54d6cb95ccd669d7738ce036dc3
Parents: 4e2f26b cab277b
Author: ivasilinets <iv...@gridgain.com>
Authored: Tue Jul 21 14:24:30 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Tue Jul 21 14:24:30 2015 +0300

----------------------------------------------------------------------
 .../JettyRestProcessorAbstractSelfTest.java     | 489 ++++++++++---------
 .../apache/ignite/internal/IgniteKernal.java    |  42 +-
 .../processors/rest/GridRestProcessor.java      |  13 +
 .../handlers/cache/GridCacheCommandHandler.java |  70 +--
 .../handlers/query/QueryCommandHandler.java     |  80 ++-
 .../http/jetty/GridJettyRestHandler.java        |  57 +++
 6 files changed, 414 insertions(+), 337 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4699dd88/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
----------------------------------------------------------------------
diff --cc modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
index 5baab05,55d60d2..4734ecc
--- a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
@@@ -72,6 -70,6 +72,12 @@@ public abstract class JettyRestProcesso
      }
  
      /**
++     * @return Signature.
++     * @throws Exception If failed.
++     */
++    protected abstract String signature() throws Exception;
++
++    /**
       * @return Port to use for rest. Needs to be changed over time
       *      because Jetty has some delay before port unbind.
       */
@@@ -380,132 -311,37 +385,238 @@@
          assertNull(grid(0).cache("testCache"));
      }
  
++
 +    /**
 +     * @throws Exception If failed.
 +     */
 +    public void testGetPost() throws Exception {
 +        jcache().put("key0", "val0");
 +
 +        String val = "{\"key\":\"key0\"}";
 +        String ret = makePostRequest(F.asMap("cmd", "get"), val);
 +
 +        assertNotNull(ret);
 +        assertTrue(!ret.isEmpty());
 +
 +        info("Get command result: " + ret);
 +
 +        jsonEquals(ret, cachePattern("val0", true));
 +    }
 +
 +    /**
 +     * @throws Exception If failed.
 +     */
 +    public void testReplacePost() throws Exception {
 +        jcache().put("key0", "val0");
 +
 +        String val = "{\"key\":\"key0\", \"val\":\"val2\", \"oldVal\":\"val1\"}";
 +        String ret = makePostRequest(F.asMap("cmd", "repval"), val);
 +
 +        assertNotNull(ret);
 +        assertTrue(!ret.isEmpty());
 +
 +        info("Get command result: " + ret);
 +
 +        jsonEquals(ret, cachePattern(false, true));
 +
 +        val = "{\"key\":\"key0\", \"val\":\"val2\"}";
 +        ret = makePostRequest(F.asMap("cmd", "getandreplace"), val);
 +
 +        jsonEquals(ret, cachePattern("val0", true));
 +
 +        assertEquals("val2", grid(0).cache(null).get("key0"));
 +
 +        val = "{\"key\":\"key0\", \"val\":\"val3\"}";
 +        ret = makePostRequest(F.asMap("cmd", "rep"), val);
 +
 +        assertNotNull(ret);
 +        assertTrue(!ret.isEmpty());
 +
 +        info("Get command result: " + ret);
 +
 +        assertEquals("val3", grid(0).cache(null).get("key0"));
 +    }
 +
 +    /**
 +     * @throws Exception If failed.
 +     */
 +    public void testRemovePost() throws Exception {
 +        jcache().put("key0", "val0");
 +
 +        String val = "{\"key\":\"key0\", \"val\":\"val2\"}";
 +        String ret = makePostRequest(F.asMap("cmd", "rmvvalue"), val);
 +
 +        assertNotNull(ret);
 +        assertTrue(!ret.isEmpty());
 +
 +        info("Get command result: " + ret);
 +
 +        jsonEquals(ret, cachePattern(false, true));
 +
 +        assertEquals("val0", grid(0).cache(null).get("key0"));
 +
 +        val = "{\"key\":\"key0\"}";
 +        ret = makePostRequest(F.asMap("cmd", "getandrmv"), val);
 +
 +        jsonEquals(ret, cachePattern("val0", true));
 +
 +        assertNull(grid(0).cache(null).get("key0"));
 +    }
 +
 +    /**
 +     * @throws Exception If failed.
 +     */
 +    public void testRemoveAllPost() throws Exception {
 +        jcache().put("key0", "val0");
 +        jcache().put("key1", "val1");
 +
 +        String val = "{\"keys\": [\"key0\", \"key1\"]}";
 +        String ret = makePostRequest(F.asMap("cmd", "rmvall"), val);
 +
 +        assertNotNull(ret);
 +        assertTrue(!ret.isEmpty());
 +
 +        assertEquals(0, grid(0).cache(null).size());
 +    }
 +
 +    /**
 +     * @throws Exception If failed.
 +     */
 +    public void testPutPost() throws Exception {
 +        String val = "{\"key\":\"key0\",\"val\":\"val0\"}";
 +        String ret = makePostRequest(F.asMap("cmd", "put"), val);
 +
 +        assertNotNull(ret);
 +        assertTrue(!ret.isEmpty());
 +
 +        assertNotNull(grid(0).cache(null).get("key0"));
 +
 +        val = "{\"key\":\"key0\"}";
 +        ret = makePostRequest(F.asMap("cmd", "containskey"), val);
 +
 +        assertNotNull(ret);
 +        assertTrue(!ret.isEmpty());
 +
 +        jsonEquals(ret, cachePattern(true, true));
 +    }
 +
 +    /**
 +     * @throws Exception If failed.
 +     */
 +    public void testIncorrectPutPost() throws Exception {
 +        String val = "{\"key\":\"key0\"}";
 +        String ret = makePostRequest(F.asMap("cmd", "put"), val);
 +
 +        assertNotNull(ret);
 +        assertTrue(!ret.isEmpty());
 +        jsonEquals(ret, errorPattern("Failed to find mandatory parameter in request: val"));
 +    }
 +
++
++    /**
++     * @throws Exception If failed.
++     */
++    public void testGetAndPutPost() throws Exception {
++        String val = "{\"key\":\"key0\", \"val\":\"val0\"}";
++        String ret = makePostRequest(F.asMap("cmd", "getandput"), val);
++
++        assertNotNull(ret);
++        assertTrue(!ret.isEmpty());
++
++        jsonEquals(ret, cacheNullPattern(true));
++
++        assertNotNull(grid(0).cache(null).get("key0"));
++
++        val = "{\"key\": \"key0\", \"val\":\"val1\"}";
++        ret = makePostRequest(F.asMap("cmd", "getandputifabsent"), val);
++
++        assertNotNull(ret);
++        assertTrue(!ret.isEmpty());
++
++        jsonEquals(ret, cachePattern("val0", true));
++
++        assertEquals("val0", grid(0).cache(null).get("key0"));
++
++        val = "{\"key\": \"key0\"}";
++        ret = makePostRequest(F.asMap("cmd", "rmv"), val);
++
++        assertNotNull(ret);
++        assertTrue(!ret.isEmpty());
++
++        assertNull(grid(0).cache(null).get("key0"));
++
++        val = "{\"key\": \"key0\", \"val\":\"val1\"}";
++        ret = makePostRequest(F.asMap("cmd", "putifabsent"), val);
++
++        assertNotNull(ret);
++        assertTrue(!ret.isEmpty());
++
++        jsonEquals(ret, cachePattern(true, true));
++
++        assertEquals("val1", grid(0).cache(null).get("key0"));
++    }
++
++    /**
++     * @throws Exception If failed.
++     */
++    public void testPutAllPost() throws Exception {
++        String val = "{\"entries\": [{\"key\":\"key0\", \"value\": \"val0\"}, {\"key\":\"key1\", \"value\":\"val1\"}]}";
++        String ret = makePostRequest(F.asMap("cmd", "putAll"), val);
++
++        assertNotNull(ret);
++        assertTrue(!ret.isEmpty());
++
++        assertNotNull(grid(0).cache(null).get("key0"));
++
++        val = "{\"keys\": [\"key0\",\"key1\"]}";
++        ret = makePostRequest(F.asMap("cmd", "containskeys"), val);
++
++        assertNotNull(ret);
++        assertTrue(!ret.isEmpty());
++
++        jsonEquals(ret, cacheBulkPattern(true, true));
++
++        ret = makePostRequest(F.asMap("cmd", "getAll"), val);
++
++        assertNotNull(ret);
++        assertTrue(!ret.isEmpty());
++
++        jsonEquals(ret, cacheBulkPattern(
++            "\\[\\{\\\"key\\\":\\\"key0\\\",\\\"value\\\":\\\"val0\\\"\\}," +
++                "\\{\\\"key\\\":\\\"key1\\\",\\\"value\\\":\\\"val1\\\"\\}\\]", true));
++    }
++
+     /**
+      * @throws Exception If failed.
+      */
+     public void testGetAll() throws Exception {
+         jcache().put("getKey1", "getVal1");
+         jcache().put("getKey2", "getVal2");
+ 
+         String ret = content(F.asMap("cmd", "getall", "k1", "getKey1", "k2", "getKey2"));
+ 
+         assertNotNull(ret);
+         assertTrue(!ret.isEmpty());
+ 
+         info("Get all command result: " + ret);
+ 
+         jsonEquals(ret,
+             // getKey[12] is used since the order is not determined.
+             cacheBulkPattern("\\{\\\"getKey[12]\\\":\\\"getVal[12]\\\"\\,\\\"getKey[12]\\\":\\\"getVal[12]\\\"\\}",
+                 true));
+     }
+ 
+     /**
+      * @throws Exception If failed.
+      */
+     public void testIncorrectPut() throws Exception {
+         String ret = content(F.asMap("cmd", "put", "key", "key0"));
+ 
+         assertNotNull(ret);
+         assertTrue(!ret.isEmpty());
+         jsonEquals(ret, errorPattern("Failed to find mandatory parameter in request: val"));
+     }
+ 
      /**
       * @throws Exception If failed.
       */
@@@ -1243,271 -986,154 +1261,324 @@@
      /**
       * @throws Exception If failed.
       */
+     public void testQueryArgs() throws Exception {
+         String qry = "salary > ? and salary <= ?";
+ 
+         Map<String, String> params = new HashMap<>();
+         params.put("cmd", "qryexecute");
+         params.put("type", "Person");
+         params.put("psz", "10");
+         params.put("cacheName", "person");
+         params.put("qry", URLEncoder.encode(qry));
+         params.put("arg1", "1000");
+         params.put("arg2", "2000");
+ 
+         String ret = content(params);
+ 
+         assertNotNull(ret);
+         assertTrue(!ret.isEmpty());
+ 
+         JSONObject json = JSONObject.fromObject(ret);
+ 
+         List items = (List)((Map)json.get("response")).get("items");
+ 
+         assertEquals(2, items.size());
+ 
+         assertFalse(queryCursorFound());
+     }
+ 
+     /**
+      * @throws Exception If failed.
+      */
+     public void testQuery() throws Exception {
+         grid(0).cache(null).put("1", "1");
+         grid(0).cache(null).put("2", "2");
+         grid(0).cache(null).put("3", "3");
+ 
+         Map<String, String> params = new HashMap<>();
+         params.put("cmd", "qryexecute");
+         params.put("type", "String");
+         params.put("psz", "1");
+         params.put("qry", URLEncoder.encode("select * from String"));
+ 
+         String ret = content(params);
+ 
+         assertNotNull(ret);
+         assertTrue(!ret.isEmpty());
+ 
+         JSONObject json = JSONObject.fromObject(ret);
+ 
+         Integer qryId = (Integer)((Map)json.get("response")).get("queryId");
+ 
+         assertNotNull(qryId);
+ 
+         ret = content(F.asMap("cmd", "qryfetch", "psz", "1", "qryId", String.valueOf(qryId)));
+ 
+         json = JSONObject.fromObject(ret);
+ 
+         Integer qryId0 = (Integer)((Map)json.get("response")).get("queryId");
+ 
+         Boolean last = (Boolean)((Map)json.get("response")).get("last");
+ 
+         assertEquals(qryId0, qryId);
+         assertFalse(last);
+ 
+         ret = content(F.asMap("cmd", "qryfetch", "psz", "1", "qryId", String.valueOf(qryId)));
+ 
+         json = JSONObject.fromObject(ret);
+ 
+         qryId0 = (Integer)((Map)json.get("response")).get("queryId");
+ 
+         last = (Boolean)((Map)json.get("response")).get("last");
+ 
+         assertEquals(qryId0, qryId);
+         assertTrue(last);
+ 
+         assertFalse(queryCursorFound());
+     }
+ 
+     /**
+      * @throws Exception If failed.
+      */
+     public void testSqlFieldsQuery() throws Exception {
+         String qry = "select concat(firstName, ' ', lastName) from Person";
+ 
+         Map<String, String> params = new HashMap<>();
+         params.put("cmd", "qryfieldsexecute");
+         params.put("psz", "10");
+         params.put("cacheName", "person");
+         params.put("qry", URLEncoder.encode(qry));
+ 
+         String ret = content(params);
+ 
+         assertNotNull(ret);
+         assertTrue(!ret.isEmpty());
+ 
+         JSONObject json = JSONObject.fromObject(ret);
+ 
+         List items = (List)((Map)json.get("response")).get("items");
+ 
+         assertEquals(4, items.size());
+ 
+         assertFalse(queryCursorFound());
+     }
+ 
+     /**
+      * @throws Exception If failed.
+      */
+     public void testQueryClose() throws Exception {
+         String qry = "salary > ? and salary <= ?";
+ 
+         Map<String, String> params = new HashMap<>();
+         params.put("cmd", "qryexecute");
+         params.put("type", "Person");
+         params.put("psz", "1");
+         params.put("cacheName", "person");
+         params.put("qry", URLEncoder.encode(qry));
+         params.put("arg1", "1000");
+         params.put("arg2", "2000");
+ 
+         String ret = content(params);
+ 
+         assertNotNull(ret);
+         assertTrue(!ret.isEmpty());
+ 
+         JSONObject json = JSONObject.fromObject(ret);
+ 
+         List items = (List)((Map)json.get("response")).get("items");
+ 
+         assertEquals(1, items.size());
+ 
+         assertTrue(queryCursorFound());
+ 
+         Integer qryId = (Integer)((Map)json.get("response")).get("queryId");
+ 
+         assertNotNull(qryId);
+ 
+         ret = content(F.asMap("cmd", "qryclose", "cacheName", "person", "qryId", String.valueOf(qryId)));
+ 
+         assertNotNull(ret);
+         assertTrue(!ret.isEmpty());
+ 
+         assertFalse(queryCursorFound());
+     }
+ 
 -    protected abstract String signature() throws Exception;
++
++
++    /**
++     * @throws Exception If failed.
++     */
 +    public void testRunScriptPost() throws Exception {
 +        String f = "function(param){return param;}";
 +        String ret = makePostRequest(F.asMap("cmd", "runscript", "func", URLEncoder.encode(f)), "{\"arg\":\"hello\"}");
 +
 +        assertNotNull(ret);
 +        assertTrue(!ret.isEmpty());
 +
 +        jsonEquals(ret, stringPattern("hello", true));
 +    }
 +
 +    /**
 +     * @throws Exception If failed.
 +     */
 +    public void testRunScript() throws Exception {
 +        String f = "function(param){return param;}";
 +        String ret = content(F.asMap("cmd", "runscript", "func", URLEncoder.encode(f), "arg", "hello"));
 +
 +        assertNotNull(ret);
 +        assertTrue(!ret.isEmpty());
 +
 +        jsonEquals(ret, stringPattern("hello", true));
 +    }
 +
 +    /**
 +     * @throws Exception If failed.
 +     */
 +    public void testRunAffinityScriptPost() throws Exception {
 +        ClusterNode node = grid(0).affinity(null).mapKeyToNode("key0");
 +
 +        Ignite ignite = null;
 +
 +        for (int i = 0; i < GRID_CNT; ++i) {
 +            if (grid(i).localNode().equals(node))
 +                ignite = grid(i);
 +        }
 +
 +        assertNotNull(ignite);
 +
 +        String f = "function(expName){"+
 +            "if (expName !== \"hello\") {" +
 +            "throw \"Not correct arg.\"" +
 +            "}" +
 +            "return ignite.name();}";
 +
 +        String ret = makePostRequest(F.asMap("cmd", "affrun", "func", URLEncoder.encode(f)),
 +            "{\"arg\":\"" + "hello" + "\",\"key\":\"key0\"}");
 +
 +        assertNotNull(ret);
 +        assertTrue(!ret.isEmpty());
 +
 +        jsonEquals(ret, stringPattern(ignite.name(), true));
 +    }
 +
 +    /**
 +     * @throws Exception If failed.
 +     */
 +    public void testRunAffinityScript() throws Exception {
 +        ClusterNode node = grid(0).affinity(null).mapKeyToNode("key0");
 +
 +        Ignite ignite = null;
 +
 +        for (int i = 0; i < GRID_CNT; ++i) {
 +            if (grid(i).localNode().equals(node))
 +                ignite = grid(i);
 +        }
 +
 +        assertNotNull(ignite);
 +
 +        String f = "function(expName){"+
 +            "if (expName !== \"hello\") {" +
 +            "throw \"Not correct arg.\"" +
 +            "}" +
 +            "return ignite.name();}";
 +
 +        String ret = content(F.asMap("cmd", "affrun", "func", URLEncoder.encode(f),
 +            "key", "key0", "arg", "hello"));
 +
 +        assertNotNull(ret);
 +        assertTrue(!ret.isEmpty());
 +
 +        jsonEquals(ret, stringPattern(ignite.name(), true));
 +    }
 +
 +    /**
 +     * @throws Exception If failed.
 +     */
 +    public void testMapReduceScriptPost() throws Exception {
 +        String map = "function(nodes, arg) {" +
 +            "var words = arg.split(\" \");" +
 +            "for (var i = 0; i < words.length; i++) {" +
 +            "var f = function(word) {" +
 +            "return word.length;" +
 +            "};" +
 +            "emit(f, words[i], nodes[i %  nodes.length]);" +
 +            "}"+
 +            "};";
 +
 +        String reduce =  "function(results) {"+
 +            "var sum = 0;"+
 +            "for (var i = 0; i < results.size(); ++i) {"+
 +            "sum += results.get(i).intValue();"+
 +            "}" +
 +            "return sum;" +
 +            "};";
 +
 +        String ret = makePostRequest(F.asMap("cmd", "excmapreduce", "map", URLEncoder.encode(map),
 +            "reduce", URLEncoder.encode(reduce)), "{\"arg\": \"Hello world!\"}");
 +
 +        assertNotNull(ret);
 +        assertTrue(!ret.isEmpty());
 +
 +        jsonEquals(ret, integerPattern(11, true));
 +    }
 +
 +    /**
 +     * @throws Exception If failed.
 +     */
 +    public void testMapReduceScript() throws Exception {
 +        String map = "function(nodes, arg) {" +
 +            "var words = arg.split(\" \");" +
 +            "for (var i = 0; i < words.length; i++) {" +
 +            "var f = function(word) {" +
 +            "return word.length;" +
 +            "};" +
 +            "emit(f, words[i], nodes[i %  nodes.length]);" +
 +            "}"+
 +            "};";
 +
 +        String reduce =  "function(results) {"+
 +            "var sum = 0;"+
 +            "for (var i = 0; i < results.size(); ++i) {"+
 +            "sum += results.get(i).intValue();"+
 +            "}" +
 +            "return sum;" +
 +            "};";
 +
 +        String ret = content(F.asMap("cmd", "excmapreduce", "map", URLEncoder.encode(map),
 +            "reduce", URLEncoder.encode(reduce), "arg", URLEncoder.encode("Hello world!")));
 +
 +        assertNotNull(ret);
 +        assertTrue(!ret.isEmpty());
 +
 +        jsonEquals(ret, integerPattern(11, true));
 +    }
 +
 +    /**
 +     * @throws Exception If failed.
 +     */
-     public void testQuery() throws Exception {
-         grid(0).cache(null).put("1", "1");
-         grid(0).cache(null).put("2", "2");
-         grid(0).cache(null).put("3", "3");
- 
-         String ret = makePostRequest(F.asMap("cmd", "qryexecute", "type", "String", "psz", "1",
-                 "qry", URLEncoder.encode("select * from String")),
-             "{\"arg\": []}");
- 
-         assertNotNull(ret);
-         assertTrue(!ret.isEmpty());
- 
-         JSONObject json = JSONObject.fromObject(ret);
- 
-         Integer qryId = (Integer)((Map)json.get("response")).get("queryId");
- 
-         assertNotNull(qryId);
- 
-         ret = content(F.asMap("cmd", "qryfetch", "psz", "1", "qryId", String.valueOf(qryId)));
- 
-         json = JSONObject.fromObject(ret);
- 
-         Integer qryId0 = (Integer)((Map)json.get("response")).get("queryId");
- 
-         assertEquals(qryId0, qryId);
- 
-         ret = content(F.asMap("cmd", "qryclose", "qryId", String.valueOf(qryId)));
-     }
- 
-     /**
-      * @throws Exception If failed.
-      */
 +    public void testQueryArgsPost() throws Exception {
 +        String qry = "salary > ? and salary <= ?";
 +
 +        String ret = makePostRequest(F.asMap("cmd", "qryexecute", "type", "Person", "psz", "10", "cacheName", "person",
 +                "qry", URLEncoder.encode(qry)),
 +            "{\"arg\": [1000, 2000]}");
 +
 +        assertNotNull(ret);
 +        assertTrue(!ret.isEmpty());
 +
 +        JSONObject json = JSONObject.fromObject(ret);
 +
 +        List items = (List)((Map)json.get("response")).get("items");
 +
 +        assertEquals(2, items.size());
 +
-         for (int i = 0; i < GRID_CNT; ++i) {
-             Map<GridRestCommand, GridRestCommandHandler> handlers =
-                 GridTestUtils.getFieldValue(grid(i).context().rest(), "handlers");
- 
-             GridRestCommandHandler qryHnd = handlers.get(GridRestCommand.CLOSE_SQL_QUERY);
- 
-             ConcurrentHashMap<Long, Iterator> its = GridTestUtils.getFieldValue(qryHnd, "curs");
- 
-             assertEquals(0, its.size());
-         }
-     }
- 
-     /**
-      * @throws Exception If failed.
-      */
-     public void testQueryArgs() throws Exception {
-         String qry = "salary > ? and salary <= ?";
- 
-         Map<String, String> params = new HashMap<>();
-         params.put("cmd", "qryexecute");
-         params.put("type", "Person");
-         params.put("psz", "10");
-         params.put("cacheName", "person");
-         params.put("qry", URLEncoder.encode(qry));
-         params.put("arg1", "1000");
-         params.put("arg2", "2000");
- 
-         String ret = content(params);
- 
-         assertNotNull(ret);
-         assertTrue(!ret.isEmpty());
- 
-         JSONObject json = JSONObject.fromObject(ret);
- 
-         List items = (List)((Map)json.get("response")).get("items");
- 
-         assertEquals(2, items.size());
- 
-         for (int i = 0; i < GRID_CNT; ++i) {
-             Map<GridRestCommand, GridRestCommandHandler> handlers =
-                 GridTestUtils.getFieldValue(grid(i).context().rest(), "handlers");
- 
-             GridRestCommandHandler qryHnd = handlers.get(GridRestCommand.CLOSE_SQL_QUERY);
- 
-             ConcurrentHashMap<Long, Iterator> its = GridTestUtils.getFieldValue(qryHnd, "curs");
- 
-             assertEquals(0, its.size());
-         }
++        assertFalse(queryCursorFound());
 +    }
  
      /**
-      * @throws Exception If failed.
+      * @return True if any query cursor is available.
       */
-     public void testQueryClose() throws Exception {
-         String qry = "salary > ? and salary <= ?";
- 
-         String ret = makePostRequest(F.asMap("cmd", "qryexecute", "type", "Person", "psz", "1", "cacheName", "person",
-                 "qry", URLEncoder.encode(qry)),
-             "{\"arg\": [1000, 2000]}");
- 
-         assertNotNull(ret);
-         assertTrue(!ret.isEmpty());
- 
-         JSONObject json = JSONObject.fromObject(ret);
- 
-         List items = (List)((Map)json.get("response")).get("items");
- 
-         assertEquals(1, items.size());
- 
+     private boolean queryCursorFound() {
          boolean found = false;
  
          for (int i = 0; i < GRID_CNT; ++i) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4699dd88/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4699dd88/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4699dd88/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
index 6eb2e20,defca37..1f92bf3
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java
@@@ -188,8 -178,8 +178,8 @@@ public class QueryCommandHandler extend
  
          /** {@inheritDoc} */
          @Override public GridRestResponse call() throws Exception {
--            try {
-                 QueryCursor cur = qryCurs.get(req.queryId());
++            try { 
+                 QueryCursor cur = qryCurs.get(req.queryId()).get1();
  
                  if (cur == null)
                      return new GridRestResponse(GridRestResponse.STATUS_FAILED,

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4699dd88/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
----------------------------------------------------------------------
diff --cc modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
index 2d8fa3e,bf0f2c8..ebe2119
--- a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
+++ b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
@@@ -576,112 -469,63 +576,169 @@@ public class GridJettyRestHandler exten
                  break;
              }
  
+             case EXECUTE_SQL_QUERY:
+             case EXECUTE_SQL_FIELDS_QUERY: {
+                 RestSqlQueryRequest restReq0 = new RestSqlQueryRequest();
+ 
+                 restReq0.sqlQuery((String) params.get("qry"));
+ 
+                 restReq0.arguments(values("arg", params).toArray());
+ 
+                 restReq0.typeName((String) params.get("type"));
+ 
+                 String psz = (String) params.get("psz");
+ 
+                 if (psz != null)
+                     restReq0.pageSize(Integer.parseInt(psz));
+ 
+                 restReq0.cacheName((String)params.get("cacheName"));
+ 
+                 restReq = restReq0;
+ 
+                 break;
+             }
+ 
+             case FETCH_SQL_QUERY: {
+                 RestSqlQueryRequest restReq0 = new RestSqlQueryRequest();
+ 
+                 String qryId = (String) params.get("qryId");
+ 
+                 if (qryId != null)
+                     restReq0.queryId(Long.parseLong(qryId));
+ 
+                 String psz = (String) params.get("psz");
+ 
+                 if (psz != null)
+                     restReq0.pageSize(Integer.parseInt(psz));
+ 
+                 restReq0.cacheName((String)params.get("cacheName"));
+ 
+                 restReq = restReq0;
+ 
+                 break;
+             }
+ 
+             case CLOSE_SQL_QUERY: {
+                 RestSqlQueryRequest restReq0 = new RestSqlQueryRequest();
+ 
+                 String qryId = (String) params.get("qryId");
+ 
+                 if (qryId != null)
+                     restReq0.queryId(Long.parseLong(qryId));
+ 
+                 restReq0.cacheName((String)params.get("cacheName"));
+ 
+                 restReq = restReq0;
+ 
+                 break;
+             }
+ 
 +            case RUN_SCRIPT: {
 +                RestRunScriptRequest restReq0 = new RestRunScriptRequest();
 +
 +                restReq0.script((String)params.get("func"));
 +
 +                if (req.getHeader("Content-Type") != null && req.getHeader("Content-Type").contains("json")) {
 +                    Map o = parseRequest(req);
 +                    restReq0.argument(ctx.scripting().toJavaObject(o.get("arg")));
 +                }
 +                else
 +                    restReq0.argument(params.get("arg"));
 +
 +                restReq = restReq0;
 +
 +                break;
 +            }
 +
 +            case AFFINITY_RUN_SCRIPT: {
 +                RestRunScriptRequest restReq0 = new RestRunScriptRequest();
 +
 +                restReq0.script((String)params.get("func"));
 +                restReq0.cacheName((String) params.get("cacheName"));
 +
 +                if (req.getHeader("Content-Type") != null && req.getHeader("Content-Type").contains("json")) {
 +                    Map o = parseRequest(req);
 +                    restReq0.argument(ctx.scripting().toJavaObject(o.get("arg")));
 +
 +                    Object cacheObj = ctx.scripting().toJavaObject(o.get("key"));
 +                    restReq0.affinityKey(cacheObj);
 +                }
 +                else {
 +                    restReq0.argument(params.get("arg"));
 +                    restReq0.affinityKey(params.get("key"));
 +                }
 +
 +                restReq = restReq0;
 +
 +                break;
 +            }
 +
 +            case EXECUTE_MAP_REDUCE_SCRIPT: {
 +                RestMapReduceScriptRequest restReq0 = new RestMapReduceScriptRequest();
 +
 +                restReq0.mapFunction((String) params.get("map"));
 +
 +
 +                if (req.getHeader("Content-Type") != null && req.getHeader("Content-Type").contains("json")) {
 +                    Map o = parseRequest(req);
 +                    restReq0.argument(ctx.scripting().toJavaObject(o.get("arg")));
 +                }
 +                else
 +                    restReq0.argument(params.get("arg"));
 +
 +                restReq0.reduceFunction((String) params.get("reduce"));
 +
 +                restReq = restReq0;
 +
 +                break;
 +            }
 +
 +            case EXECUTE_SQL_QUERY:
 +            case EXECUTE_SQL_FIELDS_QUERY: {
 +                RestSqlQueryRequest restReq0 = new RestSqlQueryRequest();
 +
 +                restReq0.sqlQuery((String) params.get("qry"));
 +
 +                if (req.getHeader("Content-Type") != null && req.getHeader("Content-Type").contains("json")) {
 +                    Map o = parseRequest(req);
 +                    List args = (List) ctx.scripting().toJavaObject(o.get("arg"));
 +                    restReq0.arguments(args.toArray());
 +                }
 +                else
 +                    restReq0.arguments(values("arg", params).toArray());
 +
 +                restReq0.typeName((String)params.get("type"));
 +                restReq0.pageSize(Integer.parseInt((String) params.get("psz")));
 +                restReq0.cacheName((String)params.get("cacheName"));
 +
 +                restReq = restReq0;
 +
 +                break;
 +            }
 +
 +            case FETCH_SQL_QUERY: {
 +                RestSqlQueryRequest restReq0 = new RestSqlQueryRequest();
 +
 +                restReq0.queryId(Long.parseLong((String)params.get("qryId")));
 +                restReq0.pageSize(Integer.parseInt((String)params.get("psz")));
 +                restReq0.cacheName((String)params.get("cacheName"));
 +
 +                restReq = restReq0;
 +
 +                break;
 +            }
 +
 +            case CLOSE_SQL_QUERY: {
 +                RestSqlQueryRequest restReq0 = new RestSqlQueryRequest();
 +
 +                restReq0.queryId(Long.parseLong((String)params.get("qryId")));
 +                restReq0.cacheName((String)params.get("cacheName"));
 +
 +                restReq = restReq0;
 +
 +                break;
 +            }
 +
              default:
                  throw new IgniteCheckedException("Invalid command: " + cmd);
          }