mirror of
https://github.com/fluencelabs/redis
synced 2025-04-07 01:51:05 +00:00
less CPU usage in command parsing, case insensitive config directives
This commit is contained in:
parent
02fdd5ab4c
commit
bb0b03a3d7
43
redis.c
43
redis.c
@ -926,44 +926,44 @@ static void loadServerConfig(char *filename) {
|
|||||||
sdstolower(argv[0]);
|
sdstolower(argv[0]);
|
||||||
|
|
||||||
/* Execute config directives */
|
/* Execute config directives */
|
||||||
if (!strcmp(argv[0],"timeout") && argc == 2) {
|
if (!strcasecmp(argv[0],"timeout") && argc == 2) {
|
||||||
server.maxidletime = atoi(argv[1]);
|
server.maxidletime = atoi(argv[1]);
|
||||||
if (server.maxidletime < 1) {
|
if (server.maxidletime < 1) {
|
||||||
err = "Invalid timeout value"; goto loaderr;
|
err = "Invalid timeout value"; goto loaderr;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(argv[0],"port") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"port") && argc == 2) {
|
||||||
server.port = atoi(argv[1]);
|
server.port = atoi(argv[1]);
|
||||||
if (server.port < 1 || server.port > 65535) {
|
if (server.port < 1 || server.port > 65535) {
|
||||||
err = "Invalid port"; goto loaderr;
|
err = "Invalid port"; goto loaderr;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(argv[0],"bind") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"bind") && argc == 2) {
|
||||||
server.bindaddr = zstrdup(argv[1]);
|
server.bindaddr = zstrdup(argv[1]);
|
||||||
} else if (!strcmp(argv[0],"save") && argc == 3) {
|
} else if (!strcasecmp(argv[0],"save") && argc == 3) {
|
||||||
int seconds = atoi(argv[1]);
|
int seconds = atoi(argv[1]);
|
||||||
int changes = atoi(argv[2]);
|
int changes = atoi(argv[2]);
|
||||||
if (seconds < 1 || changes < 0) {
|
if (seconds < 1 || changes < 0) {
|
||||||
err = "Invalid save parameters"; goto loaderr;
|
err = "Invalid save parameters"; goto loaderr;
|
||||||
}
|
}
|
||||||
appendServerSaveParams(seconds,changes);
|
appendServerSaveParams(seconds,changes);
|
||||||
} else if (!strcmp(argv[0],"dir") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"dir") && argc == 2) {
|
||||||
if (chdir(argv[1]) == -1) {
|
if (chdir(argv[1]) == -1) {
|
||||||
redisLog(REDIS_WARNING,"Can't chdir to '%s': %s",
|
redisLog(REDIS_WARNING,"Can't chdir to '%s': %s",
|
||||||
argv[1], strerror(errno));
|
argv[1], strerror(errno));
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
} else if (!strcmp(argv[0],"loglevel") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"loglevel") && argc == 2) {
|
||||||
if (!strcmp(argv[1],"debug")) server.verbosity = REDIS_DEBUG;
|
if (!strcasecmp(argv[1],"debug")) server.verbosity = REDIS_DEBUG;
|
||||||
else if (!strcmp(argv[1],"notice")) server.verbosity = REDIS_NOTICE;
|
else if (!strcasecmp(argv[1],"notice")) server.verbosity = REDIS_NOTICE;
|
||||||
else if (!strcmp(argv[1],"warning")) server.verbosity = REDIS_WARNING;
|
else if (!strcasecmp(argv[1],"warning")) server.verbosity = REDIS_WARNING;
|
||||||
else {
|
else {
|
||||||
err = "Invalid log level. Must be one of debug, notice, warning";
|
err = "Invalid log level. Must be one of debug, notice, warning";
|
||||||
goto loaderr;
|
goto loaderr;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(argv[0],"logfile") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"logfile") && argc == 2) {
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
server.logfile = zstrdup(argv[1]);
|
server.logfile = zstrdup(argv[1]);
|
||||||
if (!strcmp(server.logfile,"stdout")) {
|
if (!strcasecmp(server.logfile,"stdout")) {
|
||||||
zfree(server.logfile);
|
zfree(server.logfile);
|
||||||
server.logfile = NULL;
|
server.logfile = NULL;
|
||||||
}
|
}
|
||||||
@ -978,32 +978,32 @@ static void loadServerConfig(char *filename) {
|
|||||||
}
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
} else if (!strcmp(argv[0],"databases") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"databases") && argc == 2) {
|
||||||
server.dbnum = atoi(argv[1]);
|
server.dbnum = atoi(argv[1]);
|
||||||
if (server.dbnum < 1) {
|
if (server.dbnum < 1) {
|
||||||
err = "Invalid number of databases"; goto loaderr;
|
err = "Invalid number of databases"; goto loaderr;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(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]);
|
||||||
server.replstate = REDIS_REPL_CONNECT;
|
server.replstate = REDIS_REPL_CONNECT;
|
||||||
} else if (!strcmp(argv[0],"glueoutputbuf") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"glueoutputbuf") && argc == 2) {
|
||||||
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 (!strcmp(argv[0],"shareobjects") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"shareobjects") && argc == 2) {
|
||||||
if ((server.shareobjects = yesnotoi(argv[1])) == -1) {
|
if ((server.shareobjects = yesnotoi(argv[1])) == -1) {
|
||||||
err = "argument must be 'yes' or 'no'"; goto loaderr;
|
err = "argument must be 'yes' or 'no'"; goto loaderr;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(argv[0],"daemonize") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"daemonize") && argc == 2) {
|
||||||
if ((server.daemonize = yesnotoi(argv[1])) == -1) {
|
if ((server.daemonize = yesnotoi(argv[1])) == -1) {
|
||||||
err = "argument must be 'yes' or 'no'"; goto loaderr;
|
err = "argument must be 'yes' or 'no'"; goto loaderr;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(argv[0],"requirepass") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"requirepass") && argc == 2) {
|
||||||
server.requirepass = zstrdup(argv[1]);
|
server.requirepass = zstrdup(argv[1]);
|
||||||
} else if (!strcmp(argv[0],"pidfile") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"pidfile") && argc == 2) {
|
||||||
server.pidfile = zstrdup(argv[1]);
|
server.pidfile = zstrdup(argv[1]);
|
||||||
} else if (!strcmp(argv[0],"dbfilename") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"dbfilename") && argc == 2) {
|
||||||
server.dbfilename = zstrdup(argv[1]);
|
server.dbfilename = zstrdup(argv[1]);
|
||||||
} else {
|
} else {
|
||||||
err = "Bad directive or wrong number of arguments"; goto loaderr;
|
err = "Bad directive or wrong number of arguments"; goto loaderr;
|
||||||
@ -1140,7 +1140,7 @@ static void sendReplyToClient(aeEventLoop *el, int fd, void *privdata, int mask)
|
|||||||
static struct redisCommand *lookupCommand(char *name) {
|
static struct redisCommand *lookupCommand(char *name) {
|
||||||
int j = 0;
|
int j = 0;
|
||||||
while(cmdTable[j].name != NULL) {
|
while(cmdTable[j].name != NULL) {
|
||||||
if (!strcmp(name,cmdTable[j].name)) return &cmdTable[j];
|
if (!strcasecmp(name,cmdTable[j].name)) return &cmdTable[j];
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1164,10 +1164,9 @@ static int processCommand(redisClient *c) {
|
|||||||
struct redisCommand *cmd;
|
struct redisCommand *cmd;
|
||||||
long long dirty;
|
long long dirty;
|
||||||
|
|
||||||
sdstolower(c->argv[0]->ptr);
|
|
||||||
/* The QUIT command is handled as a special case. Normal command
|
/* The QUIT command is handled as a special case. Normal command
|
||||||
* procs are unable to close the client connection safely */
|
* procs are unable to close the client connection safely */
|
||||||
if (!strcmp(c->argv[0]->ptr,"quit")) {
|
if (!strcasecmp(c->argv[0]->ptr,"quit")) {
|
||||||
freeClient(c);
|
freeClient(c);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user