X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/05e06e154332cf107d30092dddb94b6b35967ce5..813ed29248b236b4a20cfac4e66a30e6c0390deb:/src/config.c diff --git a/src/config.c b/src/config.c index a36eb9a3..4974d5ee 100644 --- a/src/config.c +++ b/src/config.c @@ -1,3 +1,34 @@ +/* Configuration file parsing and CONFIG GET/SET commands implementation. + * + * Copyright (c) 2009-2012, Salvatore Sanfilippo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Redis nor the names of its contributors may be used + * to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + + #include "redis.h" /*----------------------------------------------------------------------------- @@ -225,6 +256,18 @@ void loadServerConfigFromString(char *config) { if ((server.daemonize = yesnotoi(argv[1])) == -1) { err = "argument must be 'yes' or 'no'"; goto loaderr; } + } else if (!strcasecmp(argv[0],"keyarchive") && argc == 2) { + int yes; + + if ((yes = yesnotoi(argv[1])) == -1) { + err = "argument must be 'yes' or 'no'"; goto loaderr; + } + server.mdb_state = yes ? REDIS_MDB_ON : REDIS_MDB_OFF; + } else if (!strcasecmp(argv[0],"mdb-environment") && argc == 2) { + zfree(server.mdb_environment); + server.mdb_environment = zstrdup(argv[1]); + } else if (!strcasecmp(argv[0],"mdb-mapsize") && argc == 2) { + server.mdb_mapsize = memtoll(argv[1], NULL); } else if (!strcasecmp(argv[0],"appendonly") && argc == 2) { int yes; @@ -468,6 +511,19 @@ void configSetCommand(redisClient *c) { if (getLongLongFromObject(o,&ll) == REDIS_ERR || ll < 0 || ll > LONG_MAX) goto badfmt; server.maxidletime = ll; + } else if (!strcasecmp(c->argv[2]->ptr,"keyarchive")) { + int enable = yesnotoi(o->ptr); + + if (enable == -1) goto badfmt; + if (enable == 0 && server.mdb_state != REDIS_MDB_OFF) { + stopKeyArchive(); + } else if (enable && server.mdb_state == REDIS_MDB_OFF) { + if (startKeyArchive() != 0) { + addReplyError(c, + "Unable to turn on MDB. Check server logs."); + return; + } + } } else if (!strcasecmp(c->argv[2]->ptr,"appendfsync")) { if (!strcasecmp(o->ptr,"no")) { server.aof_fsync = AOF_FSYNC_NO;