diff --git a/TODO b/TODO index e37e50f2..37dbeed4 100644 --- a/TODO +++ b/TODO @@ -1,13 +1,14 @@ BEFORE REDIS 1.0.0-rc1 + * SPOP man page * Add number of keys for every DB in INFO - * Resize the expires and Sets hash tables if needed as well? For Sets the right moment to check for this is probably in SREM * check 'server.dirty' everywere. Make it proprotional to the number of objects modified. * Cover most of the source code with test-redis.tcl * Remove tmp-.... files when saving child exits in the wrong way, to do so use tmp-pid.rdb as filename so that the parent can rebuild the file name just from the child pid. AFTER 1.0 stable release + * Max command payload bytes configurable, with a pretty large default. * Consistent hashing implemented in all the client libraries having an user base * SORT: Don't copy the list into a vector when BY argument is constant. * SORT ... STORE keyname. Instead to return the SORTed data set it into key. diff --git a/redis.c b/redis.c index fa653d21..ac982696 100644 --- a/redis.c +++ b/redis.c @@ -82,6 +82,7 @@ #define REDIS_MAX_SYNC_TIME 60 /* Slave can't take more to sync */ #define REDIS_EXPIRELOOKUPS_PER_CRON 100 /* try to expire 100 keys/second */ #define REDIS_MAX_WRITE_PER_EVENT (1024*64) +#define REDIS_REQUEST_MAX_SIZE (1024*1024) /* max bytes in inline command */ /* Hash table parameters */ #define REDIS_HT_MINFILL 10 /* Minimal hash table fill 10% */ @@ -763,7 +764,6 @@ static int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientD /* Check if a background saving in progress terminated */ if (server.bgsaveinprogress) { int statloc; - /* XXX: TODO handle the case of the saving child killed */ if (wait4(-1,&statloc,WNOHANG,NULL)) { int exitcode = WEXITSTATUS(statloc); int bysignal = WIFSIGNALED(statloc); @@ -1437,6 +1437,7 @@ again: /* Read the first line of the query */ char *p = strchr(c->querybuf,'\n'); size_t querylen; + if (p) { sds query, *argv; int argc, j; @@ -1480,7 +1481,7 @@ again: * on the query buffer try to process the next command. */ if (processCommand(c) && sdslen(c->querybuf)) goto again; return; - } else if (sdslen(c->querybuf) >= 1024*32) { + } else if (sdslen(c->querybuf) >= REDIS_REQUEST_MAX_SIZE) { redisLog(REDIS_DEBUG, "Client protocol error"); freeClient(c); return;