]> git.saurik.com Git - redis.git/commitdiff
Differentiate SCRIPT KILL error replies.
authorantirez <antirez@gmail.com>
Mon, 22 Oct 2012 08:28:54 +0000 (10:28 +0200)
committerantirez <antirez@gmail.com>
Mon, 22 Oct 2012 08:31:28 +0000 (10:31 +0200)
When calling SCRIPT KILL currently you can get two errors:

* No script in timeout (busy) state.
* The script already performed a write.

It is useful to be able to distinguish the two errors, but right now both
start with "ERR" prefix, so string matching (that is fragile) must be used.

This commit introduces two different prefixes.

-NOTBUSY and -UNKILLABLE respectively to reply with an error when no
script is busy at the moment, and when the script already executed a
write operation and can not be killed.

src/scripting.c
tests/unit/scripting.tcl

index 13f608e67cfe23c6819f9e76f1adc78d7033a026..6f9ec2e89da0a35dae162fbebf564b5429f3f382 100644 (file)
@@ -977,9 +977,9 @@ void scriptCommand(redisClient *c) {
         sdsfree(sha);
     } else if (c->argc == 2 && !strcasecmp(c->argv[1]->ptr,"kill")) {
         if (server.lua_caller == NULL) {
-            addReplyError(c,"No scripts in execution right now.");
+            addReplySds(c,sdsnew("-NOTBUSY No scripts in execution right now.\r\n"));
         } else if (server.lua_write_dirty) {
-            addReplyError(c, "Sorry the script already executed write commands against the dataset. You can either wait the script termination or kill the server in an hard way using the SHUTDOWN NOSAVE command.");
+            addReplySds(c,sdsnew("-UNKILLABLE Sorry the script already executed write commands against the dataset. You can either wait the script termination or kill the server in an hard way using the SHUTDOWN NOSAVE command.\r\n"));
         } else {
             server.lua_kill = 1;
             addReply(c,shared.ok);
index 6dbdb6b63d7df755ec74961a46657dd8909da5bf..f96d0fc6489ef878f46780a316b22fdd5d3dd503 100644 (file)
@@ -301,7 +301,7 @@ start_server {tags {"scripting"}} {
         catch {r ping} e
         assert_match {BUSY*} $e
         catch {r script kill} e
-        assert_match {ERR*} $e
+        assert_match {UNKILLABLE*} $e
         catch {r ping} e
         assert_match {BUSY*} $e
     }