Repository: incubator-ignite Updated Branches: refs/heads/ignite-964 ad11a4a12 -> 830f397d0
#ignite-964: add contains key method for nodejs cache. Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/7bed77b3 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/7bed77b3 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/7bed77b3 Branch: refs/heads/ignite-964 Commit: 7bed77b375580b62f4bc5b98b32a595716868cad Parents: ad11a4a Author: ivasilinets <ivasilin...@gridgain.com> Authored: Wed Jul 1 13:47:56 2015 +0300 Committer: ivasilinets <ivasilin...@gridgain.com> Committed: Wed Jul 1 13:47:56 2015 +0300 ---------------------------------------------------------------------- .../processors/rest/GridRestCommand.java | 3 ++ .../processors/rest/GridRestProcessor.java | 2 ++ .../handlers/cache/GridCacheCommandHandler.java | 30 ++++++++++++++++++++ modules/nodejs/src/main/js/cache.js | 30 ++++++++++++++------ .../ignite/internal/NodeJsCacheApiSelfTest.java | 14 +++++++++ modules/nodejs/src/test/js/test-cache-api.js | 30 ++++++++++++++++++++ .../http/jetty/GridJettyRestHandler.java | 4 ++- 7 files changed, 103 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7bed77b3/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 0afefb6..48d5bcf 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,6 +33,9 @@ public enum GridRestCommand { /** Get cached value. */ CACHE_GET("get"), + /** Contains cached value. */ + CACHE_CONTAINS_KEY("containskey"), + /** Get several cached values. */ CACHE_GET_ALL("getall"), http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7bed77b3/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 5a073a0..220f2d1 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 @@ -388,6 +388,7 @@ public class GridRestProcessor extends GridProcessorAdapter { if (interceptor != null && res.getResponse() != null) { switch (req.command()) { + case CACHE_CONTAINS_KEY: case CACHE_GET: case CACHE_GET_ALL: case CACHE_PUT: @@ -531,6 +532,7 @@ public class GridRestProcessor extends GridProcessorAdapter { switch (req.command()) { case CACHE_GET: + case CACHE_CONTAINS_KEY: case CACHE_GET_ALL: perm = SecurityPermission.CACHE_READ; name = ((GridRestCacheRequest)req).cacheName(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7bed77b3/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..a4dc466 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,6 +53,7 @@ import static org.apache.ignite.transactions.TransactionIsolation.*; public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { /** Supported commands. */ private static final Collection<GridRestCommand> SUPPORTED_COMMANDS = U.sealList( + CACHE_CONTAINS_KEY, CACHE_GET, CACHE_GET_ALL, CACHE_PUT, @@ -69,6 +70,7 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { /** Requests with required parameter {@code key}. */ private static final EnumSet<GridRestCommand> KEY_REQUIRED_REQUESTS = EnumSet.of( + CACHE_CONTAINS_KEY, CACHE_GET, CACHE_PUT, CACHE_ADD, @@ -137,6 +139,13 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { IgniteInternalFuture<GridRestResponse> fut; switch (cmd) { + case CACHE_CONTAINS_KEY: { + fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key, + new ContainsCommand(key)); + + break; + } + case CACHE_GET: { fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key, new GetCommand(key)); @@ -702,6 +711,27 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { } /** */ + private static class ContainsCommand extends CacheProjectionCommand { + /** */ + private static final long serialVersionUID = 0L; + + /** */ + private final Object key; + + /** + * @param key Key. + */ + ContainsCommand(Object key) { + this.key = key; + } + + /** {@inheritDoc} */ + @Override public IgniteInternalFuture<?> applyx(IgniteInternalCache<Object, Object> c, GridKernalContext ctx) { + return c.containsKeyAsync(key); + } + } + + /** */ private static class GetCommand extends CacheProjectionCommand { /** */ private static final long serialVersionUID = 0L; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7bed77b3/modules/nodejs/src/main/js/cache.js ---------------------------------------------------------------------- diff --git a/modules/nodejs/src/main/js/cache.js b/modules/nodejs/src/main/js/cache.js index c65f026..2d91fcb 100644 --- a/modules/nodejs/src/main/js/cache.js +++ b/modules/nodejs/src/main/js/cache.js @@ -99,18 +99,10 @@ Cache.prototype.putAll = function(entries, callback) { } /** - * Callback for cache get - * - * @callback Cache~onGetAll - * @param {string} error Error - * @param {string[]} results Result values - */ - -/** * Get keys from the cache * * @this {Cache} - * @param {string[]} keys Keys + * @param {Object[]} keys Keys * @param {Cache~onGetAll} callback Called on finish */ Cache.prototype.getAll = function(keys, callback) { @@ -136,6 +128,18 @@ Cache.prototype.getAll = function(keys, callback) { } /** + * Determines if the cache contains an entry for the specified key. + * + * @this {Cache} + * @param {Object} key Key + * @param {Cache~onGetAll} callback Called on finish with boolean result + */ +Cache.prototype.containsKey = function(key, callback) { + this._server.runCommand(this._createCommand("containskey"). + setPostData(JSON.stringify({"key" : key})), callback); +} + +/** * Execute sql query * * @param {SqlQuery|SqlFieldsQuery} qry Query @@ -234,5 +238,13 @@ Entry.prototype.val = function() { return this._val; } +/** + * Callback for cache get + * + * @callback Cache~onGetAll + * @param {string} error Error + * @param {string[]} results Result values + */ + exports.Cache = Cache exports.Entry = Entry \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7bed77b3/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsCacheApiSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsCacheApiSelfTest.java b/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsCacheApiSelfTest.java index d8f3859..8fadcc4 100644 --- a/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsCacheApiSelfTest.java +++ b/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsCacheApiSelfTest.java @@ -98,4 +98,18 @@ public class NodeJsCacheApiSelfTest extends NodeJsAbstractTest { public void testRemoveAllObjectGetAll() throws Exception { runJsScript("testRemoveAllObjectGetAll"); } + + /** + * @throws Exception If failed. + */ + public void testContains() throws Exception { + runJsScript("testContains"); + } + + /** + * @throws Exception If failed. + */ + public void testPutContains() throws Exception { + runJsScript("testPutContains"); + } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7bed77b3/modules/nodejs/src/test/js/test-cache-api.js ---------------------------------------------------------------------- diff --git a/modules/nodejs/src/test/js/test-cache-api.js b/modules/nodejs/src/test/js/test-cache-api.js index fa3f6cc..afcefa3 100644 --- a/modules/nodejs/src/test/js/test-cache-api.js +++ b/modules/nodejs/src/test/js/test-cache-api.js @@ -26,6 +26,14 @@ testPutGet = function() { startTest("mycache", {trace: [put, getExist], entry: ["key" , "6"]}); } +testPutContains = function() { + startTest("mycache", {trace: [put, containsKey], entry: ["key" , "6"]}); +} + +testContains = function() { + startTest("mycache", {trace: [notContainsKey], entry: ["key" , "6"]}); +} + testRemove = function() { startTest("mycache", {trace: [put, getExist, remove, getNonExist], entry: ["key" , "6"]}); } @@ -106,6 +114,28 @@ function put(cache, entry, next) { cache.put(entry[0], entry[1], next); } +function containsKey(cache, entry, next) { + cache.containsKey(entry[0], onContainsKey); + + function onContainsKey(err, val) { + assert(err === null, "Error on contains key [err=" + err + "]"); + assert(val === true, "Incorrect result [expected=" + true + ", val=" + val + "]"); + + TestUtils.testDone(); + } +} + +function notContainsKey(cache, entry, next) { + cache.containsKey(entry[0], onContainsKey); + + function onContainsKey(err, val) { + assert(err === null, "Error on contains key [err=" + err + "]"); + assert(val === false, "Incorrect result [expected=" + false + ", val=" + val + "]"); + + TestUtils.testDone(); + } +} + function getExist(cache, entry, next) { var key = Object.keys(entry)[0]; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7bed77b3/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 b5877b6..c6fbbea 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 @@ -362,6 +362,7 @@ public class GridJettyRestHandler extends AbstractHandler { break; } + case CACHE_CONTAINS_KEY: case CACHE_GET: case CACHE_GET_ALL: case CACHE_PUT: @@ -411,7 +412,8 @@ public class GridJettyRestHandler extends AbstractHandler { restReq0.values(map); } - else if (cmd == CACHE_GET || cmd == CACHE_PUT || cmd == CACHE_REMOVE) { + else if (cmd == CACHE_GET || cmd == CACHE_PUT || cmd == CACHE_REMOVE || + cmd == CACHE_CONTAINS_KEY) { JSONCacheObject cacheObj = new JSONCacheObject(o); restReq0.cacheName(F.isEmpty(cacheName) ? null : cacheName);