if (yn == -1) goto badfmt;
server.stop_writes_on_bgsave_err = yn;
+ } else if (!strcasecmp(c->argv[2]->ptr,"repl-ping-slave-period")) {
+ if (getLongLongFromObject(o,&ll) == REDIS_ERR || ll <= 0) goto badfmt;
+ server.repl_ping_slave_period = ll;
+ } else if (!strcasecmp(c->argv[2]->ptr,"repl-timeout")) {
+ if (getLongLongFromObject(o,&ll) == REDIS_ERR || ll <= 0) goto badfmt;
+ server.repl_timeout = ll;
} else {
addReplyErrorFormat(c,"Unsupported CONFIG parameter: %s",
(char*)c->argv[2]->ptr);
(char*)c->argv[2]->ptr);
}
+#define config_get_string_field(_name,_var) do { \
+ if (stringmatch(pattern,_name,0)) { \
+ addReplyBulkCString(c,_name); \
+ addReplyBulkCString(c,_var ? _var : ""); \
+ matches++; \
+ } \
+} while(0);
+
+#define config_get_bool_field(_name,_var) do { \
+ if (stringmatch(pattern,_name,0)) { \
+ addReplyBulkCString(c,_name); \
+ addReplyBulkCString(c,_var ? "yes" : "no"); \
+ matches++; \
+ } \
+} while(0);
+
+#define config_get_numerical_field(_name,_var) do { \
+ if (stringmatch(pattern,_name,0)) { \
+ ll2string(buf,sizeof(buf),_var); \
+ addReplyBulkCString(c,_name); \
+ addReplyBulkCString(c,buf); \
+ matches++; \
+ } \
+} while(0);
+
void configGetCommand(redisClient *c) {
robj *o = c->argv[2];
void *replylen = addDeferredMultiBulkLength(c);
int matches = 0;
redisAssertWithInfo(c,o,o->encoding == REDIS_ENCODING_RAW);
+ /* String values */
+ config_get_string_field("dbfilename",server.rdb_filename);
+ config_get_string_field("requirepass",server.requirepass);
+ config_get_string_field("masterauth",server.requirepass);
+ config_get_string_field("bind",server.bindaddr);
+ config_get_string_field("unixsocket",server.unixsocket);
+ config_get_string_field("logfile",server.logfile);
+ config_get_string_field("pidfile",server.pidfile);
+
+ /* Numerical values */
+ config_get_numerical_field("maxmemory",server.maxmemory);
+ config_get_numerical_field("maxmemory-samples",server.maxmemory_samples);
+ config_get_numerical_field("timeout",server.maxidletime);
+ config_get_numerical_field("auto-aof-rewrite-percentage",
+ server.aof_rewrite_perc);
+ config_get_numerical_field("auto-aof-rewrite-min-size",
+ server.aof_rewrite_min_size);
+ config_get_numerical_field("hash-max-zipmap-entries",
+ server.hash_max_zipmap_entries);
+ config_get_numerical_field("hash-max-zipmap-value",
+ server.hash_max_zipmap_value);
+ config_get_numerical_field("list-max-ziplist-entries",
+ server.list_max_ziplist_entries);
+ config_get_numerical_field("list-max-ziplist-value",
+ server.list_max_ziplist_value);
+ config_get_numerical_field("set-max-intset-entries",
+ server.set_max_intset_entries);
+ config_get_numerical_field("zset-max-ziplist-entries",
+ server.zset_max_ziplist_entries);
+ config_get_numerical_field("zset-max-ziplist-value",
+ server.zset_max_ziplist_value);
+ config_get_numerical_field("lua-time-limit",server.lua_time_limit);
+ config_get_numerical_field("slowlog-log-slower-than",
+ server.slowlog_log_slower_than);
+ config_get_numerical_field("slowlog-max-len",
+ server.slowlog_max_len);
+ config_get_numerical_field("port",server.port);
+ config_get_numerical_field("databases",server.dbnum);
+ config_get_numerical_field("repl-ping-slave-period",server.repl_ping_slave_period);
+ config_get_numerical_field("repl-timeout",server.repl_timeout);
+ config_get_numerical_field("maxclients",server.maxclients);
+
+ /* Bool (yes/no) values */
+ config_get_bool_field("no-appendfsync-on-rewrite",
+ server.aof_no_fsync_on_rewrite);
+ config_get_bool_field("slave-serve-stale-data",
+ server.repl_serve_stale_data);
+ config_get_bool_field("stop-writes-on-bgsave-error",
+ server.stop_writes_on_bgsave_err);
+ config_get_bool_field("daemonize", server.daemonize);
+ config_get_bool_field("rdbcompression", server.rdb_compression);
+ config_get_bool_field("activerehashing", server.activerehashing);
+
+ /* Everything we can't handle with macros follows. */
+
+ if (stringmatch(pattern,"appendonly",0)) {
+ addReplyBulkCString(c,"appendonly");
+ addReplyBulkCString(c,server.aof_state == REDIS_AOF_OFF ? "no" : "yes");
+ matches++;
+ }
if (stringmatch(pattern,"dir",0)) {
char buf[1024];
addReplyBulkCString(c,buf);
matches++;
}
- if (stringmatch(pattern,"dbfilename",0)) {
- addReplyBulkCString(c,"dbfilename");
- addReplyBulkCString(c,server.rdb_filename);
- matches++;
- }
- if (stringmatch(pattern,"requirepass",0)) {
- addReplyBulkCString(c,"requirepass");
- addReplyBulkCString(c,server.requirepass);
- matches++;
- }
- if (stringmatch(pattern,"masterauth",0)) {
- addReplyBulkCString(c,"masterauth");
- addReplyBulkCString(c,server.masterauth);
- matches++;
- }
- if (stringmatch(pattern,"maxmemory",0)) {
- ll2string(buf,sizeof(buf),server.maxmemory);
- addReplyBulkCString(c,"maxmemory");
- addReplyBulkCString(c,buf);
- matches++;
- }
if (stringmatch(pattern,"maxmemory-policy",0)) {
char *s;
addReplyBulkCString(c,s);
matches++;
}
- if (stringmatch(pattern,"maxmemory-samples",0)) {
- ll2string(buf,sizeof(buf),server.maxmemory_samples);
- addReplyBulkCString(c,"maxmemory-samples");
- addReplyBulkCString(c,buf);
- matches++;
- }
- if (stringmatch(pattern,"timeout",0)) {
- ll2string(buf,sizeof(buf),server.maxidletime);
- addReplyBulkCString(c,"timeout");
- addReplyBulkCString(c,buf);
- matches++;
- }
- if (stringmatch(pattern,"appendonly",0)) {
- addReplyBulkCString(c,"appendonly");
- addReplyBulkCString(c,server.aof_state == REDIS_AOF_OFF ? "no" : "yes");
- matches++;
- }
- if (stringmatch(pattern,"no-appendfsync-on-rewrite",0)) {
- addReplyBulkCString(c,"no-appendfsync-on-rewrite");
- addReplyBulkCString(c,server.aof_no_fsync_on_rewrite ? "yes" : "no");
- matches++;
- }
if (stringmatch(pattern,"appendfsync",0)) {
char *policy;
sdsfree(buf);
matches++;
}
- if (stringmatch(pattern,"auto-aof-rewrite-percentage",0)) {
- addReplyBulkCString(c,"auto-aof-rewrite-percentage");
- addReplyBulkLongLong(c,server.aof_rewrite_perc);
- matches++;
- }
- if (stringmatch(pattern,"auto-aof-rewrite-min-size",0)) {
- addReplyBulkCString(c,"auto-aof-rewrite-min-size");
- addReplyBulkLongLong(c,server.aof_rewrite_min_size);
- matches++;
- }
- if (stringmatch(pattern,"slave-serve-stale-data",0)) {
- addReplyBulkCString(c,"slave-serve-stale-data");
- addReplyBulkCString(c,server.repl_serve_stale_data ? "yes" : "no");
- matches++;
- }
- if (stringmatch(pattern,"hash-max-zipmap-entries",0)) {
- addReplyBulkCString(c,"hash-max-zipmap-entries");
- addReplyBulkLongLong(c,server.hash_max_zipmap_entries);
- matches++;
- }
- if (stringmatch(pattern,"hash-max-zipmap-value",0)) {
- addReplyBulkCString(c,"hash-max-zipmap-value");
- addReplyBulkLongLong(c,server.hash_max_zipmap_value);
- matches++;
- }
- if (stringmatch(pattern,"list-max-ziplist-entries",0)) {
- addReplyBulkCString(c,"list-max-ziplist-entries");
- addReplyBulkLongLong(c,server.list_max_ziplist_entries);
- matches++;
- }
- if (stringmatch(pattern,"list-max-ziplist-value",0)) {
- addReplyBulkCString(c,"list-max-ziplist-value");
- addReplyBulkLongLong(c,server.list_max_ziplist_value);
- matches++;
- }
- if (stringmatch(pattern,"set-max-intset-entries",0)) {
- addReplyBulkCString(c,"set-max-intset-entries");
- addReplyBulkLongLong(c,server.set_max_intset_entries);
- matches++;
- }
- if (stringmatch(pattern,"zset-max-ziplist-entries",0)) {
- addReplyBulkCString(c,"zset-max-ziplist-entries");
- addReplyBulkLongLong(c,server.zset_max_ziplist_entries);
- matches++;
- }
- if (stringmatch(pattern,"zset-max-ziplist-value",0)) {
- addReplyBulkCString(c,"zset-max-ziplist-value");
- addReplyBulkLongLong(c,server.zset_max_ziplist_value);
- matches++;
- }
- if (stringmatch(pattern,"lua-time-limit",0)) {
- addReplyBulkCString(c,"lua-time-limit");
- addReplyBulkLongLong(c,server.lua_time_limit);
- matches++;
- }
- if (stringmatch(pattern,"slowlog-log-slower-than",0)) {
- addReplyBulkCString(c,"slowlog-log-slower-than");
- addReplyBulkLongLong(c,server.slowlog_log_slower_than);
- matches++;
- }
- if (stringmatch(pattern,"slowlog-max-len",0)) {
- addReplyBulkCString(c,"slowlog-max-len");
- addReplyBulkLongLong(c,server.slowlog_max_len);
- matches++;
- }
if (stringmatch(pattern,"loglevel",0)) {
char *s;
sdsfree(buf);
matches++;
}
- if (stringmatch(pattern,"stop-writes-on-bgsave-error",0)) {
- addReplyBulkCString(c,"stop-writes-on-bgsave-error");
- addReplyBulkCString(c,server.stop_writes_on_bgsave_err ? "yes" : "no");
+ if (stringmatch(pattern,"unixsocketperm",0)) {
+ char buf[32];
+ snprintf(buf,sizeof(buf),"%o",server.unixsocketperm);
+ addReplyBulkCString(c,"unixsocketperm");
+ addReplyBulkCString(c,buf);
+ matches++;
+ }
+ if (stringmatch(pattern,"slaveof",0)) {
+ char buf[256];
+
+ addReplyBulkCString(c,"slaveof");
+ if (server.masterhost)
+ snprintf(buf,sizeof(buf),"%s %d",
+ server.masterhost, server.masterport);
+ else
+ buf[0] = '\0';
+ addReplyBulkCString(c,buf);
matches++;
}
setDeferredMultiBulkLength(c,replylen,matches*2);