From aacecbc997b9678ba59eb9ef487e5cf19078a055 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A3=8A?= Date: Sun, 11 Feb 2018 21:02:07 +0800 Subject: [PATCH 1/6] Remove updateLFU() in dbOverwrite(). --- src/db.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/db.c b/src/db.c index 203b2984..5d540d21 100644 --- a/src/db.c +++ b/src/db.c @@ -187,9 +187,6 @@ void dbOverwrite(redisDb *db, robj *key, robj *val) { int saved_lru = old->lru; dictReplace(db->dict, key->ptr, val); val->lru = saved_lru; - /* LFU should be not only copied but also updated - * when a key is overwritten. */ - updateLFU(val); } else { dictReplace(db->dict, key->ptr, val); } @@ -1340,7 +1337,7 @@ int *georadiusGetKeys(struct redisCommand *cmd, robj **argv, int argc, int *numk for (i = 5; i < argc; i++) { char *arg = argv[i]->ptr; /* For the case when user specifies both "store" and "storedist" options, the - * second key specified would override the first key. This behavior is kept + * second key specified would override the first key. This behavior is kept * the same as in georadiusCommand method. */ if ((!strcasecmp(arg, "store") || !strcasecmp(arg, "storedist")) && ((i+1) < argc)) { @@ -1361,7 +1358,7 @@ int *georadiusGetKeys(struct redisCommand *cmd, robj **argv, int argc, int *numk if(num > 1) { keys[1] = stored_key; } - *numkeys = num; + *numkeys = num; return keys; } From d4e6d1086fd9004a23b957aba048df41d6afac14 Mon Sep 17 00:00:00 2001 From: gechunlin Date: Thu, 22 Feb 2018 20:57:54 -0600 Subject: [PATCH 2/6] Update object.c --- src/object.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/object.c b/src/object.c index 395ec84d..870bb405 100644 --- a/src/object.c +++ b/src/object.c @@ -111,7 +111,7 @@ robj *createEmbeddedStringObject(const char *ptr, size_t len) { * OBJ_ENCODING_EMBSTR_SIZE_LIMIT, otherwise the RAW encoding is * used. * - * The current limit of 39 is chosen so that the biggest string object + * The current limit of 44 is chosen so that the biggest string object * we allocate as EMBSTR will still fit into the 64 byte arena of jemalloc. */ #define OBJ_ENCODING_EMBSTR_SIZE_LIMIT 44 robj *createStringObject(const char *ptr, size_t len) { From da7f5700cf1a1680accf563622debb82e5f9ef26 Mon Sep 17 00:00:00 2001 From: charsyam Date: Thu, 1 Mar 2018 22:30:39 +0900 Subject: [PATCH 3/6] refactoring-call-aeDeleteFileEvent-twice-in-freeClusterLink --- src/cluster.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cluster.c b/src/cluster.c index ee5b6766..97e72f31 100644 --- a/src/cluster.c +++ b/src/cluster.c @@ -581,8 +581,7 @@ clusterLink *createClusterLink(clusterNode *node) { * with this link will have the 'link' field set to NULL. */ void freeClusterLink(clusterLink *link) { if (link->fd != -1) { - aeDeleteFileEvent(server.el, link->fd, AE_WRITABLE); - aeDeleteFileEvent(server.el, link->fd, AE_READABLE); + aeDeleteFileEvent(server.el, link->fd, AE_READABLE|AE_WRITABLE); } sdsfree(link->sndbuf); sdsfree(link->rcvbuf); From 11baa8487c9cd0a1f39e13f0b1808cae1cc6757f Mon Sep 17 00:00:00 2001 From: "zhaozhao.zz" Date: Wed, 21 Mar 2018 15:13:51 +0800 Subject: [PATCH 4/6] anet: avoid double close --- src/anet.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/anet.c b/src/anet.c index e9530398..a4d0fd1a 100644 --- a/src/anet.c +++ b/src/anet.c @@ -484,7 +484,7 @@ static int _anetTcpServer(char *err, int port, char *bindaddr, int af, int backl if (af == AF_INET6 && anetV6Only(err,s) == ANET_ERR) goto error; if (anetSetReuseAddr(err,s) == ANET_ERR) goto error; - if (anetListen(err,s,p->ai_addr,p->ai_addrlen,backlog) == ANET_ERR) goto error; + if (anetListen(err,s,p->ai_addr,p->ai_addrlen,backlog) == ANET_ERR) return ANET_ERR; goto end; } if (p == NULL) { From 46f767aa19f2915cda124575958ea650ec28a12f Mon Sep 17 00:00:00 2001 From: "zhaozhao.zz" Date: Wed, 21 Mar 2018 15:34:13 +0800 Subject: [PATCH 5/6] fix missed call on freeaddrinfo --- src/anet.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/anet.c b/src/anet.c index a4d0fd1a..2981fca1 100644 --- a/src/anet.c +++ b/src/anet.c @@ -484,7 +484,7 @@ static int _anetTcpServer(char *err, int port, char *bindaddr, int af, int backl if (af == AF_INET6 && anetV6Only(err,s) == ANET_ERR) goto error; if (anetSetReuseAddr(err,s) == ANET_ERR) goto error; - if (anetListen(err,s,p->ai_addr,p->ai_addrlen,backlog) == ANET_ERR) return ANET_ERR; + if (anetListen(err,s,p->ai_addr,p->ai_addrlen,backlog) == ANET_ERR) s = ANET_ERR; goto end; } if (p == NULL) { From fa00e20b165c5e55f437ceddde9f492cafd38143 Mon Sep 17 00:00:00 2001 From: Guy Benoish Date: Thu, 22 Mar 2018 17:22:26 +0700 Subject: [PATCH 6/6] Make blocking list commands send keyspace notifications --- src/blocked.c | 1 + src/t_list.c | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/blocked.c b/src/blocked.c index f438c335..6fb274d4 100644 --- a/src/blocked.c +++ b/src/blocked.c @@ -283,6 +283,7 @@ void handleClientsBlockedOnKeys(void) { if (listTypeLength(o) == 0) { dbDelete(rl->db,rl->key); + notifyKeyspaceEvent(NOTIFY_GENERIC,"del",rl->key,rl->db->id); } /* We don't call signalModifiedKey() as it was already called * when an element was pushed on the list. */ diff --git a/src/t_list.c b/src/t_list.c index c7e6aac0..1414ff31 100644 --- a/src/t_list.c +++ b/src/t_list.c @@ -639,6 +639,10 @@ int serveClientBlockedOnList(client *receiver, robj *key, robj *dstkey, redisDb addReplyMultiBulkLen(receiver,2); addReplyBulk(receiver,key); addReplyBulk(receiver,value); + + /* Notify event. */ + char *event = (where == LIST_HEAD) ? "lpop" : "rpop"; + notifyKeyspaceEvent(NOTIFY_LIST,event,key,receiver->db->id); } else { /* BRPOPLPUSH */ robj *dstobj = @@ -663,6 +667,9 @@ int serveClientBlockedOnList(client *receiver, robj *key, robj *dstkey, redisDb db->id,argv,3, PROPAGATE_AOF| PROPAGATE_REPL); + + /* Notify event ("lpush" was notified by rpoplpushHandlePush). */ + notifyKeyspaceEvent(NOTIFY_LIST,"rpop",key,receiver->db->id); } else { /* BRPOPLPUSH failed because of wrong * destination type. */