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:14 UTC
[6/8] incubator-ignite git commit: #ignite-964: add
CACHE_PUT_IF_ABSENT method for nodejs cache.
#ignite-964: add CACHE_PUT_IF_ABSENT 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/d44d7f20
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/d44d7f20
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/d44d7f20
Branch: refs/heads/ignite-964
Commit: d44d7f209e46d7dcf6b35b179016dfbfaf435993
Parents: d7faab3
Author: ivasilinets <iv...@gridgain.com>
Authored: Wed Jul 1 15:52:29 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Wed Jul 1 15:52:29 2015 +0300
----------------------------------------------------------------------
.../processors/rest/GridRestCommand.java | 3 ++
.../processors/rest/GridRestProcessor.java | 1 +
.../handlers/cache/GridCacheCommandHandler.java | 34 ++++++++++++++++++++
modules/nodejs/src/main/js/cache.js | 14 ++++++++
.../ignite/internal/NodeJsCacheApiSelfTest.java | 7 ++++
modules/nodejs/src/test/js/test-cache-api.js | 15 +++++++++
.../http/jetty/GridJettyRestHandler.java | 4 ++-
7 files changed, 77 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d44d7f20/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 4ded850..b8f05bf 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
@@ -51,6 +51,9 @@ public enum GridRestCommand {
/** 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"),
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d44d7f20/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 e477547..b524e92 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
@@ -550,6 +550,7 @@ public class GridRestProcessor extends GridProcessorAdapter {
case CACHE_PREPEND:
case CACHE_GET_AND_PUT:
case CACHE_GET_AND_PUT_IF_ABSENT:
+ case CACHE_PUT_IF_ABSENT:
perm = SecurityPermission.CACHE_PUT;
name = ((GridRestCacheRequest)req).cacheName();
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d44d7f20/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 ef14582..b5b59fc 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
@@ -58,6 +58,7 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
CACHE_GET,
CACHE_GET_AND_PUT,
CACHE_GET_AND_PUT_IF_ABSENT,
+ CACHE_PUT_IF_ABSENT,
CACHE_GET_ALL,
CACHE_PUT,
CACHE_ADD,
@@ -78,6 +79,7 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
CACHE_GET,
CACHE_GET_AND_PUT,
CACHE_GET_AND_PUT_IF_ABSENT,
+ CACHE_PUT_IF_ABSENT,
CACHE_PUT,
CACHE_ADD,
CACHE_REMOVE,
@@ -191,6 +193,19 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
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));
+
+ break;
+ }
+
case CACHE_GET_ALL: {
fut = executeCommand(req.destinationId(), req.clientId(), cacheName, skipStore, key,
new GetAllCommand(getKeys(req0)));
@@ -873,6 +888,25 @@ public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter {
}
/** */
+ 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;
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d44d7f20/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 169b3bc..9184154 100644
--- a/modules/nodejs/src/main/js/cache.js
+++ b/modules/nodejs/src/main/js/cache.js
@@ -61,6 +61,20 @@ Cache.prototype.put = function(key, value, callback) {
}
/**
+ * Put if absent
+ *
+ * @this {Cache}
+ * @param {string} key Key
+ * @param {string} value Value
+ * @param {onGet} callback Called on finish
+ */
+Cache.prototype.putIfAbsent = function(key, value, callback) {
+ this._server.runCommand(this._createCommand("putifabsent").
+ setPostData(JSON.stringify({"key": key, "val" : value})),
+ callback);
+}
+
+/**
* Remove cache key
*
* @this {Cache}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d44d7f20/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 a551749..201cc3d 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
@@ -144,6 +144,13 @@ public class NodeJsCacheApiSelfTest extends NodeJsAbstractTest {
/**
* @throws Exception If failed.
*/
+ public void testPutIfAbsent() throws Exception {
+ runJsScript("testPutIfAbsent");
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
public void testGetAndRemove() throws Exception {
runJsScript("testGetAndRemove");
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d44d7f20/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 0840160..466518d 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"]});
}
+testPutIfAbsent = function() {
+ function putIfAbsent(cache, entry, next) {
+ cache.putIfAbsent("key", "7", onPutIfAbsent);
+
+ 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 + "]");
+
+ next();
+ }
+ }
+
+ startTest("mycache", {trace: [put, putIfAbsent, 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/d44d7f20/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 4b6ed55..0574786 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
@@ -367,6 +367,7 @@ public class GridJettyRestHandler extends AbstractHandler {
case CACHE_GET:
case CACHE_GET_ALL:
case CACHE_GET_AND_PUT:
+ case CACHE_PUT_IF_ABSENT:
case CACHE_GET_AND_PUT_IF_ABSENT:
case CACHE_PUT:
case CACHE_PUT_ALL:
@@ -418,7 +419,8 @@ 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_GET_AND_PUT_IF_ABSENT || cmd == CACHE_GET_AND_REMOVE ||
+ cmd == CACHE_PUT_IF_ABSENT) {
JSONCacheObject cacheObj = new JSONCacheObject(o);
restReq0.cacheName(F.isEmpty(cacheName) ? null : cacheName);