diff --git a/Changelog b/Changelog index 23f1f8bdf6ec768b373e02e76e5bc7297ddbff23..d74aee1fdf38e05de51ca2e69ab021f99ad8e2f0 100644 --- 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 --- 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 --- 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 diff --git a/redis.conf b/redis.conf index 1c72bc4aeaf40ad78da06b2bf0176167c391425b..2923a3aa4973aea3f778db2980bd1e5d64d1f260 100644 --- a/redis.conf +++ b/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