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/01 15:09:13 UTC
[5/8] incubator-ignite git commit: #ignite-964: add
CACHE_GET_AND_REMOVE method for nodejs cache.
#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 <iv...@gridgain.com>
Authored: Wed Jul 1 15:46:32 2015 +0300
Committer: ivasilinets <iv...@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);