From: antirez Date: Mon, 22 Mar 2010 16:29:20 +0000 (+0100) Subject: Merge branch 'issue_193' of git://github.com/gnrfan/redis X-Git-Url: https://git.saurik.com/redis.git/commitdiff_plain/7bf90179a32eeb7754c1a3244f6612ce780e7de4?ds=inline;hp=-c Merge branch 'issue_193' of git://github.com/gnrfan/redis --- 7bf90179a32eeb7754c1a3244f6612ce780e7de4 diff --combined redis.c index e0486dc8,72cdd256..e3afa53e --- a/redis.c +++ b/redis.c @@@ -27,7 -27,7 +27,7 @@@ * POSSIBILITY OF SUCH DAMAGE. */ -#define REDIS_VERSION "1.3.6" +#define REDIS_VERSION "1.3.7" #include "fmacros.h" #include "config.h" @@@ -1102,8 -1102,6 +1102,8 @@@ static dictType keylistDictType = dictListDestructor /* val destructor */ }; +static void version(); + /* ========================= Random utility functions ======================= */ /* Redis generally does not try to recover from out of memory conditions @@@ -1616,12 -1614,15 +1616,15 @@@ static void loadServerConfig(char *file char buf[REDIS_CONFIGLINE_MAX+1], *err = NULL; int linenum = 0; sds line = NULL; + char *errormsg = "Fatal error, can't open config file '%s'"; + char *errorbuf = zmalloc(sizeof(char)*(strlen(errormsg)+strlen(filename))); + sprintf(errorbuf, errormsg, filename); if (filename[0] == '-' && filename[1] == '\0') fp = stdin; else { if ((fp = fopen(filename,"r")) == NULL) { - redisLog(REDIS_WARNING,"Fatal error, can't open config file"); + redisLog(REDIS_WARNING, errorbuf); exit(1); } } @@@ -1703,8 -1704,6 +1706,8 @@@ if (server.dbnum < 1) { err = "Invalid number of databases"; goto loaderr; } + } else if (!strcasecmp(argv[0],"include") && argc == 2) { + loadServerConfig(argv[1]); } else if (!strcasecmp(argv[0],"maxclients") && argc == 2) { server.maxclients = atoi(argv[1]); } else if (!strcasecmp(argv[0],"maxmemory") && argc == 2) { @@@ -6488,6 -6487,9 +6491,6 @@@ static sds genRedisInfoString(void) int j; char hmem[64]; - server.hash_max_zipmap_entries = REDIS_HASH_MAX_ZIPMAP_ENTRIES; - server.hash_max_zipmap_value = REDIS_HASH_MAX_ZIPMAP_VALUE; - bytesToHuman(hmem,zmalloc_used_memory()); info = sdscatprintf(sdsempty(), "redis_version:%s\r\n" @@@ -8319,38 -8321,6 +8322,38 @@@ static double computeObjectSwappability if (z) asize += sizeof(zskiplistNode)*dictSize(d); } break; + case REDIS_HASH: + if (o->encoding == REDIS_ENCODING_ZIPMAP) { + unsigned char *p = zipmapRewind((unsigned char*)o->ptr); + unsigned int len = zipmapLen((unsigned char*)o->ptr); + unsigned int klen, vlen; + unsigned char *key, *val; + + if ((p = zipmapNext(p,&key,&klen,&val,&vlen)) == NULL) { + klen = 0; + vlen = 0; + } + asize = len*(klen+vlen+3); + } else if (o->encoding == REDIS_ENCODING_HT) { + d = o->ptr; + asize = sizeof(dict)+(sizeof(struct dictEntry*)*dictSlots(d)); + if (dictSize(d)) { + long elesize; + robj *ele; + + de = dictGetRandomKey(d); + ele = dictGetEntryKey(de); + elesize = (ele->encoding == REDIS_ENCODING_RAW) ? + (sizeof(*o)+sdslen(ele->ptr)) : + sizeof(*o); + ele = dictGetEntryVal(de); + elesize = (ele->encoding == REDIS_ENCODING_RAW) ? + (sizeof(*o)+sdslen(ele->ptr)) : + sizeof(*o); + asize += (sizeof(struct dictEntry)+elesize)*dictSize(d); + } + } + break; } return (double)age*log(1+asize); } @@@ -8753,18 -8723,13 +8756,18 @@@ static void *IOThreadEntryPoint(void *a static void spawnIOThread(void) { pthread_t thread; sigset_t mask, omask; + int err; sigemptyset(&mask); sigaddset(&mask,SIGCHLD); sigaddset(&mask,SIGHUP); sigaddset(&mask,SIGPIPE); pthread_sigmask(SIG_SETMASK, &mask, &omask); - pthread_create(&thread,&server.io_threads_attr,IOThreadEntryPoint,NULL); + while ((err = pthread_create(&thread,&server.io_threads_attr,IOThreadEntryPoint,NULL)) != 0) { + redisLog(REDIS_WARNING,"Unable to spawn an I/O thread: %s", + strerror(err)); + usleep(1000000); + } pthread_sigmask(SIG_SETMASK, &omask, NULL); server.io_active_threads++; } @@@ -9160,19 -9125,11 +9163,19 @@@ static void daemonize(void) } } +static void version() { + printf("Redis server version %s\n", REDIS_VERSION); + exit(0); +} + int main(int argc, char **argv) { time_t start; initServerConfig(); if (argc == 2) { + if ((strcmp(argv[1], "-v") == 0) || (strcmp(argv[1], "--version") == 0)) { + version(); + } resetServerSaveParams(); loadServerConfig(argv[1]); } else if (argc > 2) {