Skip to content

Commit

Permalink
extern: new command SLOTSRESTORE-ASYNC-SELECT
Browse files Browse the repository at this point in the history
  • Loading branch information
spinlock committed May 10, 2017
1 parent a5391b2 commit 88b32ba
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 36 deletions.
4 changes: 2 additions & 2 deletions extern/redis-3.2.8/src/help.h
Original file line number Diff line number Diff line change
Expand Up @@ -1093,11 +1093,11 @@ struct commandHelp {
"hashkey command [arg ...]",
"", 14, "codis3.2"
},
{"SLOTSRESTORE-ASYNC SELECT",
{"SLOTSRESTORE-ASYNC-SELECT",
"db",
"", 14, "codis3.2"
},
{"SLOTSRESTORE-ASYNC DEL",
{"SLOTSRESTORE-ASYNC DELETE",
"key",
"", 14, "codis3.2"
},
Expand Down
15 changes: 8 additions & 7 deletions extern/redis-3.2.8/src/server.c
Original file line number Diff line number Diff line change
Expand Up @@ -307,18 +307,19 @@ struct redisCommand redisCommandTable[] = {
{"slotshashkey",slotshashkeyCommand,-1,"rF",0,NULL,0,0,0,0,0},
{"slotscheck",slotscheckCommand,0,"r",0,NULL,0,0,0,0,0},
{"slotsrestore",slotsrestoreCommand,-4,"wm",0,NULL,0,0,0,0,0},
{"slotsmgrtslot-async",slotsmgrtSlotAsyncCommand,8,"w",0,NULL,0,0,0,0,0},
{"slotsmgrttagslot-async",slotsmgrtTagSlotAsyncCommand,8,"w",0,NULL,0,0,0,0,0},
{"slotsmgrtone-async",slotsmgrtOneAsyncCommand,-7,"w",0,NULL,0,0,0,0,0},
{"slotsmgrttagone-async",slotsmgrtTagOneAsyncCommand,-7,"w",0,NULL,0,0,0,0,0},
{"slotsmgrtslot-async",slotsmgrtSlotAsyncCommand,8,"ws",0,NULL,0,0,0,0,0},
{"slotsmgrttagslot-async",slotsmgrtTagSlotAsyncCommand,8,"ws",0,NULL,0,0,0,0,0},
{"slotsmgrtone-async",slotsmgrtOneAsyncCommand,-7,"ws",0,NULL,0,0,0,0,0},
{"slotsmgrttagone-async",slotsmgrtTagOneAsyncCommand,-7,"ws",0,NULL,0,0,0,0,0},
{"slotsmgrtone-async-dump",slotsmgrtOneAsyncDumpCommand,-4,"rm",0,NULL,0,0,0,0,0},
{"slotsmgrttagone-async-dump",slotsmgrtTagOneAsyncDumpCommand,-4,"rm",0,NULL,0,0,0,0,0},
{"slotsmgrt-async-fence",slotsmgrtAsyncFenceCommand,0,"r",0,NULL,0,0,0,0,0},
{"slotsmgrt-async-fence",slotsmgrtAsyncFenceCommand,0,"rs",0,NULL,0,0,0,0,0},
{"slotsmgrt-async-cancel",slotsmgrtAsyncCancelCommand,0,"F",0,NULL,0,0,0,0,0},
{"slotsmgrt-async-status",slotsmgrtAsyncStatusCommand,0,"F",0,NULL,0,0,0,0,0},
{"slotsmgrt-exec-wrapper",slotsmgrtExecWrapperCommand,-3,"wm",0,NULL,0,0,0,0,0},
{"slotsrestore-async",slotsrestoreAsyncCommand,-2,"w",0,NULL,0,0,0,0,0},
{"slotsrestore-async-auth",slotsrestoreAsyncAuthCommand,2,"F",0,NULL,0,0,0,0,0},
{"slotsrestore-async",slotsrestoreAsyncCommand,-2,"wm",0,NULL,0,0,0,0,0},
{"slotsrestore-async-auth",slotsrestoreAsyncAuthCommand,2,"sltF",0,NULL,0,0,0,0,0},
{"slotsrestore-async-select",slotsrestoreAsyncSelectCommand,2,"lF",0,NULL,0,0,0,0,0},
{"slotsrestore-async-ack",slotsrestoreAsyncAckCommand,3,"w",0,NULL,0,0,0,0,0},
};

Expand Down
1 change: 1 addition & 0 deletions extern/redis-3.2.8/src/server.h
Original file line number Diff line number Diff line change
Expand Up @@ -1707,6 +1707,7 @@ void slotsmgrtAsyncStatusCommand(client *c);
void slotsmgrtExecWrapperCommand(client *c);
void slotsrestoreAsyncCommand(client *c);
void slotsrestoreAsyncAuthCommand(client *c);
void slotsrestoreAsyncSelectCommand(client *c);
void slotsrestoreAsyncAckCommand(client *c);

void slotsmgrtAsyncCleanup();
Expand Down
54 changes: 27 additions & 27 deletions extern/redis-3.2.8/src/slots_async.c
Original file line number Diff line number Diff line change
Expand Up @@ -260,20 +260,19 @@ singleObjectIteratorNext(client *c, singleObjectIterator *it,
leading_msgs += 1;
}
do {
/* SLOTSRESTORE-ASYNC select $db */
addReplyMultiBulkLen(c, 3);
addReplyBulkCString(c, "SLOTSRESTORE-ASYNC");
addReplyBulkCString(c, "select");
/* SLOTSRESTORE-ASYNC-SELECT $db */
addReplyMultiBulkLen(c, 2);
addReplyBulkCString(c, "SLOTSRESTORE-ASYNC-SELECT");
addReplyBulkLongLong(c, c->db->id);
leading_msgs += 1;
} while (0);
}
}

/* SLOTSRESTORE-ASYNC del $key */
/* SLOTSRESTORE-ASYNC delete $key */
addReplyMultiBulkLen(c, 3);
addReplyBulkCString(c, "SLOTSRESTORE-ASYNC");
addReplyBulkCString(c, "del");
addReplyBulkCString(c, "delete");
addReplyBulk(c, key);

long n = numberOfRestoreCommandsFromObject(val, maxbulks);
Expand Down Expand Up @@ -1306,16 +1305,20 @@ slotsmgrtExecWrapperCommand(client *c) {
/* ============================ SlotsrestoreAsync Commands ================================= */

static void
slotsrestoreReplyAck(client *c, int errcode, const char *fmt, ...) {
slotsrestoreReplyAck(client *c, int err_code, const char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
sds s = sdscatvprintf(sdsempty(), fmt, ap);
va_end(ap);

addReplyMultiBulkLen(c, 3);
addReplyBulkCString(c, "SLOTSRESTORE-ASYNC-ACK");
addReplyBulkLongLong(c, errcode);
addReplyBulkLongLong(c, err_code);
addReplyBulkSds(c, s);

if (err_code != 0) {
c->flags |= CLIENT_CLOSE_AFTER_REPLY;
}
}

extern int verifyDumpPayload(unsigned char *p, size_t len);
Expand All @@ -1333,21 +1336,6 @@ slotsrestoreAsyncHandle(client *c) {
}
cmd = c->argv[1]->ptr;

/* SLOTSRESTORE-ASYNC select $db */
if (!strcasecmp(cmd, "select")) {
long long db;
if (c->argc != 3) {
goto bad_arguments_number;
}
if (getLongLongFromObject(c->argv[2], &db) != C_OK ||
!(db >= 0 && db <= INT_MAX) || selectDb(c, db) != C_OK) {
slotsrestoreReplyAck(c, -1, "invalid DB index (DB=%s)", c->argv[2]->ptr);
return C_ERR;
}
slotsrestoreReplyAck(c, 0, "%d", c->db->id);
return C_OK;
}

/* ==================================================== */
/* SLOTSRESTORE-ASYNC $cmd $key [$ttl $arg1, $arg2 ...] */
/* ==================================================== */
Expand All @@ -1358,8 +1346,8 @@ slotsrestoreAsyncHandle(client *c) {

robj *key = c->argv[2];

/* SLOTSRESTORE-ASYNC del $key */
if (!strcasecmp(cmd, "del")) {
/* SLOTSRESTORE-ASYNC delete $key */
if (!strcasecmp(cmd, "delete")) {
if (c->argc != 3) {
goto bad_arguments_number;
}
Expand Down Expand Up @@ -1635,8 +1623,7 @@ slotsrestoreAsyncHandle(client *c) {


/* *
* SLOTSRESTORE-ASYNC select $db
* del $key
* SLOTSRESTORE-ASYNC delete $key
* expire $key $ttl
* object $key $ttl $payload
* string $key $ttl $payload
Expand Down Expand Up @@ -1768,3 +1755,16 @@ slotsrestoreAsyncAuthCommand(client *c) {
}
}

/* *
* SLOTSRESTORE-ASYNC-SELECT $db
* */
void
slotsrestoreAsyncSelectCommand(client *c) {
long long db;
if (getLongLongFromObject(c->argv[1], &db) != C_OK ||
!(db >= 0 && db <= INT_MAX) || selectDb(c, db) != C_OK) {
slotsrestoreReplyAck(c, -1, "invalid DB index (%s)", c->argv[1]->ptr);
} else {
slotsrestoreReplyAck(c, 0, "OK");
}
}

0 comments on commit 88b32ba

Please sign in to comment.