]> git.saurik.com Git - redis.git/commitdiff
Merge branch 'issue_191' of git://github.com/gnrfan/redis
authorantirez <antirez@gmail.com>
Mon, 22 Mar 2010 16:29:09 +0000 (17:29 +0100)
committerantirez <antirez@gmail.com>
Mon, 22 Mar 2010 16:29:09 +0000 (17:29 +0100)
1  2 
redis.c

diff --combined redis.c
index 1d70dbe6aa67b02f1e272373a3c3a43c49861ef0,ce4c50b693f187413179bd18fbe7f5208dddceb0..e0486dc85a6eaf0a125467ccbf0099de9d654e60
+++ 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,6 -1102,8 +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
@@@ -1701,8 -1703,6 +1703,8 @@@ static void loadServerConfig(char *file
              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) {
@@@ -6486,6 -6486,9 +6488,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"
@@@ -8317,38 -8320,6 +8319,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);
  }
@@@ -8751,18 -8722,13 +8753,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++;
  }
@@@ -9158,11 -9124,19 +9160,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) {