diff options
author | antirez <antirez@gmail.com> | 2011-11-14 10:15:13 +0100 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2011-11-14 10:15:13 +0100 |
commit | 5244d6e54ec08666f953124739a498d0537a2bf9 (patch) | |
tree | 4e4f079881840b8e15bd31930fba9e5df08fad77 /src/t_string.c | |
parent | 5574b53eae1743cca9eed5a9dd25bf418c974701 (diff) | |
download | redis-5244d6e54ec08666f953124739a498d0537a2bf9.tar.gz |
rewrite INCRBYFLOAT as SETs for AOF/replication
Diffstat (limited to 'src/t_string.c')
-rw-r--r-- | src/t_string.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/t_string.c b/src/t_string.c index 1f0b1fbcc..2bd1646e3 100644 --- a/src/t_string.c +++ b/src/t_string.c @@ -385,7 +385,7 @@ void decrbyCommand(redisClient *c) { void incrbyfloatCommand(redisClient *c) { long double incr, value; - robj *o, *new; + robj *o, *new, *aux; o = lookupKeyWrite(c->db,c->argv[1]); if (o != NULL && checkType(c,o,REDIS_STRING)) return; @@ -406,6 +406,14 @@ void incrbyfloatCommand(redisClient *c) { signalModifiedKey(c->db,c->argv[1]); server.dirty++; addReplyBulk(c,new); + + /* Always replicate INCRBYFLOAT as a SET command with the final value + * in order to make sure that differences in float pricision or formatting + * will not create differences in replicas or after an AOF restart. */ + aux = createStringObject("SET",3); + rewriteClientCommandArgument(c,0,aux); + decrRefCount(aux); + rewriteClientCommandArgument(c,2,new); } void appendCommand(redisClient *c) { |