mirror of
https://github.com/fluencelabs/redis
synced 2025-03-19 09:00:51 +00:00
Now in redis.conf it is possible to specify units where appropriate instead of amounts of bytes, like 2Gi or 4M and so forth
This commit is contained in:
parent
dc4be23ec8
commit
2b61932933
67
redis.c
67
redis.c
@ -379,7 +379,6 @@ struct redisServer {
|
|||||||
char *dbfilename;
|
char *dbfilename;
|
||||||
char *appendfilename;
|
char *appendfilename;
|
||||||
char *requirepass;
|
char *requirepass;
|
||||||
int shareobjects;
|
|
||||||
int rdbcompression;
|
int rdbcompression;
|
||||||
int activerehashing;
|
int activerehashing;
|
||||||
/* Replication related */
|
/* Replication related */
|
||||||
@ -970,6 +969,53 @@ static int stringmatch(const char *pattern, const char *string, int nocase) {
|
|||||||
return stringmatchlen(pattern,strlen(pattern),string,strlen(string),nocase);
|
return stringmatchlen(pattern,strlen(pattern),string,strlen(string),nocase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Convert a string representing an amount of memory into the number of
|
||||||
|
* bytes, so for instance memtoll("1Gi") will return 1073741824 that is
|
||||||
|
* (1024*1024*1024).
|
||||||
|
*
|
||||||
|
* On parsing error, if *err is not NULL, it's set to 1, otherwise it's
|
||||||
|
* set to 0 */
|
||||||
|
static long long memtoll(const char *p, int *err) {
|
||||||
|
const char *u;
|
||||||
|
char buf[128];
|
||||||
|
long mul; /* unit multiplier */
|
||||||
|
long long val;
|
||||||
|
unsigned int digits;
|
||||||
|
|
||||||
|
if (err) *err = 0;
|
||||||
|
/* Search the first non digit character. */
|
||||||
|
u = p;
|
||||||
|
if (*u == '-') u++;
|
||||||
|
while(*u && isdigit(*u)) u++;
|
||||||
|
if (*u == '\0' || !strcasecmp(u,"b")) {
|
||||||
|
mul = 1;
|
||||||
|
} else if (!strcasecmp(u,"k") || !strcasecmp(u,"kb")) {
|
||||||
|
mul = 1000;
|
||||||
|
} else if (!strcasecmp(u,"ki") || !strcasecmp(u,"kib")) {
|
||||||
|
mul = 1024;
|
||||||
|
} else if (!strcasecmp(u,"m") || !strcasecmp(u,"mb")) {
|
||||||
|
mul = 1000*1000;
|
||||||
|
} else if (!strcasecmp(u,"mi") || !strcasecmp(u,"mib")) {
|
||||||
|
mul = 1024*1024;
|
||||||
|
} else if (!strcasecmp(u,"g") || !strcasecmp(u,"hb")) {
|
||||||
|
mul = 1000L*1000*1000;
|
||||||
|
} else if (!strcasecmp(u,"gi") || !strcasecmp(u,"gib")) {
|
||||||
|
mul = 1024L*1024*1024;
|
||||||
|
} else {
|
||||||
|
if (err) *err = 1;
|
||||||
|
mul = 1;
|
||||||
|
}
|
||||||
|
digits = u-p;
|
||||||
|
if (digits >= sizeof(buf)) {
|
||||||
|
if (err) *err = 1;
|
||||||
|
return LLONG_MAX;
|
||||||
|
}
|
||||||
|
memcpy(buf,p,digits);
|
||||||
|
buf[digits] = '\0';
|
||||||
|
val = strtoll(buf,NULL,10);
|
||||||
|
return val*mul;
|
||||||
|
}
|
||||||
|
|
||||||
static void redisLog(int level, const char *fmt, ...) {
|
static void redisLog(int level, const char *fmt, ...) {
|
||||||
va_list ap;
|
va_list ap;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
@ -1585,7 +1631,6 @@ static void initServerConfig() {
|
|||||||
server.dbfilename = zstrdup("dump.rdb");
|
server.dbfilename = zstrdup("dump.rdb");
|
||||||
server.appendfilename = zstrdup("appendonly.aof");
|
server.appendfilename = zstrdup("appendonly.aof");
|
||||||
server.requirepass = NULL;
|
server.requirepass = NULL;
|
||||||
server.shareobjects = 0;
|
|
||||||
server.rdbcompression = 1;
|
server.rdbcompression = 1;
|
||||||
server.activerehashing = 1;
|
server.activerehashing = 1;
|
||||||
server.maxclients = 0;
|
server.maxclients = 0;
|
||||||
@ -1802,7 +1847,7 @@ static void loadServerConfig(char *filename) {
|
|||||||
} else if (!strcasecmp(argv[0],"maxclients") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"maxclients") && argc == 2) {
|
||||||
server.maxclients = atoi(argv[1]);
|
server.maxclients = atoi(argv[1]);
|
||||||
} else if (!strcasecmp(argv[0],"maxmemory") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"maxmemory") && argc == 2) {
|
||||||
server.maxmemory = strtoll(argv[1], NULL, 10);
|
server.maxmemory = memtoll(argv[1],NULL);
|
||||||
} else if (!strcasecmp(argv[0],"slaveof") && argc == 3) {
|
} else if (!strcasecmp(argv[0],"slaveof") && argc == 3) {
|
||||||
server.masterhost = sdsnew(argv[1]);
|
server.masterhost = sdsnew(argv[1]);
|
||||||
server.masterport = atoi(argv[2]);
|
server.masterport = atoi(argv[2]);
|
||||||
@ -1813,10 +1858,6 @@ static void loadServerConfig(char *filename) {
|
|||||||
if ((server.glueoutputbuf = yesnotoi(argv[1])) == -1) {
|
if ((server.glueoutputbuf = yesnotoi(argv[1])) == -1) {
|
||||||
err = "argument must be 'yes' or 'no'"; goto loaderr;
|
err = "argument must be 'yes' or 'no'"; goto loaderr;
|
||||||
}
|
}
|
||||||
} else if (!strcasecmp(argv[0],"shareobjects") && argc == 2) {
|
|
||||||
if ((server.shareobjects = yesnotoi(argv[1])) == -1) {
|
|
||||||
err = "argument must be 'yes' or 'no'"; goto loaderr;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(argv[0],"rdbcompression") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"rdbcompression") && argc == 2) {
|
||||||
if ((server.rdbcompression = yesnotoi(argv[1])) == -1) {
|
if ((server.rdbcompression = yesnotoi(argv[1])) == -1) {
|
||||||
err = "argument must be 'yes' or 'no'"; goto loaderr;
|
err = "argument must be 'yes' or 'no'"; goto loaderr;
|
||||||
@ -1860,19 +1901,17 @@ static void loadServerConfig(char *filename) {
|
|||||||
zfree(server.vm_swap_file);
|
zfree(server.vm_swap_file);
|
||||||
server.vm_swap_file = zstrdup(argv[1]);
|
server.vm_swap_file = zstrdup(argv[1]);
|
||||||
} else if (!strcasecmp(argv[0],"vm-max-memory") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"vm-max-memory") && argc == 2) {
|
||||||
server.vm_max_memory = strtoll(argv[1], NULL, 10);
|
server.vm_max_memory = memtoll(argv[1],NULL);
|
||||||
} else if (!strcasecmp(argv[0],"vm-page-size") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"vm-page-size") && argc == 2) {
|
||||||
server.vm_page_size = strtoll(argv[1], NULL, 10);
|
server.vm_page_size = memtoll(argv[1], NULL);
|
||||||
} else if (!strcasecmp(argv[0],"vm-pages") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"vm-pages") && argc == 2) {
|
||||||
server.vm_pages = strtoll(argv[1], NULL, 10);
|
server.vm_pages = memtoll(argv[1], NULL);
|
||||||
} else if (!strcasecmp(argv[0],"vm-max-threads") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"vm-max-threads") && argc == 2) {
|
||||||
server.vm_max_threads = strtoll(argv[1], NULL, 10);
|
server.vm_max_threads = strtoll(argv[1], NULL, 10);
|
||||||
} else if (!strcasecmp(argv[0],"hash-max-zipmap-entries") && argc == 2){
|
} else if (!strcasecmp(argv[0],"hash-max-zipmap-entries") && argc == 2){
|
||||||
server.hash_max_zipmap_entries = strtol(argv[1], NULL, 10);
|
server.hash_max_zipmap_entries = memtoll(argv[1], NULL);
|
||||||
} else if (!strcasecmp(argv[0],"hash-max-zipmap-value") && argc == 2){
|
} else if (!strcasecmp(argv[0],"hash-max-zipmap-value") && argc == 2){
|
||||||
server.hash_max_zipmap_value = strtol(argv[1], NULL, 10);
|
server.hash_max_zipmap_value = memtoll(argv[1], NULL);
|
||||||
} else if (!strcasecmp(argv[0],"vm-max-threads") && argc == 2) {
|
|
||||||
server.vm_max_threads = strtoll(argv[1], NULL, 10);
|
|
||||||
} else {
|
} else {
|
||||||
err = "Bad directive or wrong number of arguments"; goto loaderr;
|
err = "Bad directive or wrong number of arguments"; goto loaderr;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user