summaryrefslogtreecommitdiff
path: root/src/t_string.c
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2011-11-14 10:15:13 +0100
committerantirez <antirez@gmail.com>2011-11-14 10:15:13 +0100
commit5244d6e54ec08666f953124739a498d0537a2bf9 (patch)
tree4e4f079881840b8e15bd31930fba9e5df08fad77 /src/t_string.c
parent5574b53eae1743cca9eed5a9dd25bf418c974701 (diff)
downloadredis-5244d6e54ec08666f953124739a498d0537a2bf9.tar.gz
rewrite INCRBYFLOAT as SETs for AOF/replication
Diffstat (limited to 'src/t_string.c')
-rw-r--r--src/t_string.c10
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) {