#ignite-964: add CACHE_REMOVE_VALUE 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/61f88e8f Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/61f88e8f Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/61f88e8f Branch: refs/heads/ignite-964 Commit: 61f88e8fd8c50aba12c2b884287e28efef2f76f5 Parents: d44d7f2 Author: ivasilinets <ivasilin...@gridgain.com> Authored: Wed Jul 1 16:00:47 2015 +0300 Committer: ivasilinets <ivasilin...@gridgain.com> Committed: Wed Jul 1 16:00:47 2015 +0300 ---------------------------------------------------------------------- .../processors/rest/GridRestCommand.java | 3 + .../processors/rest/GridRestProcessor.java | 1 + .../handlers/cache/GridCacheCommandHandler.java | 78 ++++++++++++-------- modules/nodejs/src/main/js/cache.js | 16 +++- .../ignite/internal/NodeJsCacheApiSelfTest.java | 7 ++ modules/nodejs/src/test/js/test-cache-api.js | 19 ++++- .../http/jetty/GridJettyRestHandler.java | 3 +- 7 files changed, 92 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/61f88e8f/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 b8f05bf..86237b8 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 @@ -64,6 +64,9 @@ public enum GridRestCommand { 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. */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/61f88e8f/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 b524e92..a19fde7 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 @@ -559,6 +559,7 @@ 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(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/61f88e8f/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 b5b59fc..6db6c23 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 @@ -64,6 +64,7 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { CACHE_ADD, CACHE_PUT_ALL, CACHE_REMOVE, + CACHE_REMOVE_VALUE, CACHE_GET_AND_REMOVE, CACHE_REMOVE_ALL, CACHE_REPLACE, @@ -83,6 +84,7 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { CACHE_PUT, CACHE_ADD, CACHE_REMOVE, + CACHE_REMOVE_VALUE, CACHE_GET_AND_REMOVE, CACHE_REPLACE, ATOMIC_INCREMENT, @@ -170,38 +172,22 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { } case CACHE_GET_AND_PUT: { - final Object val = req0.value(); - - if (val == null) - throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("val")); - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key, - new GetAndPutCommand(key, val)); + new GetAndPutCommand(key, getValue(req0))); break; } case CACHE_GET_AND_PUT_IF_ABSENT: { - final Object val = req0.value(); - - if (val == null) - throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("val")); - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key, - new GetAndPutIfAbsentCommand(key, val)); + new GetAndPutIfAbsentCommand(key, getValue(req0))); break; } case CACHE_PUT_IF_ABSENT: { - - final Object val = req0.value(); - - if (val == null) - throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("val")); - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key, - new PutIfAbsentCommand(key, val)); + new PutIfAbsentCommand(key, getValue(req0))); break; } @@ -214,25 +200,15 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { } case CACHE_PUT: { - final Object val = req0.value(); - - if (val == null) - throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("val")); - 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; } @@ -267,6 +243,13 @@ 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_GET_AND_REMOVE: { fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key, new GetAndRemoveCommand(key)); @@ -375,6 +358,20 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { } /** + * @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. * @@ -970,6 +967,25 @@ 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; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/61f88e8f/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 9184154..57f1f79 100644 --- a/modules/nodejs/src/main/js/cache.js +++ b/modules/nodejs/src/main/js/cache.js @@ -78,7 +78,7 @@ Cache.prototype.putIfAbsent = function(key, value, callback) { * Remove cache key * * @this {Cache} - * @param {string} key Key + * @param key Key * @param {noValue} callback Called on finish */ Cache.prototype.remove = function(key, callback) { @@ -88,6 +88,20 @@ Cache.prototype.remove = function(key, callback) { } /** + * Remove cache key + * + * @this {Cache} + * @param key Key + * @param value Value + * @param {noValue} callback Called on finish + */ +Cache.prototype.removeValue = function(key, value, callback) { + this._server.runCommand(this._createCommand("rmvvalue"). + setPostData(JSON.stringify({"key": key, "val" : value})), + callback); +} + +/** * Get and remove cache key * * @this {Cache} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/61f88e8f/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 201cc3d..dcb0db5 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 @@ -154,4 +154,11 @@ public class NodeJsCacheApiSelfTest extends NodeJsAbstractTest { public void testGetAndRemove() throws Exception { runJsScript("testGetAndRemove"); } + + /** + * @throws Exception If failed. + */ + public void testRemoveValue() throws Exception { + runJsScript("testRemoveValue"); + } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/61f88e8f/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 466518d..3e397bc 100644 --- a/modules/nodejs/src/test/js/test-cache-api.js +++ b/modules/nodejs/src/test/js/test-cache-api.js @@ -91,7 +91,7 @@ testGetAndPutIfAbsent = function() { function onGetAndPutIfAbsent(err, res) { assert(err === null, "Get error on get and put [err=" + err + "]"); - assert(res === "6", "Incorrect result for getAndPut [expected=6, val" + res + "]"); + assert(res === "6", "Incorrect result for getAndPutIfAbsent [expected=6, val" + res + "]"); next(); } @@ -106,7 +106,7 @@ testPutIfAbsent = function() { function onPutIfAbsent(err, res) { assert(err === null, "Get error on get and put [err=" + err + "]"); - assert(res === false, "Incorrect result for getAndPut [expected=false, val" + res + "]"); + assert(res === false, "Incorrect result for putIfAbsent [expected=false, val" + res + "]"); next(); } @@ -115,6 +115,21 @@ testPutIfAbsent = function() { startTest("mycache", {trace: [put, putIfAbsent, getExist], entry: ["key", "6"]}); } +testRemoveValue = function() { + function removeValue(cache, entry, next) { + cache.removeValue("key", "7", onRemoveValue); + + function onRemoveValue(err, res) { + assert(err === null, "Get error on get and put [err=" + err + "]"); + assert(res === false, "Incorrect result for onRemoveValue [expected=false, val" + res + "]"); + + next(); + } + } + + startTest("mycache", {trace: [put, removeValue, getExist], entry: ["key", "6"]}); +} + testGetAndRemove = function() { function getAndRemove(cache, entry, next) { cache.getAndRemove("key", onGetAndRemove); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/61f88e8f/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 0574786..cacbf19 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 @@ -372,6 +372,7 @@ public class GridJettyRestHandler extends AbstractHandler { case CACHE_PUT: case CACHE_PUT_ALL: case CACHE_REMOVE: + case CACHE_REMOVE_VALUE: case CACHE_GET_AND_REMOVE: case CACHE_REMOVE_ALL: case CACHE_ADD: @@ -420,7 +421,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_REMOVE || - cmd == CACHE_PUT_IF_ABSENT) { + cmd == CACHE_PUT_IF_ABSENT || cmd == CACHE_REMOVE_VALUE) { JSONCacheObject cacheObj = new JSONCacheObject(o); restReq0.cacheName(F.isEmpty(cacheName) ? null : cacheName);