Skip to content

Commit d4d30a0

Browse files
committed
Client-driven replay support for INCR, HMSET
1 parent ab374e6 commit d4d30a0

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

src/server.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ struct redisCommand redisCommandTable[] = {
139139
{"setrange",setrangeCommand,4,"wm",0,NULL,1,1,1,0,0},
140140
{"getrange",getrangeCommand,4,"r",0,NULL,1,1,1,0,0},
141141
{"substr",getrangeCommand,4,"r",0,NULL,1,1,1,0,0},
142-
{"incr",incrCommand,2,"wmF",0,NULL,1,1,1,0,0},
142+
{"incr",incrCommand,4,"wmFO",0,NULL,1,1,1,0,0},
143143
{"decr",decrCommand,2,"wmF",0,NULL,1,1,1,0,0},
144144
{"mget",mgetCommand,-2,"r",0,NULL,1,-1,1,0,0},
145145
{"rpush",rpushCommand,-3,"wmF",0,NULL,1,1,1,0,0},
@@ -198,7 +198,7 @@ struct redisCommand redisCommandTable[] = {
198198
{"hset",hsetCommand,4,"wmF",0,NULL,1,1,1,0,0},
199199
{"hsetnx",hsetnxCommand,4,"wmF",0,NULL,1,1,1,0,0},
200200
{"hget",hgetCommand,3,"rF",0,NULL,1,1,1,0,0},
201-
{"hmset",hmsetCommand,-4,"wm",0,NULL,1,1,1,0,0},
201+
{"hmset",hmsetCommand,-6,"wmO",0,NULL,1,1,1,0,0},
202202
{"hmget",hmgetCommand,-3,"r",0,NULL,1,1,1,0,0},
203203
{"hincrby",hincrbyCommand,4,"wmF",0,NULL,1,1,1,0,0},
204204
{"hincrbyfloat",hincrbyfloatCommand,4,"wmF",0,NULL,1,1,1,0,0},

src/t_hash.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -524,12 +524,16 @@ void hmsetCommand(client *c) {
524524
}
525525

526526
if ((o = hashTypeLookupWriteOrCreate(c,c->argv[1])) == NULL) return;
527-
hashTypeTryConversion(o,c->argv,2,c->argc-1);
528-
for (i = 2; i < c->argc; i += 2) {
527+
hashTypeTryConversion(o,c->argv,2,c->argc-1 - 2 /* exclude RIFL args */);
528+
for (i = 2; i < c->argc - 2;/* exclude RIFL args */ i += 2) {
529529
hashTypeTryObjectEncoding(o,&c->argv[i], &c->argv[i+1]);
530530
hashTypeSet(o,c->argv[i],c->argv[i+1]);
531531
}
532-
addReply(c, shared.ok);
532+
// addReply(c, shared.ok);
533+
sds s = sdsempty();
534+
addReplySds(c, sdscatfmt(s, "%S %U %U\r\n", shared.unsyncedOk->ptr,
535+
server.currentOpNum, server.aof_last_fsync_opNum));
536+
533537
signalModifiedKey(c->db,c->argv[1]);
534538
notifyKeyspaceEvent(NOTIFY_HASH,"hset",c->argv[1],c->db->id);
535539
server.dirty++;

src/t_string.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,10 @@ void incrDecrCommand(client *c, long long incr) {
381381
server.dirty++;
382382
addReply(c,shared.colon);
383383
addReply(c,new);
384-
addReply(c,shared.crlf);
384+
385+
sds s = sdsempty();
386+
addReplySds(c, sdscatfmt(s, " %U %U\r\n", server.currentOpNum, server.aof_last_fsync_opNum));
387+
// addReply(c,shared.crlf);
385388
}
386389

387390
void incrCommand(client *c) {

0 commit comments

Comments
 (0)