#ignite-964: add CACHE_GET_AND_REMOVE 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/d7faab39 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/d7faab39 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/d7faab39 Branch: refs/heads/ignite-964 Commit: d7faab397726a472e7ff0a61e13dd3e937ee656f Parents: 16ff838 Author: ivasilinets <ivasilin...@gridgain.com> Authored: Wed Jul 1 15:46:32 2015 +0300 Committer: ivasilinets <ivasilin...@gridgain.com> Committed: Wed Jul 1 15:46:32 2015 +0300 ---------------------------------------------------------------------- .../processors/rest/GridRestCommand.java | 3 ++ .../processors/rest/GridRestProcessor.java | 1 + .../handlers/cache/GridCacheCommandHandler.java | 29 +++++++++++++++++++- modules/nodejs/src/main/js/cache.js | 13 +++++++++ .../ignite/internal/NodeJsCacheApiSelfTest.java | 7 +++++ modules/nodejs/src/test/js/test-cache-api.js | 15 ++++++++++ .../http/jetty/GridJettyRestHandler.java | 3 +- 7 files changed, 69 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d7faab39/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 5a11faf..4ded850 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 @@ -60,6 +60,9 @@ public enum GridRestCommand { /** Remove value from cache. */ CACHE_REMOVE("rmv"), + /** Remove value from cache. */ + CACHE_GET_AND_REMOVE("getandrmv"), + /** Remove several values from cache. */ CACHE_REMOVE_ALL("rmvall"), http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d7faab39/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 14811f3..e477547 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 @@ -557,6 +557,7 @@ public class GridRestProcessor extends GridProcessorAdapter { case CACHE_REMOVE: case CACHE_REMOVE_ALL: + case CACHE_GET_AND_REMOVE: perm = SecurityPermission.CACHE_REMOVE; name = ((GridRestCacheRequest)req).cacheName(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d7faab39/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 798d151..ef14582 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 @@ -63,6 +63,7 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { CACHE_ADD, CACHE_PUT_ALL, CACHE_REMOVE, + CACHE_GET_AND_REMOVE, CACHE_REMOVE_ALL, CACHE_REPLACE, CACHE_CAS, @@ -80,6 +81,7 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { CACHE_PUT, CACHE_ADD, CACHE_REMOVE, + CACHE_GET_AND_REMOVE, CACHE_REPLACE, ATOMIC_INCREMENT, ATOMIC_DECREMENT, @@ -250,6 +252,13 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { 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(); @@ -911,7 +920,7 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { private static final long serialVersionUID = 0L; /** */ - private final Object key; + protected final Object key; /** * @param key Key. @@ -927,6 +936,24 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { } /** */ + 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; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d7faab39/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 17abd2a..169b3bc 100644 --- a/modules/nodejs/src/main/js/cache.js +++ b/modules/nodejs/src/main/js/cache.js @@ -74,6 +74,19 @@ Cache.prototype.remove = function(key, callback) { } /** + * Get and remove cache key + * + * @this {Cache} + * @param {string} key Key + * @param {onGet} callback Called on finish with previous value + */ +Cache.prototype.getAndRemove = function(key, callback) { + this._server.runCommand(this._createCommand("getandrmv"). + setPostData(JSON.stringify({"key": key})), + callback); +} + +/** * Remove cache keys * * @this {Cache} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d7faab39/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 8ae8c7b..a551749 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 @@ -140,4 +140,11 @@ public class NodeJsCacheApiSelfTest extends NodeJsAbstractTest { public void testGetAndPutIfAbsent() throws Exception { runJsScript("testGetAndPutIfAbsent"); } + + /** + * @throws Exception If failed. + */ + public void testGetAndRemove() throws Exception { + runJsScript("testGetAndRemove"); + } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d7faab39/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 9b28b4e..0840160 100644 --- a/modules/nodejs/src/test/js/test-cache-api.js +++ b/modules/nodejs/src/test/js/test-cache-api.js @@ -100,6 +100,21 @@ testGetAndPutIfAbsent = function() { startTest("mycache", {trace: [put, getAndPutIfAbsent, getExist], entry: ["key", "6"]}); } +testGetAndRemove = function() { + function getAndRemove(cache, entry, next) { + cache.getAndRemove("key", onGetAndRemove); + + function onGetAndRemove(err, res) { + assert(err === null, "Get error on get and put [err=" + err + "]"); + assert(res === "6", "Incorrect result for getAndPut [expected=6, val" + res + "]"); + + next(); + } + } + + startTest("mycache", {trace: [put, getAndRemove, getNone], entry: ["key", "6"]}); +} + function objectEntries() { entries = []; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d7faab39/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 d190163..4b6ed55 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 @@ -371,6 +371,7 @@ public class GridJettyRestHandler extends AbstractHandler { case CACHE_PUT: case CACHE_PUT_ALL: case CACHE_REMOVE: + case CACHE_GET_AND_REMOVE: case CACHE_REMOVE_ALL: case CACHE_ADD: case CACHE_CAS: @@ -417,7 +418,7 @@ public class GridJettyRestHandler extends AbstractHandler { } else if (cmd == CACHE_GET || cmd == CACHE_PUT || cmd == CACHE_REMOVE || cmd == CACHE_CONTAINS_KEY || cmd == CACHE_GET_AND_PUT || - cmd == CACHE_GET_AND_PUT_IF_ABSENT) { + cmd == CACHE_GET_AND_PUT_IF_ABSENT || cmd == CACHE_GET_AND_REMOVE) { JSONCacheObject cacheObj = new JSONCacheObject(o); restReq0.cacheName(F.isEmpty(cacheName) ? null : cacheName);