Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
a34e0a25
Commit
a34e0a25
authored
May 10, 2010
by
antirez
Browse files
CONFIG command now supports hot modification of RDB saving parameters.
parent
89e689c5
Changes
3
Hide whitespace changes
Inline
Side-by-side
redis.c
View file @
a34e0a25
...
@@ -9683,6 +9683,40 @@ static void configSetCommand(redisClient *c) {
...
@@ -9683,6 +9683,40 @@ static void configSetCommand(redisClient *c) {
server.masterauth = zstrdup(o->ptr);
server.masterauth = zstrdup(o->ptr);
} else if (!strcasecmp(c->argv[2]->ptr,"maxmemory")) {
} else if (!strcasecmp(c->argv[2]->ptr,"maxmemory")) {
server.maxmemory = strtoll(o->ptr, NULL, 10);
server.maxmemory = strtoll(o->ptr, NULL, 10);
} else if (!strcasecmp(c->argv[2]->ptr,"save")) {
int vlen, j;
sds *v = sdssplitlen(o->ptr,sdslen(o->ptr)," ",1,&vlen);
/* Perform sanity check before setting the new config:
* - Even number of args
* - Seconds >= 1, changes >= 0 */
if (vlen & 1) {
sdsfreesplitres(v,vlen);
goto badfmt;
}
for (j = 0; j < vlen; j++) {
char *eptr;
long val;
val = strtoll(v[j], &eptr, 10);
if (eptr[0] != '\0' ||
((j & 1) == 0 && val < 1) ||
((j & 1) == 1 && val < 0)) {
sdsfreesplitres(v,vlen);
goto badfmt;
}
}
/* Finally set the new config */
resetServerSaveParams();
for (j = 0; j < vlen; j += 2) {
time_t seconds;
int changes;
seconds = strtoll(v[j],NULL,10);
changes = strtoll(v[j+1],NULL,10);
appendServerSaveParams(seconds, changes);
}
sdsfreesplitres(v,vlen);
} else {
} else {
addReplySds(c,sdscatprintf(sdsempty(),
addReplySds(c,sdscatprintf(sdsempty(),
"-ERR not supported CONFIG parameter %s\r\n",
"-ERR not supported CONFIG parameter %s\r\n",
...
@@ -9692,6 +9726,14 @@ static void configSetCommand(redisClient *c) {
...
@@ -9692,6 +9726,14 @@ static void configSetCommand(redisClient *c) {
}
}
decrRefCount(o);
decrRefCount(o);
addReply(c,shared.ok);
addReply(c,shared.ok);
return;
badfmt: /* Bad format errors */
addReplySds(c,sdscatprintf(sdsempty(),
"-ERR invalid argument '%s' for CONFIG SET '%s'\r\n",
(char*)o->ptr,
(char*)c->argv[2]->ptr));
decrRefCount(o);
}
}
static void configGetCommand(redisClient *c) {
static void configGetCommand(redisClient *c) {
...
@@ -9726,6 +9768,22 @@ static void configGetCommand(redisClient *c) {
...
@@ -9726,6 +9768,22 @@ static void configGetCommand(redisClient *c) {
addReplyBulkCString(c,buf);
addReplyBulkCString(c,buf);
matches++;
matches++;
}
}
if (stringmatch(pattern,"save",0)) {
sds buf = sdsempty();
int j;
for (j = 0; j < server.saveparamslen; j++) {
buf = sdscatprintf(buf,"%ld %d",
server.saveparams[j].seconds,
server.saveparams[j].changes);
if (j != server.saveparamslen-1)
buf = sdscatlen(buf," ",1);
}
addReplyBulkCString(c,"save");
addReplyBulkCString(c,buf);
sdsfree(buf);
matches++;
}
decrRefCount(o);
decrRefCount(o);
lenobj->ptr = sdscatprintf(sdsempty(),"*%d\r\n",matches*2);
lenobj->ptr = sdscatprintf(sdsempty(),"*%d\r\n",matches*2);
}
}
...
...
sds.c
View file @
a34e0a25
...
@@ -335,3 +335,10 @@ cleanup:
...
@@ -335,3 +335,10 @@ cleanup:
}
}
#endif
#endif
}
}
void
sdsfreesplitres
(
sds
*
tokens
,
int
count
)
{
if
(
!
tokens
)
return
;
while
(
count
--
)
sdsfree
(
tokens
[
count
]);
zfree
(
tokens
);
}
sds.h
View file @
a34e0a25
...
@@ -65,6 +65,7 @@ sds sdsrange(sds s, long start, long end);
...
@@ -65,6 +65,7 @@ sds sdsrange(sds s, long start, long end);
void
sdsupdatelen
(
sds
s
);
void
sdsupdatelen
(
sds
s
);
int
sdscmp
(
sds
s1
,
sds
s2
);
int
sdscmp
(
sds
s1
,
sds
s2
);
sds
*
sdssplitlen
(
char
*
s
,
int
len
,
char
*
sep
,
int
seplen
,
int
*
count
);
sds
*
sdssplitlen
(
char
*
s
,
int
len
,
char
*
sep
,
int
seplen
,
int
*
count
);
void
sdsfreesplitres
(
sds
*
tokens
,
int
count
);
void
sdstolower
(
sds
s
);
void
sdstolower
(
sds
s
);
void
sdstoupper
(
sds
s
);
void
sdstoupper
(
sds
s
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment