Skip to content
Browse files

Bug #169 fixed (BLOP/BRPOP interrupted connections are not cleared fr…

…om the queue)
  • Loading branch information...
1 parent 9ebed7c commit 5921aa36ede343d728cb53cc7dda87defc966c2f @antirez committed Feb 27, 2010
Showing with 29 additions and 10 deletions.
  1. +21 −0 Changelog
  2. +1 −0 TODO
  3. +3 −10 redis.c
  4. +4 −0 redis.conf
21 Changelog
@@ -1,3 +1,24 @@
+2010-02-22 Fixed 32bit make target to work on Linux out of the box
+2010-02-19 A problem with replication with multiple slaves connectiong to a single master fixed. It was due to a typo, and reported on github by the user micmac. Also the copyright year fixed from many files.
+2010-02-10 Saner VM defaults for redis.conf
+2010-02-09 VM now is able to block clients on swapped keys for all the commands
+2010-02-07 ZCOUNT and ZRANGEBYSCORE new tests
+2010-02-07 ZRANGEBYSCORE now supports open intervals, prefixing double values with a open paren. Added ZCOUNT that can count the elements inside an interval of scores, this supports open intervals too
+2010-02-07 WITHSCORES in ZRANGEBYSCORE thanks to Sam Hendley
+2010-02-06 Added "withscores" option to zrangebyscore command. Based on withscores support in zrange function, ugliest part was the argument parsing to handle using it with the limit option.
+2010-02-06 DEBUG OBJECT provide info about serialized object length even when VM is disabled
+2010-02-06 multi bulk requests in redis-benchmark, default fsync policy changed to everysec, added a prefix character for DEBUG logs
+2010-02-04 APPEND tests
+2010-02-04 APPEND command
+2010-02-02 Faster version of the function hashing possibly encoded objects, leading to a general speed gain when working with Sets of integers
+2010-02-02 faster Set loading time from .rdb file resizing the hash table to the right size before loading elements
+2010-02-02 Log time taken to load the DB at startup, in seconds
+2010-01-31 Fixed VM corruption due to child fclosing the VM file directly or indirectly calling exit(), now replaced with _exit() in all the sensible places. Masked a few signals from IO threads.
+2010-01-28 loading side of the threaded VM
+2010-01-26 TODO cahnges
+2010-01-23 Fixed memory human style memory reporting, removed server.usedmemory, now zmalloc_used_memory() is used always.
+2010-01-22 VM tuning thanks to redis-stat vmstat. Now it performs much better under high load
+2010-01-21 Changelog updated
2010-01-21 REDIS_MAX_COMPLETED_JOBS_PROCESSED is now in percentage, not number of jobs. Moved a debugging message a few lines forward as it was called where a few logged parameters where invalid, leading to a crash
2010-01-20 fixed a deadlock caused by too much finished processes in queue so that I/O clients writing to the wirte side of the pipe used to awake the main thread where blocking. Then a BGSAVE started waiting for the last active thread to finish, condition impossible because all the I/O threads where blocking on threads. Takes this as a note to myself...
2010-01-20 ae.c event loop does no longer support exception notifications, as they are fully pointless. Also a theoretical bug that never happens in practice fixed.
@@ -62,6 +62,7 @@ SMALL ONES:
* MSADD (n keys) (n values). See this thread in the Redis google group:
* Don't save empty lists / sets / zsets on disk with snapshotting.
* Remove keys when a list / set / zset reaches length of 0.
+* An option to exec a command slave-side if the master connection is lost: even cooler: if the script returns "0" the slave elects itself as master, otherwise continue trying to reconnect.
THE "MAYBE" TODO LIST: things that may or may not get implemented
13 redis.c
@@ -2334,7 +2334,8 @@ static void readQueryFromClient(aeEventLoop *el, int fd, void *privdata, int mas
} else {
- processInputBuffer(c);
+ if (!(c->flags & REDIS_BLOCKED))
+ processInputBuffer(c);
static int selectDb(redisClient *c, int id) {
@@ -6138,7 +6139,6 @@ static void blockForKeys(redisClient *c, robj **keys, int numkeys, time_t timeou
/* Mark the client as a blocked client */
c->flags |= REDIS_BLOCKED;
- aeDeleteFileEvent(server.el,c->fd,AE_READABLE);
@@ -6166,14 +6166,7 @@ static void unblockClientWaitingData(redisClient *c) {
c->blockingkeys = NULL;
c->flags &= (~REDIS_BLOCKED);
- /* Ok now we are ready to get read events from socket, note that we
- * can't trap errors here as it's possible that unblockClientWaitingDatas() is
- * called from freeClient() itself, and the only thing we can do
- * if we failed to register the READABLE event is to kill the client.
- * Still the following function should never fail in the real world as
- * we are sure the file descriptor is sane, and we exit on out of mem. */
- aeCreateFileEvent(server.el, c->fd, AE_READABLE, readQueryFromClient, c);
- /* As a final step we want to process data if there is some command waiting
+ /* We want to process data if there is some command waiting
* in the input buffer. Note that this is safe even if
* unblockClientWaitingData() gets called from freeClient() because
* freeClient() will be smart enough to call this function
4 redis.conf
@@ -197,6 +197,10 @@ vm-enabled no
# Useless to say, the best kind of disk for a Redis swap file (that's accessed
# at random) is a Solid State Disk (SSD).
+# *** WARNING *** if you are using a shared hosting the default of putting
+# the swap file under /tmp is not secure. Create a dir with access granted
+# only to Redis user and configure Redis to create the swap file there.
vm-swap-file /tmp/redis-%p.vm
# vm-max-memory configures the VM to use at max the specified amount of

0 comments on commit 5921aa3

Please sign in to comment.
Something went wrong with that request. Please try again.