]> git.saurik.com Git - redis.git/commitdiff
Bug #169 fixed (BLOP/BRPOP interrupted connections are not cleared from the queue)
authorantirez <antirez@gmail.com>
Sat, 27 Feb 2010 11:26:08 +0000 (12:26 +0100)
committerantirez <antirez@gmail.com>
Sat, 27 Feb 2010 11:26:08 +0000 (12:26 +0100)
Changelog
TODO
redis.c
redis.conf

index 23f1f8bdf6ec768b373e02e76e5bc7297ddbff23..d74aee1fdf38e05de51ca2e69ab021f99ad8e2f0 100644 (file)
--- a/Changelog
+++ b/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.
diff --git a/TODO b/TODO
index 1f52a55638f9482c1752410efd851e0540b2cf49..3bdc2dbf817f251abf843803ed6bca6c895e00fa 100644 (file)
--- a/TODO
+++ b/TODO
@@ -62,6 +62,7 @@ SMALL ONES:
 * MSADD (n keys) (n values). See this thread in the Redis google group: http://groups.google.com/group/redis-db/browse_thread/thread/e766d84eb375cd41
 * 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
 =================================================================
diff --git a/redis.c b/redis.c
index d34b2abe0f3b3ac654383745dab7638cb8a63b78..b7fd3b5b845ff3fecb4ae2073ea2dd6f6706fce8 100644 (file)
--- a/redis.c
+++ b/redis.c
@@ -2334,7 +2334,8 @@ static void readQueryFromClient(aeEventLoop *el, int fd, void *privdata, int mas
     } else {
         return;
     }
-    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);
     server.blpop_blocked_clients++;
 }
 
@@ -6166,14 +6166,7 @@ static void unblockClientWaitingData(redisClient *c) {
     c->blockingkeys = NULL;
     c->flags &= (~REDIS_BLOCKED);
     server.blpop_blocked_clients--;
-    /* 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
index 1c72bc4aeaf40ad78da06b2bf0176167c391425b..2923a3aa4973aea3f778db2980bd1e5d64d1f260 100644 (file)
@@ -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