You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sh...@apache.org on 2016/11/09 06:36:09 UTC
ignite git commit: IGNITE-3066: Implemented NX and XX options for SET
command.
Repository: ignite
Updated Branches:
refs/heads/ignite-2788 c827e0428 -> 606ff932c
IGNITE-3066: Implemented NX and XX options for SET command.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/606ff932
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/606ff932
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/606ff932
Branch: refs/heads/ignite-2788
Commit: 606ff932c2276569f6e2011b910a4cbe7c390994
Parents: c827e04
Author: shtykh_roman <rs...@yahoo.com>
Authored: Wed Nov 9 15:35:18 2016 +0900
Committer: shtykh_roman <rs...@yahoo.com>
Committed: Wed Nov 9 15:35:18 2016 +0900
----------------------------------------------------------------------
.../tcp/redis/RedisProtocolSelfTest.java | 11 +++++
.../string/GridRedisAppendCommandHandler.java | 2 +-
.../string/GridRedisSetCommandHandler.java | 45 ++++++++++++++++++--
3 files changed, 54 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/606ff932/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/RedisProtocolSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/RedisProtocolSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/RedisProtocolSelfTest.java
index 19111e6..d577efd 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/RedisProtocolSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/RedisProtocolSelfTest.java
@@ -205,6 +205,17 @@ public class RedisProtocolSelfTest extends GridCommonAbstractTest {
Assert.assertEquals("1", jcache().get("setKey1"));
Assert.assertEquals("b0", jcache().get("setKey2"));
+
+ // test options.
+ jedis.set("setKey1", "2", "nx");
+ jedis.set("setKey3", "3", "nx");
+ Assert.assertEquals("1", jcache().get("setKey1"));
+ Assert.assertEquals("3", jcache().get("setKey3"));
+
+ jedis.set("setKey1", "2", "xx");
+ jedis.set("setKey4", "4", "xx");
+ Assert.assertEquals("2", jcache().get("setKey1"));
+ Assert.assertNull(jcache().get("setKey4"));
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/606ff932/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisAppendCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisAppendCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisAppendCommandHandler.java
index 78fc8d3..fa70793 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisAppendCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisAppendCommandHandler.java
@@ -78,7 +78,7 @@ public class GridRedisAppendCommandHandler extends GridRedisThruRestCommandHandl
Object resp = hnd.handle(appendReq).getResponse();
if (resp != null && !(boolean)resp) {
- // append on existing key.
+ // append on non-existing key.
GridRestCacheRequest setReq = new GridRestCacheRequest();
setReq.clientId(msg.clientId());
http://git-wip-us.apache.org/repos/asf/ignite/blob/606ff932/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
index 1d447f1..bbc3c06 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
@@ -32,6 +32,8 @@ import org.apache.ignite.internal.processors.rest.request.GridRestRequest;
import org.apache.ignite.internal.util.typedef.internal.U;
import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_PUT;
+import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_PUT_IF_ABSENT;
+import static org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_REPLACE;
import static org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisCommand.SET;
/**
@@ -75,15 +77,52 @@ public class GridRedisSetCommandHandler extends GridRedisThruRestCommandHandler
restReq.value(msg.aux(VAL_POS));
if (msg.messageSize() >= 4) {
- // TODO: handle options.
+
+ List<String> params = msg.aux();
+
+ // get rid of SET value.
+ params.remove(0);
+
+ if (isNx(params))
+ restReq.command(CACHE_PUT_IF_ABSENT);
+ else if (isXx(params))
+ restReq.command(CACHE_REPLACE);
+
+ // TODO: handle expiration options.
}
return restReq;
}
+ /**
+ * @param params Command parameters.
+ * @return True if NX option is available, otherwise false.
+ */
+ private boolean isNx(List<String> params) {
+ if (params.size() >= 3)
+ return params.get(0).equalsIgnoreCase("nx") || params.get(2).equalsIgnoreCase("nx");
+ else
+ return params.get(0).equalsIgnoreCase("nx");
+ }
+
+ /**
+ * @param params Command parameters.
+ * @return True if XX option is available, otherwise false.
+ */
+ private boolean isXx(List<String> params) {
+ if (params.size() >= 3)
+ return params.get(0).equalsIgnoreCase("xx") || params.get(2).equalsIgnoreCase("xx");
+ else
+ return params.get(0).equalsIgnoreCase("xx");
+ }
+
/** {@inheritDoc} */
@Override public ByteBuffer makeResponse(final GridRestResponse restRes, List<String> params) {
- return (restRes.getResponse() == null ? GridRedisProtocolParser.nil()
- : GridRedisProtocolParser.OkString());
+ Object resp = restRes.getResponse();
+
+ if (resp == null)
+ return GridRedisProtocolParser.nil();
+
+ return (!(boolean)resp ? GridRedisProtocolParser.nil() : GridRedisProtocolParser.OkString());
}
}