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
803d765d
Commit
803d765d
authored
Jul 19, 2019
by
Madelyn Olson
Browse files
Refactored renaming types in config
parent
45025713
Changes
1
Show whitespace changes
Inline
Side-by-side
src/config.c
View file @
803d765d
...
@@ -107,46 +107,70 @@ clientBufferLimitsConfig clientBufferLimitsDefaults[CLIENT_TYPE_OBUF_COUNT] = {
...
@@ -107,46 +107,70 @@ clientBufferLimitsConfig clientBufferLimitsDefaults[CLIENT_TYPE_OBUF_COUNT] = {
/* Configuration values that require no special handling to set, get, load or
/* Configuration values that require no special handling to set, get, load or
* rewrite. */
* rewrite. */
typedef
struct
configYesNo
{
typedef
struct
boolConfigData
{
int
*
config
;
/* The pointer to the server config this value is stored in */
const
int
default_value
;
/* The default value of the config on rewrite */
}
boolConfigData
;
typedef
struct
stringConfigData
{
char
**
config
;
/* The pointer to the server config this value is stored in */
const
char
*
default_value
;
/* The default value of the config on rewrite */
}
stringConfigData
;
typedef
struct
enumConfigData
{
int
*
config
;
/* The pointer to the server config this value is stored in */
configEnum
*
enum_value
;
/* The underlying enum type this data represents */
const
int
default_value
;
/* The default value of the config on rewrite */
}
enumConfigData
;
typedef
enum
numericType
{
NUMERIC_TYPE_INT
,
NUMERIC_TYPE_LONG_LONG
,
NUMERIC_TYPE_UNSIGNED_LONG
,
NUMERIC_TYPE_SIZE_T
}
numericType
;
typedef
struct
numericConfigData
{
union
{
int
*
i
;
long
long
*
ll
;
unsigned
long
*
ul
;
size_t
*
st
;
}
config
;
/* The pointer to the numeric config this value is stored in */
int
is_memory
;
/* Indicates if this value can be loaded as a memory value */
numericType
numeric_type
;
/* An enum indicating the type of this value */
long
long
lower_bound
;
/* The lower bound of this numeric value */
long
long
upper_bound
;
/* The upper bound of this numeric value */
const
long
long
default_value
;
/* The default value of the config on rewrite */
}
numericConfigData
;
typedef
union
typeData
{
boolConfigData
yesno
;
stringConfigData
string
;
enumConfigData
enumd
;
numericConfigData
numeric
;
}
typeData
;
typedef
struct
typeInterface
{
/* Called on server start, should return 1 on success, 0 on error and should set err */
int
(
*
load
)(
typeData
data
,
sds
*
argc
,
int
argv
,
char
**
err
);
/* Called on CONFIG SET, returns 1 on success, 0 on error */
int
(
*
set
)(
typeData
data
,
sds
value
);
/* Called on CONFIG GET, required to add output to the client */
void
(
*
get
)(
client
*
c
,
typeData
data
);
/* Called on CONFIG REWRITE, required to rewrite the config state */
void
(
*
rewrite
)(
typeData
data
,
const
char
*
name
,
struct
rewriteConfigState
*
state
);
}
typeInterface
;
typedef
struct
standardConfig
{
const
char
*
name
;
/* The user visible name of this config */
const
char
*
name
;
/* The user visible name of this config */
const
char
*
alias
;
/* An alias that can also be used for this config */
const
char
*
alias
;
/* An alias that can also be used for this config */
int
*
config
;
/* The pointer to the server config this value is stored in */
const
int
modifiable
;
/* Can this value be updated by CONFIG SET? */
const
int
modifiable
;
/* Can this value be updated by CONFIG SET? */
const
int
default_value
;
/* The default value of the config on rewrite */
typeInterface
interface
;
/* The function points that define the type interface */
}
configYesNo
;
typeData
data
;
/* The type specific data exposed used by the interface */
}
standardConfig
;
configYesNo
configs_yesno
[]
=
{
/* Non-Modifiable */
standardConfig
configs
[];
{
"rdbchecksum"
,
NULL
,
&
server
.
rdb_checksum
,
0
,
CONFIG_DEFAULT_RDB_CHECKSUM
},
{
"daemonize"
,
NULL
,
&
server
.
daemonize
,
0
,
0
},
{
"io-threads-do-reads"
,
NULL
,
&
server
.
io_threads_do_reads
,
0
,
CONFIG_DEFAULT_IO_THREADS_DO_READS
},
{
"always-show-logo"
,
NULL
,
&
server
.
always_show_logo
,
0
,
CONFIG_DEFAULT_ALWAYS_SHOW_LOGO
},
/* Modifiable */
{
"protected-mode"
,
NULL
,
&
server
.
protected_mode
,
1
,
CONFIG_DEFAULT_PROTECTED_MODE
},
{
"rdbcompression"
,
NULL
,
&
server
.
rdb_compression
,
1
,
CONFIG_DEFAULT_RDB_COMPRESSION
},
{
"activerehashing"
,
NULL
,
&
server
.
activerehashing
,
1
,
CONFIG_DEFAULT_ACTIVE_REHASHING
},
{
"stop-writes-on-bgsave-error"
,
NULL
,
&
server
.
stop_writes_on_bgsave_err
,
1
,
CONFIG_DEFAULT_STOP_WRITES_ON_BGSAVE_ERROR
},
{
"dynamic-hz"
,
NULL
,
&
server
.
dynamic_hz
,
1
,
CONFIG_DEFAULT_DYNAMIC_HZ
},
{
"lazyfree-lazy-eviction"
,
NULL
,
&
server
.
lazyfree_lazy_eviction
,
1
,
CONFIG_DEFAULT_LAZYFREE_LAZY_EVICTION
},
{
"lazyfree-lazy-expire"
,
NULL
,
&
server
.
lazyfree_lazy_expire
,
1
,
CONFIG_DEFAULT_LAZYFREE_LAZY_EXPIRE
},
{
"lazyfree-lazy-server-del"
,
NULL
,
&
server
.
lazyfree_lazy_server_del
,
1
,
CONFIG_DEFAULT_LAZYFREE_LAZY_SERVER_DEL
},
{
"repl-disable-tcp-nodelay"
,
NULL
,
&
server
.
repl_disable_tcp_nodelay
,
1
,
CONFIG_DEFAULT_REPL_DISABLE_TCP_NODELAY
},
{
"repl-diskless-sync"
,
NULL
,
&
server
.
repl_diskless_sync
,
1
,
CONFIG_DEFAULT_REPL_DISKLESS_SYNC
},
{
"gopher-enabled"
,
NULL
,
&
server
.
gopher_enabled
,
1
,
CONFIG_DEFAULT_GOPHER_ENABLED
},
{
"aof-rewrite-incremental-fsync"
,
NULL
,
&
server
.
aof_rewrite_incremental_fsync
,
1
,
CONFIG_DEFAULT_AOF_REWRITE_INCREMENTAL_FSYNC
},
{
"no-appendfsync-on-rewrite"
,
NULL
,
&
server
.
aof_no_fsync_on_rewrite
,
1
,
CONFIG_DEFAULT_AOF_NO_FSYNC_ON_REWRITE
},
{
"cluster-require-full-coverage"
,
NULL
,
&
server
.
cluster_require_full_coverage
,
CLUSTER_DEFAULT_REQUIRE_FULL_COVERAGE
},
{
"rdb-save-incremental-fsync"
,
NULL
,
&
server
.
rdb_save_incremental_fsync
,
1
,
CONFIG_DEFAULT_RDB_SAVE_INCREMENTAL_FSYNC
},
{
"aof-load-truncated"
,
NULL
,
&
server
.
aof_load_truncated
,
1
,
CONFIG_DEFAULT_AOF_LOAD_TRUNCATED
},
{
"aof-use-rdb-preamble"
,
NULL
,
&
server
.
aof_use_rdb_preamble
,
1
,
CONFIG_DEFAULT_AOF_USE_RDB_PREAMBLE
},
{
"cluster-replica-no-failover"
,
"cluster-slave-no-failover"
,
&
server
.
cluster_slave_no_failover
,
1
,
CLUSTER_DEFAULT_SLAVE_NO_FAILOVER
},
{
"replica-lazy-flush"
,
"slave-lazy-flush"
,
&
server
.
repl_slave_lazy_flush
,
1
,
CONFIG_DEFAULT_SLAVE_LAZY_FLUSH
},
{
"replica-serve-stale-data"
,
"slave-serve-stale-data"
,
&
server
.
repl_serve_stale_data
,
1
,
CONFIG_DEFAULT_SLAVE_SERVE_STALE_DATA
},
{
"replica-read-only"
,
"slave-read-only"
,
&
server
.
repl_slave_ro
,
1
,
CONFIG_DEFAULT_SLAVE_READ_ONLY
},
{
"replica-ignore-maxmemory"
,
"slave-ignore-maxmemory"
,
&
server
.
repl_slave_ignore_maxmemory
,
1
,
CONFIG_DEFAULT_SLAVE_IGNORE_MAXMEMORY
},
{
"jemalloc-bg-thread"
,
NULL
,
&
server
.
jemalloc_bg_thread
,
1
,
1
},
{
NULL
,
NULL
,
0
,
0
}
};
/*-----------------------------------------------------------------------------
/*-----------------------------------------------------------------------------
* Enum access functions
* Enum access functions
...
@@ -220,7 +244,7 @@ void queueLoadModule(sds path, sds *argv, int argc) {
...
@@ -220,7 +244,7 @@ void queueLoadModule(sds path, sds *argv, int argc) {
}
}
void
loadServerConfigFromString
(
char
*
config
)
{
void
loadServerConfigFromString
(
char
*
config
)
{
const
char
*
err
=
NULL
;
char
*
err
=
NULL
;
int
linenum
=
0
,
totlines
,
i
;
int
linenum
=
0
,
totlines
,
i
;
int
slaveof_linenum
=
0
;
int
slaveof_linenum
=
0
;
sds
*
lines
;
sds
*
lines
;
...
@@ -253,14 +277,14 @@ void loadServerConfigFromString(char *config) {
...
@@ -253,14 +277,14 @@ void loadServerConfigFromString(char *config) {
/* Iterate the configs that are standard */
/* Iterate the configs that are standard */
int
match
=
0
;
int
match
=
0
;
for
(
configYesNo
*
config
=
configs
_yesno
;
config
->
name
!=
NULL
;
config
++
)
{
for
(
standardConfig
*
config
=
configs
;
config
->
name
!=
NULL
;
config
++
)
{
if
((
!
strcasecmp
(
argv
[
0
],
config
->
name
)
||
if
((
!
strcasecmp
(
argv
[
0
],
config
->
name
)
||
(
config
->
alias
&&
!
strcasecmp
(
argv
[
0
],
config
->
alias
)))
&&
(
config
->
alias
&&
!
strcasecmp
(
argv
[
0
],
config
->
alias
))))
(
argc
==
2
))
{
{
if
(
(
*
(
config
->
config
)
=
yesnotoi
(
argv
[
1
]))
==
-
1
)
{
if
(
!
config
->
interface
.
load
(
config
->
data
,
argv
,
argc
,
&
err
)
)
{
err
=
"argument must be 'yes' or 'no'"
;
goto
loaderr
;
goto
loaderr
;
}
}
match
=
1
;
match
=
1
;
break
;
break
;
}
}
...
@@ -272,27 +296,7 @@ void loadServerConfigFromString(char *config) {
...
@@ -272,27 +296,7 @@ void loadServerConfigFromString(char *config) {
}
}
/* Execute config directives */
/* Execute config directives */
if
(
!
strcasecmp
(
argv
[
0
],
"timeout"
)
&&
argc
==
2
)
{
if
(
!
strcasecmp
(
argv
[
0
],
"bind"
)
&&
argc
>=
2
)
{
server
.
maxidletime
=
atoi
(
argv
[
1
]);
if
(
server
.
maxidletime
<
0
)
{
err
=
"Invalid timeout value"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"tcp-keepalive"
)
&&
argc
==
2
)
{
server
.
tcpkeepalive
=
atoi
(
argv
[
1
]);
if
(
server
.
tcpkeepalive
<
0
)
{
err
=
"Invalid tcp-keepalive value"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"port"
)
&&
argc
==
2
)
{
server
.
port
=
atoi
(
argv
[
1
]);
if
(
server
.
port
<
0
||
server
.
port
>
65535
)
{
err
=
"Invalid port"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"tcp-backlog"
)
&&
argc
==
2
)
{
server
.
tcp_backlog
=
atoi
(
argv
[
1
]);
if
(
server
.
tcp_backlog
<
0
)
{
err
=
"Invalid backlog value"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"bind"
)
&&
argc
>=
2
)
{
int
j
,
addresses
=
argc
-
1
;
int
j
,
addresses
=
argc
-
1
;
if
(
addresses
>
CONFIG_BINDADDR_MAX
)
{
if
(
addresses
>
CONFIG_BINDADDR_MAX
)
{
...
@@ -301,8 +305,6 @@ void loadServerConfigFromString(char *config) {
...
@@ -301,8 +305,6 @@ void loadServerConfigFromString(char *config) {
for
(
j
=
0
;
j
<
addresses
;
j
++
)
for
(
j
=
0
;
j
<
addresses
;
j
++
)
server
.
bindaddr
[
j
]
=
zstrdup
(
argv
[
j
+
1
]);
server
.
bindaddr
[
j
]
=
zstrdup
(
argv
[
j
+
1
]);
server
.
bindaddr_count
=
addresses
;
server
.
bindaddr_count
=
addresses
;
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"unixsocket"
)
&&
argc
==
2
)
{
server
.
unixsocket
=
zstrdup
(
argv
[
1
]);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"unixsocketperm"
)
&&
argc
==
2
)
{
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"unixsocketperm"
)
&&
argc
==
2
)
{
errno
=
0
;
errno
=
0
;
server
.
unixsocketperm
=
(
mode_t
)
strtol
(
argv
[
1
],
NULL
,
8
);
server
.
unixsocketperm
=
(
mode_t
)
strtol
(
argv
[
1
],
NULL
,
8
);
...
@@ -326,13 +328,6 @@ void loadServerConfigFromString(char *config) {
...
@@ -326,13 +328,6 @@ void loadServerConfigFromString(char *config) {
argv
[
1
],
strerror
(
errno
));
argv
[
1
],
strerror
(
errno
));
exit
(
1
);
exit
(
1
);
}
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"loglevel"
)
&&
argc
==
2
)
{
server
.
verbosity
=
configEnumGetValue
(
loglevel_enum
,
argv
[
1
]);
if
(
server
.
verbosity
==
INT_MIN
)
{
err
=
"Invalid log level. "
"Must be one of debug, verbose, notice, warning"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"logfile"
)
&&
argc
==
2
)
{
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"logfile"
)
&&
argc
==
2
)
{
FILE
*
logfp
;
FILE
*
logfp
;
...
@@ -349,9 +344,6 @@ void loadServerConfigFromString(char *config) {
...
@@ -349,9 +344,6 @@ void loadServerConfigFromString(char *config) {
}
}
fclose
(
logfp
);
fclose
(
logfp
);
}
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"aclfile"
)
&&
argc
==
2
)
{
zfree
(
server
.
acl_filename
);
server
.
acl_filename
=
zstrdup
(
argv
[
1
]);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"syslog-enabled"
)
&&
argc
==
2
)
{
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"syslog-enabled"
)
&&
argc
==
2
)
{
if
((
server
.
syslog_enabled
=
yesnotoi
(
argv
[
1
]))
==
-
1
)
{
if
((
server
.
syslog_enabled
=
yesnotoi
(
argv
[
1
]))
==
-
1
)
{
err
=
"argument must be 'yes' or 'no'"
;
goto
loaderr
;
err
=
"argument must be 'yes' or 'no'"
;
goto
loaderr
;
...
@@ -359,23 +351,6 @@ void loadServerConfigFromString(char *config) {
...
@@ -359,23 +351,6 @@ void loadServerConfigFromString(char *config) {
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"syslog-ident"
)
&&
argc
==
2
)
{
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"syslog-ident"
)
&&
argc
==
2
)
{
if
(
server
.
syslog_ident
)
zfree
(
server
.
syslog_ident
);
if
(
server
.
syslog_ident
)
zfree
(
server
.
syslog_ident
);
server
.
syslog_ident
=
zstrdup
(
argv
[
1
]);
server
.
syslog_ident
=
zstrdup
(
argv
[
1
]);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"syslog-facility"
)
&&
argc
==
2
)
{
server
.
syslog_facility
=
configEnumGetValue
(
syslog_facility_enum
,
argv
[
1
]);
if
(
server
.
syslog_facility
==
INT_MIN
)
{
err
=
"Invalid log facility. Must be one of USER or between LOCAL0-LOCAL7"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"databases"
)
&&
argc
==
2
)
{
server
.
dbnum
=
atoi
(
argv
[
1
]);
if
(
server
.
dbnum
<
1
)
{
err
=
"Invalid number of databases"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"io-threads"
)
&&
argc
==
2
)
{
server
.
io_threads_num
=
atoi
(
argv
[
1
]);
if
(
server
.
io_threads_num
<
1
||
server
.
io_threads_num
>
512
)
{
err
=
"Invalid number of I/O threads"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"include"
)
&&
argc
==
2
)
{
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"include"
)
&&
argc
==
2
)
{
loadServerConfig
(
argv
[
1
],
NULL
);
loadServerConfig
(
argv
[
1
],
NULL
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"maxclients"
)
&&
argc
==
2
)
{
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"maxclients"
)
&&
argc
==
2
)
{
...
@@ -385,68 +360,14 @@ void loadServerConfigFromString(char *config) {
...
@@ -385,68 +360,14 @@ void loadServerConfigFromString(char *config) {
}
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"maxmemory"
)
&&
argc
==
2
)
{
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"maxmemory"
)
&&
argc
==
2
)
{
server
.
maxmemory
=
memtoll
(
argv
[
1
],
NULL
);
server
.
maxmemory
=
memtoll
(
argv
[
1
],
NULL
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"maxmemory-policy"
)
&&
argc
==
2
)
{
server
.
maxmemory_policy
=
configEnumGetValue
(
maxmemory_policy_enum
,
argv
[
1
]);
if
(
server
.
maxmemory_policy
==
INT_MIN
)
{
err
=
"Invalid maxmemory policy"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"maxmemory-samples"
)
&&
argc
==
2
)
{
server
.
maxmemory_samples
=
atoi
(
argv
[
1
]);
if
(
server
.
maxmemory_samples
<=
0
)
{
err
=
"maxmemory-samples must be 1 or greater"
;
goto
loaderr
;
}
}
else
if
((
!
strcasecmp
(
argv
[
0
],
"proto-max-bulk-len"
))
&&
argc
==
2
)
{
server
.
proto_max_bulk_len
=
memtoll
(
argv
[
1
],
NULL
);
}
else
if
((
!
strcasecmp
(
argv
[
0
],
"client-query-buffer-limit"
))
&&
argc
==
2
)
{
}
else
if
((
!
strcasecmp
(
argv
[
0
],
"client-query-buffer-limit"
))
&&
argc
==
2
)
{
server
.
client_max_querybuf_len
=
memtoll
(
argv
[
1
],
NULL
);
server
.
client_max_querybuf_len
=
memtoll
(
argv
[
1
],
NULL
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"lfu-log-factor"
)
&&
argc
==
2
)
{
server
.
lfu_log_factor
=
atoi
(
argv
[
1
]);
if
(
server
.
lfu_log_factor
<
0
)
{
err
=
"lfu-log-factor must be 0 or greater"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"lfu-decay-time"
)
&&
argc
==
2
)
{
server
.
lfu_decay_time
=
atoi
(
argv
[
1
]);
if
(
server
.
lfu_decay_time
<
0
)
{
err
=
"lfu-decay-time must be 0 or greater"
;
goto
loaderr
;
}
}
else
if
((
!
strcasecmp
(
argv
[
0
],
"slaveof"
)
||
}
else
if
((
!
strcasecmp
(
argv
[
0
],
"slaveof"
)
||
!
strcasecmp
(
argv
[
0
],
"replicaof"
))
&&
argc
==
3
)
{
!
strcasecmp
(
argv
[
0
],
"replicaof"
))
&&
argc
==
3
)
{
slaveof_linenum
=
linenum
;
slaveof_linenum
=
linenum
;
server
.
masterhost
=
sdsnew
(
argv
[
1
]);
server
.
masterhost
=
sdsnew
(
argv
[
1
]);
server
.
masterport
=
atoi
(
argv
[
2
]);
server
.
masterport
=
atoi
(
argv
[
2
]);
server
.
repl_state
=
REPL_STATE_CONNECT
;
server
.
repl_state
=
REPL_STATE_CONNECT
;
}
else
if
((
!
strcasecmp
(
argv
[
0
],
"repl-ping-slave-period"
)
||
!
strcasecmp
(
argv
[
0
],
"repl-ping-replica-period"
))
&&
argc
==
2
)
{
server
.
repl_ping_slave_period
=
atoi
(
argv
[
1
]);
if
(
server
.
repl_ping_slave_period
<=
0
)
{
err
=
"repl-ping-replica-period must be 1 or greater"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"repl-timeout"
)
&&
argc
==
2
)
{
server
.
repl_timeout
=
atoi
(
argv
[
1
]);
if
(
server
.
repl_timeout
<=
0
)
{
err
=
"repl-timeout must be 1 or greater"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"repl-diskless-load"
)
&&
argc
==
2
)
{
server
.
repl_diskless_load
=
configEnumGetValue
(
repl_diskless_load_enum
,
argv
[
1
]);
if
(
server
.
repl_diskless_load
==
INT_MIN
)
{
err
=
"argument must be 'disabled', 'on-empty-db', 'swapdb' or 'flushdb'"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"repl-diskless-sync-delay"
)
&&
argc
==
2
)
{
server
.
repl_diskless_sync_delay
=
atoi
(
argv
[
1
]);
if
(
server
.
repl_diskless_sync_delay
<
0
)
{
err
=
"repl-diskless-sync-delay can't be negative"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"repl-backlog-size"
)
&&
argc
==
2
)
{
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"repl-backlog-size"
)
&&
argc
==
2
)
{
long
long
size
=
memtoll
(
argv
[
1
],
NULL
);
long
long
size
=
memtoll
(
argv
[
1
],
NULL
);
if
(
size
<=
0
)
{
if
(
size
<=
0
)
{
...
@@ -460,12 +381,6 @@ void loadServerConfigFromString(char *config) {
...
@@ -460,12 +381,6 @@ void loadServerConfigFromString(char *config) {
err
=
"repl-backlog-ttl can't be negative "
;
err
=
"repl-backlog-ttl can't be negative "
;
goto
loaderr
;
goto
loaderr
;
}
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"masteruser"
)
&&
argc
==
2
)
{
zfree
(
server
.
masteruser
);
server
.
masteruser
=
argv
[
1
][
0
]
?
zstrdup
(
argv
[
1
])
:
NULL
;
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"masterauth"
)
&&
argc
==
2
)
{
zfree
(
server
.
masterauth
);
server
.
masterauth
=
argv
[
1
][
0
]
?
zstrdup
(
argv
[
1
])
:
NULL
;
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"activedefrag"
)
&&
argc
==
2
)
{
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"activedefrag"
)
&&
argc
==
2
)
{
if
((
server
.
active_defrag_enabled
=
yesnotoi
(
argv
[
1
]))
==
-
1
)
{
if
((
server
.
active_defrag_enabled
=
yesnotoi
(
argv
[
1
]))
==
-
1
)
{
err
=
"argument must be 'yes' or 'no'"
;
goto
loaderr
;
err
=
"argument must be 'yes' or 'no'"
;
goto
loaderr
;
...
@@ -491,36 +406,6 @@ void loadServerConfigFromString(char *config) {
...
@@ -491,36 +406,6 @@ void loadServerConfigFromString(char *config) {
}
}
zfree
(
server
.
aof_filename
);
zfree
(
server
.
aof_filename
);
server
.
aof_filename
=
zstrdup
(
argv
[
1
]);
server
.
aof_filename
=
zstrdup
(
argv
[
1
]);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"appendfsync"
)
&&
argc
==
2
)
{
server
.
aof_fsync
=
configEnumGetValue
(
aof_fsync_enum
,
argv
[
1
]);
if
(
server
.
aof_fsync
==
INT_MIN
)
{
err
=
"argument must be 'no', 'always' or 'everysec'"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"auto-aof-rewrite-percentage"
)
&&
argc
==
2
)
{
server
.
aof_rewrite_perc
=
atoi
(
argv
[
1
]);
if
(
server
.
aof_rewrite_perc
<
0
)
{
err
=
"Invalid negative percentage for AOF auto rewrite"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"auto-aof-rewrite-min-size"
)
&&
argc
==
2
)
{
server
.
aof_rewrite_min_size
=
memtoll
(
argv
[
1
],
NULL
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"rdb-key-save-delay"
)
&&
argc
==
2
)
{
server
.
rdb_key_save_delay
=
atoi
(
argv
[
1
]);
if
(
server
.
rdb_key_save_delay
<
0
)
{
err
=
"rdb-key-save-delay can't be negative"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"key-load-delay"
)
&&
argc
==
2
)
{
server
.
key_load_delay
=
atoi
(
argv
[
1
]);
if
(
server
.
key_load_delay
<
0
)
{
err
=
"key-load-delay can't be negative"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"requirepass"
)
&&
argc
==
2
)
{
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"requirepass"
)
&&
argc
==
2
)
{
if
(
strlen
(
argv
[
1
])
>
CONFIG_AUTHPASS_MAX_LEN
)
{
if
(
strlen
(
argv
[
1
])
>
CONFIG_AUTHPASS_MAX_LEN
)
{
err
=
"Password is longer than CONFIG_AUTHPASS_MAX_LEN"
;
err
=
"Password is longer than CONFIG_AUTHPASS_MAX_LEN"
;
...
@@ -532,9 +417,6 @@ void loadServerConfigFromString(char *config) {
...
@@ -532,9 +417,6 @@ void loadServerConfigFromString(char *config) {
sds
aclop
=
sdscatprintf
(
sdsempty
(),
">%s"
,
argv
[
1
]);
sds
aclop
=
sdscatprintf
(
sdsempty
(),
">%s"
,
argv
[
1
]);
ACLSetUser
(
DefaultUser
,
aclop
,
sdslen
(
aclop
));
ACLSetUser
(
DefaultUser
,
aclop
,
sdslen
(
aclop
));
sdsfree
(
aclop
);
sdsfree
(
aclop
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"pidfile"
)
&&
argc
==
2
)
{
zfree
(
server
.
pidfile
);
server
.
pidfile
=
zstrdup
(
argv
[
1
]);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"dbfilename"
)
&&
argc
==
2
)
{
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"dbfilename"
)
&&
argc
==
2
)
{
if
(
!
pathIsBaseName
(
argv
[
1
]))
{
if
(
!
pathIsBaseName
(
argv
[
1
]))
{
err
=
"dbfilename can't be a path, just a filename"
;
err
=
"dbfilename can't be a path, just a filename"
;
...
@@ -542,76 +424,10 @@ void loadServerConfigFromString(char *config) {
...
@@ -542,76 +424,10 @@ void loadServerConfigFromString(char *config) {
}
}
zfree
(
server
.
rdb_filename
);
zfree
(
server
.
rdb_filename
);
server
.
rdb_filename
=
zstrdup
(
argv
[
1
]);
server
.
rdb_filename
=
zstrdup
(
argv
[
1
]);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"active-defrag-threshold-lower"
)
&&
argc
==
2
)
{
server
.
active_defrag_threshold_lower
=
atoi
(
argv
[
1
]);
if
(
server
.
active_defrag_threshold_lower
<
0
||
server
.
active_defrag_threshold_lower
>
1000
)
{
err
=
"active-defrag-threshold-lower must be between 0 and 1000"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"active-defrag-threshold-upper"
)
&&
argc
==
2
)
{
server
.
active_defrag_threshold_upper
=
atoi
(
argv
[
1
]);
if
(
server
.
active_defrag_threshold_upper
<
0
||
server
.
active_defrag_threshold_upper
>
1000
)
{
err
=
"active-defrag-threshold-upper must be between 0 and 1000"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"active-defrag-ignore-bytes"
)
&&
argc
==
2
)
{
server
.
active_defrag_ignore_bytes
=
memtoll
(
argv
[
1
],
NULL
);
if
(
server
.
active_defrag_ignore_bytes
<=
0
)
{
err
=
"active-defrag-ignore-bytes must above 0"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"active-defrag-cycle-min"
)
&&
argc
==
2
)
{
server
.
active_defrag_cycle_min
=
atoi
(
argv
[
1
]);
if
(
server
.
active_defrag_cycle_min
<
1
||
server
.
active_defrag_cycle_min
>
99
)
{
err
=
"active-defrag-cycle-min must be between 1 and 99"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"active-defrag-cycle-max"
)
&&
argc
==
2
)
{
server
.
active_defrag_cycle_max
=
atoi
(
argv
[
1
]);
if
(
server
.
active_defrag_cycle_max
<
1
||
server
.
active_defrag_cycle_max
>
99
)
{
err
=
"active-defrag-cycle-max must be between 1 and 99"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"active-defrag-max-scan-fields"
)
&&
argc
==
2
)
{
server
.
active_defrag_max_scan_fields
=
strtoll
(
argv
[
1
],
NULL
,
10
);
if
(
server
.
active_defrag_max_scan_fields
<
1
)
{
err
=
"active-defrag-max-scan-fields must be positive"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"active-expire-effort"
)
&&
argc
==
2
)
{
server
.
active_expire_effort
=
atoi
(
argv
[
1
]);
if
(
server
.
active_expire_effort
<
1
||
server
.
active_expire_effort
>
10
)
{
err
=
"active-expire-effort must be between 1 and 10"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"hash-max-ziplist-entries"
)
&&
argc
==
2
)
{
server
.
hash_max_ziplist_entries
=
memtoll
(
argv
[
1
],
NULL
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"hash-max-ziplist-value"
)
&&
argc
==
2
)
{
server
.
hash_max_ziplist_value
=
memtoll
(
argv
[
1
],
NULL
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"stream-node-max-bytes"
)
&&
argc
==
2
)
{
server
.
stream_node_max_bytes
=
memtoll
(
argv
[
1
],
NULL
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"stream-node-max-entries"
)
&&
argc
==
2
)
{
server
.
stream_node_max_entries
=
atoi
(
argv
[
1
]);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"list-max-ziplist-entries"
)
&&
argc
==
2
){
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"list-max-ziplist-entries"
)
&&
argc
==
2
){
/* DEAD OPTION */
/* DEAD OPTION */
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"list-max-ziplist-value"
)
&&
argc
==
2
)
{
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"list-max-ziplist-value"
)
&&
argc
==
2
)
{
/* DEAD OPTION */
/* DEAD OPTION */
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"list-max-ziplist-size"
)
&&
argc
==
2
)
{
server
.
list_max_ziplist_size
=
atoi
(
argv
[
1
]);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"list-compress-depth"
)
&&
argc
==
2
)
{
server
.
list_compress_depth
=
atoi
(
argv
[
1
]);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"set-max-intset-entries"
)
&&
argc
==
2
)
{
server
.
set_max_intset_entries
=
memtoll
(
argv
[
1
],
NULL
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"zset-max-ziplist-entries"
)
&&
argc
==
2
)
{
server
.
zset_max_ziplist_entries
=
memtoll
(
argv
[
1
],
NULL
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"zset-max-ziplist-value"
)
&&
argc
==
2
)
{
server
.
zset_max_ziplist_value
=
memtoll
(
argv
[
1
],
NULL
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"hll-sparse-max-bytes"
)
&&
argc
==
2
)
{
server
.
hll_sparse_max_bytes
=
memtoll
(
argv
[
1
],
NULL
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"rename-command"
)
&&
argc
==
3
)
{
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"rename-command"
)
&&
argc
==
3
)
{
struct
redisCommand
*
cmd
=
lookupCommand
(
argv
[
1
]);
struct
redisCommand
*
cmd
=
lookupCommand
(
argv
[
1
]);
int
retval
;
int
retval
;
...
@@ -643,80 +459,6 @@ void loadServerConfigFromString(char *config) {
...
@@ -643,80 +459,6 @@ void loadServerConfigFromString(char *config) {
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"cluster-config-file"
)
&&
argc
==
2
)
{
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"cluster-config-file"
)
&&
argc
==
2
)
{
zfree
(
server
.
cluster_configfile
);
zfree
(
server
.
cluster_configfile
);
server
.
cluster_configfile
=
zstrdup
(
argv
[
1
]);
server
.
cluster_configfile
=
zstrdup
(
argv
[
1
]);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"cluster-announce-ip"
)
&&
argc
==
2
)
{
zfree
(
server
.
cluster_announce_ip
);
server
.
cluster_announce_ip
=
zstrdup
(
argv
[
1
]);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"cluster-announce-port"
)
&&
argc
==
2
)
{
server
.
cluster_announce_port
=
atoi
(
argv
[
1
]);
if
(
server
.
cluster_announce_port
<
0
||
server
.
cluster_announce_port
>
65535
)
{
err
=
"Invalid port"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"cluster-announce-bus-port"
)
&&
argc
==
2
)
{
server
.
cluster_announce_bus_port
=
atoi
(
argv
[
1
]);
if
(
server
.
cluster_announce_bus_port
<
0
||
server
.
cluster_announce_bus_port
>
65535
)
{
err
=
"Invalid port"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"cluster-node-timeout"
)
&&
argc
==
2
)
{
server
.
cluster_node_timeout
=
strtoll
(
argv
[
1
],
NULL
,
10
);
if
(
server
.
cluster_node_timeout
<=
0
)
{
err
=
"cluster node timeout must be 1 or greater"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"cluster-migration-barrier"
)
&&
argc
==
2
)
{
server
.
cluster_migration_barrier
=
atoi
(
argv
[
1
]);
if
(
server
.
cluster_migration_barrier
<
0
)
{
err
=
"cluster migration barrier must zero or positive"
;
goto
loaderr
;
}
}
else
if
((
!
strcasecmp
(
argv
[
0
],
"cluster-slave-validity-factor"
)
||
!
strcasecmp
(
argv
[
0
],
"cluster-replica-validity-factor"
))
&&
argc
==
2
)
{
server
.
cluster_slave_validity_factor
=
atoi
(
argv
[
1
]);
if
(
server
.
cluster_slave_validity_factor
<
0
)
{
err
=
"cluster replica validity factor must be zero or positive"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"lua-time-limit"
)
&&
argc
==
2
)
{
server
.
lua_time_limit
=
strtoll
(
argv
[
1
],
NULL
,
10
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"lua-replicate-commands"
)
&&
argc
==
2
)
{
server
.
lua_always_replicate_commands
=
yesnotoi
(
argv
[
1
]);
if
(
server
.
lua_always_replicate_commands
==
-
1
)
{
err
=
"argument must be 'yes' or 'no'"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"slowlog-log-slower-than"
)
&&
argc
==
2
)
{
server
.
slowlog_log_slower_than
=
strtoll
(
argv
[
1
],
NULL
,
10
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"latency-monitor-threshold"
)
&&
argc
==
2
)
{
server
.
latency_monitor_threshold
=
strtoll
(
argv
[
1
],
NULL
,
10
);
if
(
server
.
latency_monitor_threshold
<
0
)
{
err
=
"The latency threshold can't be negative"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"slowlog-max-len"
)
&&
argc
==
2
)
{
server
.
slowlog_max_len
=
strtoll
(
argv
[
1
],
NULL
,
10
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"tracking-table-max-fill"
)
&&
argc
==
2
)
{
server
.
tracking_table_max_fill
=
strtoll
(
argv
[
1
],
NULL
,
10
);
if
(
server
.
tracking_table_max_fill
>
100
||
server
.
tracking_table_max_fill
<
0
)
{
err
=
"The tracking table fill percentage must be an "
"integer between 0 and 100"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"client-output-buffer-limit"
)
&&
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"client-output-buffer-limit"
)
&&
argc
==
5
)
argc
==
5
)
{
{
...
@@ -739,24 +481,6 @@ void loadServerConfigFromString(char *config) {
...
@@ -739,24 +481,6 @@ void loadServerConfigFromString(char *config) {
server
.
client_obuf_limits
[
class
].
hard_limit_bytes
=
hard
;
server
.
client_obuf_limits
[
class
].
hard_limit_bytes
=
hard
;
server
.
client_obuf_limits
[
class
].
soft_limit_bytes
=
soft
;
server
.
client_obuf_limits
[
class
].
soft_limit_bytes
=
soft
;
server
.
client_obuf_limits
[
class
].
soft_limit_seconds
=
soft_seconds
;
server
.
client_obuf_limits
[
class
].
soft_limit_seconds
=
soft_seconds
;
}
else
if
((
!
strcasecmp
(
argv
[
0
],
"slave-priority"
)
||
!
strcasecmp
(
argv
[
0
],
"replica-priority"
))
&&
argc
==
2
)
{
server
.
slave_priority
=
atoi
(
argv
[
1
]);
}
else
if
((
!
strcasecmp
(
argv
[
0
],
"slave-announce-ip"
)
||
!
strcasecmp
(
argv
[
0
],
"replica-announce-ip"
))
&&
argc
==
2
)
{
zfree
(
server
.
slave_announce_ip
);
server
.
slave_announce_ip
=
zstrdup
(
argv
[
1
]);
}
else
if
((
!
strcasecmp
(
argv
[
0
],
"slave-announce-port"
)
||
!
strcasecmp
(
argv
[
0
],
"replica-announce-port"
))
&&
argc
==
2
)
{
server
.
slave_announce_port
=
atoi
(
argv
[
1
]);
if
(
server
.
slave_announce_port
<
0
||
server
.
slave_announce_port
>
65535
)
{
err
=
"Invalid port"
;
goto
loaderr
;
}
}
else
if
((
!
strcasecmp
(
argv
[
0
],
"min-slaves-to-write"
)
||
}
else
if
((
!
strcasecmp
(
argv
[
0
],
"min-slaves-to-write"
)
||
!
strcasecmp
(
argv
[
0
],
"min-replicas-to-write"
))
&&
argc
==
2
)
!
strcasecmp
(
argv
[
0
],
"min-replicas-to-write"
))
&&
argc
==
2
)
{
{
...
@@ -779,15 +503,6 @@ void loadServerConfigFromString(char *config) {
...
@@ -779,15 +503,6 @@ void loadServerConfigFromString(char *config) {
goto
loaderr
;
goto
loaderr
;
}
}
server
.
notify_keyspace_events
=
flags
;
server
.
notify_keyspace_events
=
flags
;
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"supervised"
)
&&
argc
==
2
)
{
server
.
supervised_mode
=
configEnumGetValue
(
supervised_mode_enum
,
argv
[
1
]);
if
(
server
.
supervised_mode
==
INT_MIN
)
{
err
=
"Invalid option for 'supervised'. "
"Allowed values: 'upstart', 'systemd', 'auto', or 'no'"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"user"
)
&&
argc
>=
2
)
{
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"user"
)
&&
argc
>=
2
)
{
int
argc_err
;
int
argc_err
;
if
(
ACLAppendUserForLoading
(
argv
,
argc
,
&
argc_err
)
==
C_ERR
)
{
if
(
ACLAppendUserForLoading
(
argv
,
argc
,
&
argc_err
)
==
C_ERR
)
{
...
@@ -935,17 +650,11 @@ void loadServerConfig(char *filename, char *options) {
...
@@ -935,17 +650,11 @@ void loadServerConfig(char *filename, char *options) {
if (err || ll < 0) goto badfmt; \
if (err || ll < 0) goto badfmt; \
_var = ll;
_var = ll;
#define config_set_enum_field(_name,_var,_enumvar) \
} else if (!strcasecmp(c->argv[2]->ptr,_name)) { \
int enumval = configEnumGetValue(_enumvar,o->ptr); \
if (enumval == INT_MIN) goto badfmt; \
_var = enumval;
#define config_set_special_field(_name) \
#define config_set_special_field(_name) \
} else if (!strcasecmp(c->argv[2]->ptr,_name)) {
} else if (!strcasecmp(c->argv[2]->ptr,_name)) {
#define config_set_special_field_with_alias(_name
1
,_name2) \
#define config_set_special_field_with_alias(_name,_name2) \
} else if (!strcasecmp(c->argv[2]->ptr,_name
1
) || \
} else if (!strcasecmp(c->argv[2]->ptr,_name) || \
!strcasecmp(c->argv[2]->ptr,_name2)) {
!strcasecmp(c->argv[2]->ptr,_name2)) {
#define config_set_else } else
#define config_set_else } else
...
@@ -959,13 +668,13 @@ void configSetCommand(client *c) {
...
@@ -959,13 +668,13 @@ void configSetCommand(client *c) {
o
=
c
->
argv
[
3
];
o
=
c
->
argv
[
3
];
/* Iterate the configs that are standard */
/* Iterate the configs that are standard */
for
(
configYesNo
*
config
=
configs
_yesno
;
config
->
name
!=
NULL
;
config
++
)
{
for
(
standardConfig
*
config
=
configs
;
config
->
name
!=
NULL
;
config
++
)
{
if
(
config
->
modifiable
&&
(
!
strcasecmp
(
c
->
argv
[
2
]
->
ptr
,
config
->
name
)
||
if
(
config
->
modifiable
&&
(
!
strcasecmp
(
c
->
argv
[
2
]
->
ptr
,
config
->
name
)
||
(
config
->
alias
&&
!
strcasecmp
(
c
->
argv
[
2
]
->
ptr
,
config
->
alias
))))
(
config
->
alias
&&
!
strcasecmp
(
c
->
argv
[
2
]
->
ptr
,
config
->
alias
))))
{
{
i
nt
yn
=
yesnotoi
(
o
->
ptr
)
;
i
f
(
!
config
->
interface
.
set
(
config
->
data
,
o
->
ptr
)
)
{
if
(
yn
==
-
1
)
goto
badfmt
;
goto
badfmt
;
*
(
config
->
config
)
=
yn
;
}
addReply
(
c
,
shared
.
ok
);
addReply
(
c
,
shared
.
ok
);
return
;
return
;
}
}
...
@@ -989,15 +698,6 @@ void configSetCommand(client *c) {
...
@@ -989,15 +698,6 @@ void configSetCommand(client *c) {
sds
aclop
=
sdscatprintf
(
sdsempty
(),
">%s"
,(
char
*
)
o
->
ptr
);
sds
aclop
=
sdscatprintf
(
sdsempty
(),
">%s"
,(
char
*
)
o
->
ptr
);
ACLSetUser
(
DefaultUser
,
aclop
,
sdslen
(
aclop
));
ACLSetUser
(
DefaultUser
,
aclop
,
sdslen
(
aclop
));
sdsfree
(
aclop
);
sdsfree
(
aclop
);
}
config_set_special_field
(
"masteruser"
)
{
zfree
(
server
.
masteruser
);
server
.
masteruser
=
((
char
*
)
o
->
ptr
)[
0
]
?
zstrdup
(
o
->
ptr
)
:
NULL
;
}
config_set_special_field
(
"masterauth"
)
{
zfree
(
server
.
masterauth
);
server
.
masterauth
=
((
char
*
)
o
->
ptr
)[
0
]
?
zstrdup
(
o
->
ptr
)
:
NULL
;
}
config_set_special_field
(
"cluster-announce-ip"
)
{
zfree
(
server
.
cluster_announce_ip
);
server
.
cluster_announce_ip
=
((
char
*
)
o
->
ptr
)[
0
]
?
zstrdup
(
o
->
ptr
)
:
NULL
;
}
config_set_special_field
(
"maxclients"
)
{
}
config_set_special_field
(
"maxclients"
)
{
int
orig_value
=
server
.
maxclients
;
int
orig_value
=
server
.
maxclients
;
...
@@ -1128,12 +828,6 @@ void configSetCommand(client *c) {
...
@@ -1128,12 +828,6 @@ void configSetCommand(client *c) {
if
(
flags
==
-
1
)
goto
badfmt
;
if
(
flags
==
-
1
)
goto
badfmt
;
server
.
notify_keyspace_events
=
flags
;
server
.
notify_keyspace_events
=
flags
;
}
config_set_special_field_with_alias
(
"slave-announce-ip"
,
"replica-announce-ip"
)
{
zfree
(
server
.
slave_announce_ip
);
server
.
slave_announce_ip
=
((
char
*
)
o
->
ptr
)[
0
]
?
zstrdup
(
o
->
ptr
)
:
NULL
;
/* Boolean fields.
/* Boolean fields.
* config_set_bool_field(name,var). */
* config_set_bool_field(name,var). */
}
config_set_bool_field
(
}
config_set_bool_field
(
...
@@ -1151,86 +845,8 @@ void configSetCommand(client *c) {
...
@@ -1151,86 +845,8 @@ void configSetCommand(client *c) {
#endif
#endif
/* Numerical fields.
/* Numerical fields.
* config_set_numerical_field(name,var,min,max) */
* config_set_numerical_field(name,var,min,max) */
}
config_set_numerical_field
(
"tcp-keepalive"
,
server
.
tcpkeepalive
,
0
,
INT_MAX
)
{
}
config_set_numerical_field
(
"maxmemory-samples"
,
server
.
maxmemory_samples
,
1
,
INT_MAX
)
{
}
config_set_numerical_field
(
"lfu-log-factor"
,
server
.
lfu_log_factor
,
0
,
INT_MAX
)
{
}
config_set_numerical_field
(
"lfu-decay-time"
,
server
.
lfu_decay_time
,
0
,
INT_MAX
)
{
}
config_set_numerical_field
(
"timeout"
,
server
.
maxidletime
,
0
,
INT_MAX
)
{
}
config_set_numerical_field
(
"active-defrag-threshold-lower"
,
server
.
active_defrag_threshold_lower
,
0
,
1000
)
{
}
config_set_numerical_field
(
"active-defrag-threshold-upper"
,
server
.
active_defrag_threshold_upper
,
0
,
1000
)
{
}
config_set_memory_field
(
"active-defrag-ignore-bytes"
,
server
.
active_defrag_ignore_bytes
)
{
}
config_set_numerical_field
(
"active-defrag-cycle-min"
,
server
.
active_defrag_cycle_min
,
1
,
99
)
{
}
config_set_numerical_field
(
"active-defrag-cycle-max"
,
server
.
active_defrag_cycle_max
,
1
,
99
)
{
}
config_set_numerical_field
(
"active-defrag-max-scan-fields"
,
server
.
active_defrag_max_scan_fields
,
1
,
LONG_MAX
)
{
}
config_set_numerical_field
(
"active-expire-effort"
,
server
.
active_expire_effort
,
1
,
10
)
{
}
config_set_numerical_field
(
"auto-aof-rewrite-percentage"
,
server
.
aof_rewrite_perc
,
0
,
INT_MAX
){
}
config_set_numerical_field
(
"hash-max-ziplist-entries"
,
server
.
hash_max_ziplist_entries
,
0
,
LONG_MAX
)
{
}
config_set_numerical_field
(
"hash-max-ziplist-value"
,
server
.
hash_max_ziplist_value
,
0
,
LONG_MAX
)
{
}
config_set_numerical_field
(
"stream-node-max-bytes"
,
server
.
stream_node_max_bytes
,
0
,
LONG_MAX
)
{
}
config_set_numerical_field
(
"stream-node-max-entries"
,
server
.
stream_node_max_entries
,
0
,
LLONG_MAX
)
{
}
config_set_numerical_field
(
"list-max-ziplist-size"
,
server
.
list_max_ziplist_size
,
INT_MIN
,
INT_MAX
)
{
}
config_set_numerical_field
(
"list-compress-depth"
,
server
.
list_compress_depth
,
0
,
INT_MAX
)
{
}
config_set_numerical_field
(
"set-max-intset-entries"
,
server
.
set_max_intset_entries
,
0
,
LONG_MAX
)
{
}
config_set_numerical_field
(
"zset-max-ziplist-entries"
,
server
.
zset_max_ziplist_entries
,
0
,
LONG_MAX
)
{
}
config_set_numerical_field
(
"zset-max-ziplist-value"
,
server
.
zset_max_ziplist_value
,
0
,
LONG_MAX
)
{
}
config_set_numerical_field
(
"hll-sparse-max-bytes"
,
server
.
hll_sparse_max_bytes
,
0
,
LONG_MAX
)
{
}
config_set_numerical_field
(
"lua-time-limit"
,
server
.
lua_time_limit
,
0
,
LONG_MAX
)
{
}
config_set_numerical_field
(
"slowlog-log-slower-than"
,
server
.
slowlog_log_slower_than
,
-
1
,
LLONG_MAX
)
{
}
config_set_numerical_field
(
"slowlog-max-len"
,
ll
,
0
,
LONG_MAX
)
{
/* Cast to unsigned. */
server
.
slowlog_max_len
=
(
unsigned
long
)
ll
;
}
config_set_numerical_field
(
"tracking-table-max-fill"
,
server
.
tracking_table_max_fill
,
0
,
100
)
{
}
config_set_numerical_field
(
"latency-monitor-threshold"
,
server
.
latency_monitor_threshold
,
0
,
LLONG_MAX
){
}
config_set_numerical_field
(
"repl-ping-slave-period"
,
server
.
repl_ping_slave_period
,
1
,
INT_MAX
)
{
}
config_set_numerical_field
(
"repl-ping-replica-period"
,
server
.
repl_ping_slave_period
,
1
,
INT_MAX
)
{
}
config_set_numerical_field
(
"repl-timeout"
,
server
.
repl_timeout
,
1
,
INT_MAX
)
{
}
config_set_numerical_field
(
}
config_set_numerical_field
(
"repl-backlog-ttl"
,
server
.
repl_backlog_time_limit
,
0
,
LONG_MAX
)
{
"repl-backlog-ttl"
,
server
.
repl_backlog_time_limit
,
0
,
LONG_MAX
)
{
}
config_set_numerical_field
(
"repl-diskless-sync-delay"
,
server
.
repl_diskless_sync_delay
,
0
,
INT_MAX
)
{
}
config_set_numerical_field
(
"slave-priority"
,
server
.
slave_priority
,
0
,
INT_MAX
)
{
}
config_set_numerical_field
(
"replica-priority"
,
server
.
slave_priority
,
0
,
INT_MAX
)
{
}
config_set_numerical_field
(
"rdb-key-save-delay"
,
server
.
rdb_key_save_delay
,
0
,
LLONG_MAX
)
{
}
config_set_numerical_field
(
"key-load-delay"
,
server
.
key_load_delay
,
0
,
LLONG_MAX
)
{
}
config_set_numerical_field
(
"slave-announce-port"
,
server
.
slave_announce_port
,
0
,
65535
)
{
}
config_set_numerical_field
(
"replica-announce-port"
,
server
.
slave_announce_port
,
0
,
65535
)
{
}
config_set_numerical_field
(
}
config_set_numerical_field
(
"min-slaves-to-write"
,
server
.
repl_min_slaves_to_write
,
0
,
INT_MAX
)
{
"min-slaves-to-write"
,
server
.
repl_min_slaves_to_write
,
0
,
INT_MAX
)
{
refreshGoodSlavesCount
();
refreshGoodSlavesCount
();
...
@@ -1243,18 +859,6 @@ void configSetCommand(client *c) {
...
@@ -1243,18 +859,6 @@ void configSetCommand(client *c) {
}
config_set_numerical_field
(
}
config_set_numerical_field
(
"min-replicas-max-lag"
,
server
.
repl_min_slaves_max_lag
,
0
,
INT_MAX
)
{
"min-replicas-max-lag"
,
server
.
repl_min_slaves_max_lag
,
0
,
INT_MAX
)
{
refreshGoodSlavesCount
();
refreshGoodSlavesCount
();
}
config_set_numerical_field
(
"cluster-node-timeout"
,
server
.
cluster_node_timeout
,
0
,
LLONG_MAX
)
{
}
config_set_numerical_field
(
"cluster-announce-port"
,
server
.
cluster_announce_port
,
0
,
65535
)
{
}
config_set_numerical_field
(
"cluster-announce-bus-port"
,
server
.
cluster_announce_bus_port
,
0
,
65535
)
{
}
config_set_numerical_field
(
"cluster-migration-barrier"
,
server
.
cluster_migration_barrier
,
0
,
INT_MAX
){
}
config_set_numerical_field
(
"cluster-slave-validity-factor"
,
server
.
cluster_slave_validity_factor
,
0
,
INT_MAX
)
{
}
config_set_numerical_field
(
"cluster-replica-validity-factor"
,
server
.
cluster_slave_validity_factor
,
0
,
INT_MAX
)
{
}
config_set_numerical_field
(
}
config_set_numerical_field
(
"hz"
,
server
.
config_hz
,
0
,
INT_MAX
)
{
"hz"
,
server
.
config_hz
,
0
,
INT_MAX
)
{
/* Hz is more an hint from the user, so we accept values out of range
/* Hz is more an hint from the user, so we accept values out of range
...
@@ -1267,7 +871,6 @@ void configSetCommand(client *c) {
...
@@ -1267,7 +871,6 @@ void configSetCommand(client *c) {
enableWatchdog
(
ll
);
enableWatchdog
(
ll
);
else
else
disableWatchdog
();
disableWatchdog
();
/* Memory fields.
/* Memory fields.
* config_set_memory_field(name,var) */
* config_set_memory_field(name,var) */
}
config_set_memory_field
(
"maxmemory"
,
server
.
maxmemory
)
{
}
config_set_memory_field
(
"maxmemory"
,
server
.
maxmemory
)
{
...
@@ -1277,25 +880,10 @@ void configSetCommand(client *c) {
...
@@ -1277,25 +880,10 @@ void configSetCommand(client *c) {
}
}
freeMemoryIfNeededAndSafe
();
freeMemoryIfNeededAndSafe
();
}
}
}
config_set_memory_field
(
"proto-max-bulk-len"
,
server
.
proto_max_bulk_len
)
{
}
config_set_memory_field
(
}
config_set_memory_field
(
"client-query-buffer-limit"
,
server
.
client_max_querybuf_len
)
{
"client-query-buffer-limit"
,
server
.
client_max_querybuf_len
)
{
}
config_set_memory_field
(
"repl-backlog-size"
,
ll
)
{
}
config_set_memory_field
(
"repl-backlog-size"
,
ll
)
{
resizeReplicationBacklog
(
ll
);
resizeReplicationBacklog
(
ll
);
}
config_set_memory_field
(
"auto-aof-rewrite-min-size"
,
ll
)
{
server
.
aof_rewrite_min_size
=
ll
;
/* Enumeration fields.
* config_set_enum_field(name,var,enum_var) */
}
config_set_enum_field
(
"loglevel"
,
server
.
verbosity
,
loglevel_enum
)
{
}
config_set_enum_field
(
"maxmemory-policy"
,
server
.
maxmemory_policy
,
maxmemory_policy_enum
)
{
}
config_set_enum_field
(
"appendfsync"
,
server
.
aof_fsync
,
aof_fsync_enum
)
{
}
config_set_enum_field
(
"repl-diskless-load"
,
server
.
repl_diskless_load
,
repl_diskless_load_enum
)
{
#ifdef USE_OPENSSL
#ifdef USE_OPENSSL
/* TLS fields. */
/* TLS fields. */
}
config_set_special_field
(
"tls-cert-file"
)
{
}
config_set_special_field
(
"tls-cert-file"
)
{
...
@@ -1436,13 +1024,6 @@ badfmt: /* Bad format errors */
...
@@ -1436,13 +1024,6 @@ badfmt: /* Bad format errors */
} \
} \
} while(0);
} while(0);
#define config_get_enum_field(_name,_var,_enumvar) do { \
if (stringmatch(pattern,_name,1)) { \
addReplyBulkCString(c,_name); \
addReplyBulkCString(c,configEnumGetNameOrUnknown(_enumvar,_var)); \
matches++; \
} \
} while(0);
void
configGetCommand
(
client
*
c
)
{
void
configGetCommand
(
client
*
c
)
{
robj
*
o
=
c
->
argv
[
2
];
robj
*
o
=
c
->
argv
[
2
];
...
@@ -1452,17 +1033,23 @@ void configGetCommand(client *c) {
...
@@ -1452,17 +1033,23 @@ void configGetCommand(client *c) {
int
matches
=
0
;
int
matches
=
0
;
serverAssertWithInfo
(
c
,
o
,
sdsEncodedObject
(
o
));
serverAssertWithInfo
(
c
,
o
,
sdsEncodedObject
(
o
));
/* Iterate the configs that are standard */
for
(
standardConfig
*
config
=
configs
;
config
->
name
!=
NULL
;
config
++
)
{
if
(
stringmatch
(
pattern
,
config
->
name
,
1
))
{
addReplyBulkCString
(
c
,
config
->
name
);
config
->
interface
.
get
(
c
,
config
->
data
);
matches
++
;
}
if
(
config
->
alias
&&
stringmatch
(
pattern
,
config
->
alias
,
1
))
{
addReplyBulkCString
(
c
,
config
->
alias
);
config
->
interface
.
get
(
c
,
config
->
data
);
matches
++
;
}
}
/* String values */
/* String values */
config_get_string_field
(
"dbfilename"
,
server
.
rdb_filename
);
config_get_string_field
(
"dbfilename"
,
server
.
rdb_filename
);
config_get_string_field
(
"masteruser"
,
server
.
masteruser
);
config_get_string_field
(
"masterauth"
,
server
.
masterauth
);
config_get_string_field
(
"cluster-announce-ip"
,
server
.
cluster_announce_ip
);
config_get_string_field
(
"unixsocket"
,
server
.
unixsocket
);
config_get_string_field
(
"logfile"
,
server
.
logfile
);
config_get_string_field
(
"logfile"
,
server
.
logfile
);
config_get_string_field
(
"aclfile"
,
server
.
acl_filename
);
config_get_string_field
(
"pidfile"
,
server
.
pidfile
);
config_get_string_field
(
"slave-announce-ip"
,
server
.
slave_announce_ip
);
config_get_string_field
(
"replica-announce-ip"
,
server
.
slave_announce_ip
);
#ifdef USE_OPENSSL
#ifdef USE_OPENSSL
config_get_string_field
(
"tls-cert-file"
,
server
.
tls_ctx_config
.
cert_file
);
config_get_string_field
(
"tls-cert-file"
,
server
.
tls_ctx_config
.
cert_file
);
config_get_string_field
(
"tls-key-file"
,
server
.
tls_ctx_config
.
key_file
);
config_get_string_field
(
"tls-key-file"
,
server
.
tls_ctx_config
.
key_file
);
...
@@ -1476,110 +1063,25 @@ void configGetCommand(client *c) {
...
@@ -1476,110 +1063,25 @@ void configGetCommand(client *c) {
/* Numerical values */
/* Numerical values */
config_get_numerical_field
(
"maxmemory"
,
server
.
maxmemory
);
config_get_numerical_field
(
"maxmemory"
,
server
.
maxmemory
);
config_get_numerical_field
(
"proto-max-bulk-len"
,
server
.
proto_max_bulk_len
);
config_get_numerical_field
(
"client-query-buffer-limit"
,
server
.
client_max_querybuf_len
);
config_get_numerical_field
(
"client-query-buffer-limit"
,
server
.
client_max_querybuf_len
);
config_get_numerical_field
(
"maxmemory-samples"
,
server
.
maxmemory_samples
);
config_get_numerical_field
(
"lfu-log-factor"
,
server
.
lfu_log_factor
);
config_get_numerical_field
(
"lfu-decay-time"
,
server
.
lfu_decay_time
);
config_get_numerical_field
(
"timeout"
,
server
.
maxidletime
);
config_get_numerical_field
(
"active-defrag-threshold-lower"
,
server
.
active_defrag_threshold_lower
);
config_get_numerical_field
(
"active-defrag-threshold-upper"
,
server
.
active_defrag_threshold_upper
);
config_get_numerical_field
(
"active-defrag-ignore-bytes"
,
server
.
active_defrag_ignore_bytes
);
config_get_numerical_field
(
"active-defrag-cycle-min"
,
server
.
active_defrag_cycle_min
);
config_get_numerical_field
(
"active-defrag-cycle-max"
,
server
.
active_defrag_cycle_max
);
config_get_numerical_field
(
"active-defrag-max-scan-fields"
,
server
.
active_defrag_max_scan_fields
);
config_get_numerical_field
(
"active-expire-effort"
,
server
.
active_expire_effort
);
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-ziplist-entries"
,
server
.
hash_max_ziplist_entries
);
config_get_numerical_field
(
"hash-max-ziplist-value"
,
server
.
hash_max_ziplist_value
);
config_get_numerical_field
(
"stream-node-max-bytes"
,
server
.
stream_node_max_bytes
);
config_get_numerical_field
(
"stream-node-max-entries"
,
server
.
stream_node_max_entries
);
config_get_numerical_field
(
"list-max-ziplist-size"
,
server
.
list_max_ziplist_size
);
config_get_numerical_field
(
"list-compress-depth"
,
server
.
list_compress_depth
);
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
(
"hll-sparse-max-bytes"
,
server
.
hll_sparse_max_bytes
);
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
(
"latency-monitor-threshold"
,
server
.
latency_monitor_threshold
);
config_get_numerical_field
(
"slowlog-max-len"
,
server
.
slowlog_max_len
);
config_get_numerical_field
(
"tracking-table-max-fill"
,
server
.
tracking_table_max_fill
);
config_get_numerical_field
(
"port"
,
server
.
port
);
config_get_numerical_field
(
"tls-port"
,
server
.
tls_port
);
config_get_numerical_field
(
"tls-port"
,
server
.
tls_port
);
config_get_numerical_field
(
"cluster-announce-port"
,
server
.
cluster_announce_port
);
config_get_numerical_field
(
"cluster-announce-bus-port"
,
server
.
cluster_announce_bus_port
);
config_get_numerical_field
(
"tcp-backlog"
,
server
.
tcp_backlog
);
config_get_numerical_field
(
"databases"
,
server
.
dbnum
);
config_get_numerical_field
(
"io-threads"
,
server
.
io_threads_num
);
config_get_numerical_field
(
"repl-ping-slave-period"
,
server
.
repl_ping_slave_period
);
config_get_numerical_field
(
"repl-ping-replica-period"
,
server
.
repl_ping_slave_period
);
config_get_numerical_field
(
"repl-timeout"
,
server
.
repl_timeout
);
config_get_numerical_field
(
"repl-backlog-size"
,
server
.
repl_backlog_size
);
config_get_numerical_field
(
"repl-backlog-size"
,
server
.
repl_backlog_size
);
config_get_numerical_field
(
"repl-backlog-ttl"
,
server
.
repl_backlog_time_limit
);
config_get_numerical_field
(
"repl-backlog-ttl"
,
server
.
repl_backlog_time_limit
);
config_get_numerical_field
(
"maxclients"
,
server
.
maxclients
);
config_get_numerical_field
(
"maxclients"
,
server
.
maxclients
);
config_get_numerical_field
(
"watchdog-period"
,
server
.
watchdog_period
);
config_get_numerical_field
(
"watchdog-period"
,
server
.
watchdog_period
);
config_get_numerical_field
(
"slave-priority"
,
server
.
slave_priority
);
config_get_numerical_field
(
"replica-priority"
,
server
.
slave_priority
);
config_get_numerical_field
(
"slave-announce-port"
,
server
.
slave_announce_port
);
config_get_numerical_field
(
"replica-announce-port"
,
server
.
slave_announce_port
);
config_get_numerical_field
(
"min-slaves-to-write"
,
server
.
repl_min_slaves_to_write
);
config_get_numerical_field
(
"min-slaves-to-write"
,
server
.
repl_min_slaves_to_write
);
config_get_numerical_field
(
"min-replicas-to-write"
,
server
.
repl_min_slaves_to_write
);
config_get_numerical_field
(
"min-replicas-to-write"
,
server
.
repl_min_slaves_to_write
);
config_get_numerical_field
(
"min-slaves-max-lag"
,
server
.
repl_min_slaves_max_lag
);
config_get_numerical_field
(
"min-slaves-max-lag"
,
server
.
repl_min_slaves_max_lag
);
config_get_numerical_field
(
"min-replicas-max-lag"
,
server
.
repl_min_slaves_max_lag
);
config_get_numerical_field
(
"min-replicas-max-lag"
,
server
.
repl_min_slaves_max_lag
);
config_get_numerical_field
(
"hz"
,
server
.
config_hz
);
config_get_numerical_field
(
"hz"
,
server
.
config_hz
);
config_get_numerical_field
(
"cluster-node-timeout"
,
server
.
cluster_node_timeout
);
config_get_numerical_field
(
"cluster-migration-barrier"
,
server
.
cluster_migration_barrier
);
config_get_numerical_field
(
"cluster-slave-validity-factor"
,
server
.
cluster_slave_validity_factor
);
config_get_numerical_field
(
"cluster-replica-validity-factor"
,
server
.
cluster_slave_validity_factor
);
config_get_numerical_field
(
"repl-diskless-sync-delay"
,
server
.
repl_diskless_sync_delay
);
config_get_numerical_field
(
"rdb-key-save-delay"
,
server
.
rdb_key_save_delay
);
config_get_numerical_field
(
"key-load-delay"
,
server
.
key_load_delay
);
config_get_numerical_field
(
"tcp-keepalive"
,
server
.
tcpkeepalive
);
/* Bool (yes/no) values */
/* Bool (yes/no) values */
/* Iterate the configs that are standard */
for
(
configYesNo
*
config
=
configs_yesno
;
config
->
name
!=
NULL
;
config
++
)
{
config_get_bool_field
(
config
->
name
,
*
(
config
->
config
));
if
(
config
->
alias
)
{
config_get_bool_field
(
config
->
alias
,
*
(
config
->
config
));
}
}
config_get_bool_field
(
"activedefrag"
,
server
.
active_defrag_enabled
);
config_get_bool_field
(
"activedefrag"
,
server
.
active_defrag_enabled
);
config_get_bool_field
(
"tls-cluster"
,
server
.
tls_cluster
);
config_get_bool_field
(
"tls-cluster"
,
server
.
tls_cluster
);
config_get_bool_field
(
"tls-replication"
,
server
.
tls_replication
);
config_get_bool_field
(
"tls-replication"
,
server
.
tls_replication
);
config_get_bool_field
(
"tls-auth-clients"
,
server
.
tls_auth_clients
);
config_get_bool_field
(
"tls-auth-clients"
,
server
.
tls_auth_clients
);
config_get_bool_field
(
"tls-prefer-server-ciphers"
,
config_get_bool_field
(
"tls-prefer-server-ciphers"
,
server
.
tls_ctx_config
.
prefer_server_ciphers
);
server
.
tls_ctx_config
.
prefer_server_ciphers
);
/* Enum values */
config_get_enum_field
(
"maxmemory-policy"
,
server
.
maxmemory_policy
,
maxmemory_policy_enum
);
config_get_enum_field
(
"loglevel"
,
server
.
verbosity
,
loglevel_enum
);
config_get_enum_field
(
"supervised"
,
server
.
supervised_mode
,
supervised_mode_enum
);
config_get_enum_field
(
"appendfsync"
,
server
.
aof_fsync
,
aof_fsync_enum
);
config_get_enum_field
(
"syslog-facility"
,
server
.
syslog_facility
,
syslog_facility_enum
);
config_get_enum_field
(
"repl-diskless-load"
,
server
.
repl_diskless_load
,
repl_diskless_load_enum
);
/* Everything we can't handle with macros follows. */
/* Everything we can't handle with macros follows. */
...
@@ -1900,7 +1402,7 @@ int rewriteConfigFormatMemory(char *buf, size_t len, long long bytes) {
...
@@ -1900,7 +1402,7 @@ int rewriteConfigFormatMemory(char *buf, size_t len, long long bytes) {
}
}
/* Rewrite a simple "option-name <bytes>" configuration option. */
/* Rewrite a simple "option-name <bytes>" configuration option. */
void
rewriteConfigBytesOption
(
struct
rewriteConfigState
*
state
,
char
*
option
,
long
long
value
,
long
long
defvalue
)
{
void
rewriteConfigBytesOption
(
struct
rewriteConfigState
*
state
,
const
char
*
option
,
long
long
value
,
long
long
defvalue
)
{
char
buf
[
64
];
char
buf
[
64
];
int
force
=
value
!=
defvalue
;
int
force
=
value
!=
defvalue
;
sds
line
;
sds
line
;
...
@@ -1920,7 +1422,7 @@ void rewriteConfigYesNoOption(struct rewriteConfigState *state, const char *opti
...
@@ -1920,7 +1422,7 @@ void rewriteConfigYesNoOption(struct rewriteConfigState *state, const char *opti
}
}
/* Rewrite a string option. */
/* Rewrite a string option. */
void
rewriteConfigStringOption
(
struct
rewriteConfigState
*
state
,
char
*
option
,
char
*
value
,
char
*
defvalue
)
{
void
rewriteConfigStringOption
(
struct
rewriteConfigState
*
state
,
const
char
*
option
,
char
*
value
,
const
char
*
defvalue
)
{
int
force
=
1
;
int
force
=
1
;
sds
line
;
sds
line
;
...
@@ -1942,7 +1444,7 @@ void rewriteConfigStringOption(struct rewriteConfigState *state, char *option, c
...
@@ -1942,7 +1444,7 @@ void rewriteConfigStringOption(struct rewriteConfigState *state, char *option, c
}
}
/* Rewrite a numerical (long long range) option. */
/* Rewrite a numerical (long long range) option. */
void
rewriteConfigNumericalOption
(
struct
rewriteConfigState
*
state
,
char
*
option
,
long
long
value
,
long
long
defvalue
)
{
void
rewriteConfigNumericalOption
(
struct
rewriteConfigState
*
state
,
const
char
*
option
,
long
long
value
,
long
long
defvalue
)
{
int
force
=
value
!=
defvalue
;
int
force
=
value
!=
defvalue
;
sds
line
=
sdscatprintf
(
sdsempty
(),
"%s %lld"
,
option
,
value
);
sds
line
=
sdscatprintf
(
sdsempty
(),
"%s %lld"
,
option
,
value
);
...
@@ -1960,7 +1462,7 @@ void rewriteConfigOctalOption(struct rewriteConfigState *state, char *option, in
...
@@ -1960,7 +1462,7 @@ void rewriteConfigOctalOption(struct rewriteConfigState *state, char *option, in
/* Rewrite an enumeration option. It takes as usually state and option name,
/* Rewrite an enumeration option. It takes as usually state and option name,
* and in addition the enumeration array and the default value for the
* and in addition the enumeration array and the default value for the
* option. */
* option. */
void
rewriteConfigEnumOption
(
struct
rewriteConfigState
*
state
,
char
*
option
,
int
value
,
configEnum
*
ce
,
int
defval
)
{
void
rewriteConfigEnumOption
(
struct
rewriteConfigState
*
state
,
const
char
*
option
,
int
value
,
configEnum
*
ce
,
int
defval
)
{
sds
line
;
sds
line
;
const
char
*
name
=
configEnumGetNameOrUnknown
(
ce
,
value
);
const
char
*
name
=
configEnumGetNameOrUnknown
(
ce
,
value
);
int
force
=
value
!=
defval
;
int
force
=
value
!=
defval
;
...
@@ -1969,18 +1471,6 @@ void rewriteConfigEnumOption(struct rewriteConfigState *state, char *option, int
...
@@ -1969,18 +1471,6 @@ void rewriteConfigEnumOption(struct rewriteConfigState *state, char *option, int
rewriteConfigRewriteLine
(
state
,
option
,
line
,
force
);
rewriteConfigRewriteLine
(
state
,
option
,
line
,
force
);
}
}
/* Rewrite the syslog-facility option. */
void
rewriteConfigSyslogfacilityOption
(
struct
rewriteConfigState
*
state
)
{
int
value
=
server
.
syslog_facility
;
int
force
=
value
!=
LOG_LOCAL0
;
const
char
*
name
=
NULL
,
*
option
=
"syslog-facility"
;
sds
line
;
name
=
configEnumGetNameOrUnknown
(
syslog_facility_enum
,
value
);
line
=
sdscatprintf
(
sdsempty
(),
"%s %s"
,
option
,
name
);
rewriteConfigRewriteLine
(
state
,
option
,
line
,
force
);
}
/* Rewrite the save option. */
/* Rewrite the save option. */
void
rewriteConfigSaveOption
(
struct
rewriteConfigState
*
state
)
{
void
rewriteConfigSaveOption
(
struct
rewriteConfigState
*
state
)
{
int
j
;
int
j
;
...
@@ -2282,95 +1772,35 @@ int rewriteConfig(char *path) {
...
@@ -2282,95 +1772,35 @@ int rewriteConfig(char *path) {
* the rewrite state. */
* the rewrite state. */
/* Iterate the configs that are standard */
/* Iterate the configs that are standard */
for
(
configYesNo
*
config
=
configs
_yesno
;
config
->
name
!=
NULL
;
config
++
)
{
for
(
standardConfig
*
config
=
configs
;
config
->
name
!=
NULL
;
config
++
)
{
rewriteConfigYesNoOption
(
state
,
config
->
name
,
*
(
config
->
config
),
config
->
default_valu
e
);
config
->
interface
.
rewrite
(
config
->
data
,
config
->
name
,
stat
e
);
}
}
rewriteConfigStringOption
(
state
,
"pidfile"
,
server
.
pidfile
,
CONFIG_DEFAULT_PID_FILE
);
rewriteConfigNumericalOption
(
state
,
"tls-port"
,
server
.
tls_port
,
CONFIG_DEFAULT_SERVER_TLS_PORT
);
rewriteConfigNumericalOption
(
state
,
"cluster-announce-port"
,
server
.
cluster_announce_port
,
CONFIG_DEFAULT_CLUSTER_ANNOUNCE_PORT
);
rewriteConfigNumericalOption
(
state
,
"cluster-announce-bus-port"
,
server
.
cluster_announce_bus_port
,
CONFIG_DEFAULT_CLUSTER_ANNOUNCE_BUS_PORT
);
rewriteConfigNumericalOption
(
state
,
"tcp-backlog"
,
server
.
tcp_backlog
,
CONFIG_DEFAULT_TCP_BACKLOG
);
rewriteConfigBindOption
(
state
);
rewriteConfigBindOption
(
state
);
rewriteConfigStringOption
(
state
,
"unixsocket"
,
server
.
unixsocket
,
NULL
);
rewriteConfigOctalOption
(
state
,
"unixsocketperm"
,
server
.
unixsocketperm
,
CONFIG_DEFAULT_UNIX_SOCKET_PERM
);
rewriteConfigOctalOption
(
state
,
"unixsocketperm"
,
server
.
unixsocketperm
,
CONFIG_DEFAULT_UNIX_SOCKET_PERM
);
rewriteConfigNumericalOption
(
state
,
"timeout"
,
server
.
maxidletime
,
CONFIG_DEFAULT_CLIENT_TIMEOUT
);
rewriteConfigNumericalOption
(
state
,
"tcp-keepalive"
,
server
.
tcpkeepalive
,
CONFIG_DEFAULT_TCP_KEEPALIVE
);
rewriteConfigNumericalOption
(
state
,
"replica-announce-port"
,
server
.
slave_announce_port
,
CONFIG_DEFAULT_SLAVE_ANNOUNCE_PORT
);
rewriteConfigEnumOption
(
state
,
"loglevel"
,
server
.
verbosity
,
loglevel_enum
,
CONFIG_DEFAULT_VERBOSITY
);
rewriteConfigStringOption
(
state
,
"logfile"
,
server
.
logfile
,
CONFIG_DEFAULT_LOGFILE
);
rewriteConfigStringOption
(
state
,
"logfile"
,
server
.
logfile
,
CONFIG_DEFAULT_LOGFILE
);
rewriteConfigStringOption
(
state
,
"aclfile"
,
server
.
acl_filename
,
CONFIG_DEFAULT_ACL_FILENAME
);
rewriteConfigYesNoOption
(
state
,
"syslog-enabled"
,
server
.
syslog_enabled
,
CONFIG_DEFAULT_SYSLOG_ENABLED
);
rewriteConfigYesNoOption
(
state
,
"syslog-enabled"
,
server
.
syslog_enabled
,
CONFIG_DEFAULT_SYSLOG_ENABLED
);
rewriteConfigStringOption
(
state
,
"syslog-ident"
,
server
.
syslog_ident
,
CONFIG_DEFAULT_SYSLOG_IDENT
);
rewriteConfigStringOption
(
state
,
"syslog-ident"
,
server
.
syslog_ident
,
CONFIG_DEFAULT_SYSLOG_IDENT
);
rewriteConfigSyslogfacilityOption
(
state
);
rewriteConfigSaveOption
(
state
);
rewriteConfigSaveOption
(
state
);
rewriteConfigUserOption
(
state
);
rewriteConfigUserOption
(
state
);
rewriteConfigNumericalOption
(
state
,
"databases"
,
server
.
dbnum
,
CONFIG_DEFAULT_DBNUM
);
rewriteConfigNumericalOption
(
state
,
"io-threads"
,
server
.
dbnum
,
CONFIG_DEFAULT_IO_THREADS_NUM
);
rewriteConfigStringOption
(
state
,
"dbfilename"
,
server
.
rdb_filename
,
CONFIG_DEFAULT_RDB_FILENAME
);
rewriteConfigStringOption
(
state
,
"dbfilename"
,
server
.
rdb_filename
,
CONFIG_DEFAULT_RDB_FILENAME
);
rewriteConfigDirOption
(
state
);
rewriteConfigDirOption
(
state
);
rewriteConfigSlaveofOption
(
state
,
"replicaof"
);
rewriteConfigSlaveofOption
(
state
,
"replicaof"
);
rewriteConfigStringOption
(
state
,
"replica-announce-ip"
,
server
.
slave_announce_ip
,
CONFIG_DEFAULT_SLAVE_ANNOUNCE_IP
);
rewriteConfigStringOption
(
state
,
"masteruser"
,
server
.
masteruser
,
NULL
);
rewriteConfigStringOption
(
state
,
"masterauth"
,
server
.
masterauth
,
NULL
);
rewriteConfigStringOption
(
state
,
"cluster-announce-ip"
,
server
.
cluster_announce_ip
,
NULL
);
rewriteConfigNumericalOption
(
state
,
"repl-ping-replica-period"
,
server
.
repl_ping_slave_period
,
CONFIG_DEFAULT_REPL_PING_SLAVE_PERIOD
);
rewriteConfigNumericalOption
(
state
,
"repl-timeout"
,
server
.
repl_timeout
,
CONFIG_DEFAULT_REPL_TIMEOUT
);
rewriteConfigBytesOption
(
state
,
"repl-backlog-size"
,
server
.
repl_backlog_size
,
CONFIG_DEFAULT_REPL_BACKLOG_SIZE
);
rewriteConfigBytesOption
(
state
,
"repl-backlog-size"
,
server
.
repl_backlog_size
,
CONFIG_DEFAULT_REPL_BACKLOG_SIZE
);
rewriteConfigBytesOption
(
state
,
"repl-backlog-ttl"
,
server
.
repl_backlog_time_limit
,
CONFIG_DEFAULT_REPL_BACKLOG_TIME_LIMIT
);
rewriteConfigBytesOption
(
state
,
"repl-backlog-ttl"
,
server
.
repl_backlog_time_limit
,
CONFIG_DEFAULT_REPL_BACKLOG_TIME_LIMIT
);
rewriteConfigEnumOption
(
state
,
"repl-diskless-load"
,
server
.
repl_diskless_load
,
repl_diskless_load_enum
,
CONFIG_DEFAULT_REPL_DISKLESS_LOAD
);
rewriteConfigNumericalOption
(
state
,
"repl-diskless-sync-delay"
,
server
.
repl_diskless_sync_delay
,
CONFIG_DEFAULT_REPL_DISKLESS_SYNC_DELAY
);
rewriteConfigNumericalOption
(
state
,
"replica-priority"
,
server
.
slave_priority
,
CONFIG_DEFAULT_SLAVE_PRIORITY
);
rewriteConfigNumericalOption
(
state
,
"min-replicas-to-write"
,
server
.
repl_min_slaves_to_write
,
CONFIG_DEFAULT_MIN_SLAVES_TO_WRITE
);
rewriteConfigNumericalOption
(
state
,
"min-replicas-max-lag"
,
server
.
repl_min_slaves_max_lag
,
CONFIG_DEFAULT_MIN_SLAVES_MAX_LAG
);
rewriteConfigRequirepassOption
(
state
,
"requirepass"
);
rewriteConfigRequirepassOption
(
state
,
"requirepass"
);
rewriteConfigNumericalOption
(
state
,
"maxclients"
,
server
.
maxclients
,
CONFIG_DEFAULT_MAX_CLIENTS
);
rewriteConfigNumericalOption
(
state
,
"maxclients"
,
server
.
maxclients
,
CONFIG_DEFAULT_MAX_CLIENTS
);
rewriteConfigBytesOption
(
state
,
"maxmemory"
,
server
.
maxmemory
,
CONFIG_DEFAULT_MAXMEMORY
);
rewriteConfigBytesOption
(
state
,
"maxmemory"
,
server
.
maxmemory
,
CONFIG_DEFAULT_MAXMEMORY
);
rewriteConfigBytesOption
(
state
,
"proto-max-bulk-len"
,
server
.
proto_max_bulk_len
,
CONFIG_DEFAULT_PROTO_MAX_BULK_LEN
);
rewriteConfigBytesOption
(
state
,
"client-query-buffer-limit"
,
server
.
client_max_querybuf_len
,
PROTO_MAX_QUERYBUF_LEN
);
rewriteConfigBytesOption
(
state
,
"client-query-buffer-limit"
,
server
.
client_max_querybuf_len
,
PROTO_MAX_QUERYBUF_LEN
);
rewriteConfigEnumOption
(
state
,
"maxmemory-policy"
,
server
.
maxmemory_policy
,
maxmemory_policy_enum
,
CONFIG_DEFAULT_MAXMEMORY_POLICY
);
rewriteConfigNumericalOption
(
state
,
"maxmemory-samples"
,
server
.
maxmemory_samples
,
CONFIG_DEFAULT_MAXMEMORY_SAMPLES
);
rewriteConfigNumericalOption
(
state
,
"lfu-log-factor"
,
server
.
lfu_log_factor
,
CONFIG_DEFAULT_LFU_LOG_FACTOR
);
rewriteConfigNumericalOption
(
state
,
"lfu-decay-time"
,
server
.
lfu_decay_time
,
CONFIG_DEFAULT_LFU_DECAY_TIME
);
rewriteConfigNumericalOption
(
state
,
"active-defrag-threshold-lower"
,
server
.
active_defrag_threshold_lower
,
CONFIG_DEFAULT_DEFRAG_THRESHOLD_LOWER
);
rewriteConfigNumericalOption
(
state
,
"active-defrag-threshold-upper"
,
server
.
active_defrag_threshold_upper
,
CONFIG_DEFAULT_DEFRAG_THRESHOLD_UPPER
);
rewriteConfigBytesOption
(
state
,
"active-defrag-ignore-bytes"
,
server
.
active_defrag_ignore_bytes
,
CONFIG_DEFAULT_DEFRAG_IGNORE_BYTES
);
rewriteConfigNumericalOption
(
state
,
"active-defrag-cycle-min"
,
server
.
active_defrag_cycle_min
,
CONFIG_DEFAULT_DEFRAG_CYCLE_MIN
);
rewriteConfigNumericalOption
(
state
,
"active-defrag-cycle-max"
,
server
.
active_defrag_cycle_max
,
CONFIG_DEFAULT_DEFRAG_CYCLE_MAX
);
rewriteConfigNumericalOption
(
state
,
"active-defrag-max-scan-fields"
,
server
.
active_defrag_max_scan_fields
,
CONFIG_DEFAULT_DEFRAG_MAX_SCAN_FIELDS
);
rewriteConfigNumericalOption
(
state
,
"active-expire-effort"
,
server
.
active_expire_effort
,
CONFIG_DEFAULT_ACTIVE_EXPIRE_EFFORT
);
rewriteConfigYesNoOption
(
state
,
"appendonly"
,
server
.
aof_enabled
,
0
);
rewriteConfigYesNoOption
(
state
,
"appendonly"
,
server
.
aof_enabled
,
0
);
rewriteConfigStringOption
(
state
,
"appendfilename"
,
server
.
aof_filename
,
CONFIG_DEFAULT_AOF_FILENAME
);
rewriteConfigStringOption
(
state
,
"appendfilename"
,
server
.
aof_filename
,
CONFIG_DEFAULT_AOF_FILENAME
);
rewriteConfigEnumOption
(
state
,
"appendfsync"
,
server
.
aof_fsync
,
aof_fsync_enum
,
CONFIG_DEFAULT_AOF_FSYNC
);
rewriteConfigNumericalOption
(
state
,
"auto-aof-rewrite-percentage"
,
server
.
aof_rewrite_perc
,
AOF_REWRITE_PERC
);
rewriteConfigBytesOption
(
state
,
"auto-aof-rewrite-min-size"
,
server
.
aof_rewrite_min_size
,
AOF_REWRITE_MIN_SIZE
);
rewriteConfigNumericalOption
(
state
,
"lua-time-limit"
,
server
.
lua_time_limit
,
LUA_SCRIPT_TIME_LIMIT
);
rewriteConfigYesNoOption
(
state
,
"cluster-enabled"
,
server
.
cluster_enabled
,
0
);
rewriteConfigYesNoOption
(
state
,
"cluster-enabled"
,
server
.
cluster_enabled
,
0
);
rewriteConfigStringOption
(
state
,
"cluster-config-file"
,
server
.
cluster_configfile
,
CONFIG_DEFAULT_CLUSTER_CONFIG_FILE
);
rewriteConfigStringOption
(
state
,
"cluster-config-file"
,
server
.
cluster_configfile
,
CONFIG_DEFAULT_CLUSTER_CONFIG_FILE
);
rewriteConfigNumericalOption
(
state
,
"cluster-node-timeout"
,
server
.
cluster_node_timeout
,
CLUSTER_DEFAULT_NODE_TIMEOUT
);
rewriteConfigNumericalOption
(
state
,
"cluster-migration-barrier"
,
server
.
cluster_migration_barrier
,
CLUSTER_DEFAULT_MIGRATION_BARRIER
);
rewriteConfigNumericalOption
(
state
,
"cluster-replica-validity-factor"
,
server
.
cluster_slave_validity_factor
,
CLUSTER_DEFAULT_SLAVE_VALIDITY
);
rewriteConfigNumericalOption
(
state
,
"slowlog-log-slower-than"
,
server
.
slowlog_log_slower_than
,
CONFIG_DEFAULT_SLOWLOG_LOG_SLOWER_THAN
);
rewriteConfigNumericalOption
(
state
,
"latency-monitor-threshold"
,
server
.
latency_monitor_threshold
,
CONFIG_DEFAULT_LATENCY_MONITOR_THRESHOLD
);
rewriteConfigNumericalOption
(
state
,
"slowlog-max-len"
,
server
.
slowlog_max_len
,
CONFIG_DEFAULT_SLOWLOG_MAX_LEN
);
rewriteConfigNumericalOption
(
state
,
"tracking-table-max-fill"
,
server
.
tracking_table_max_fill
,
CONFIG_DEFAULT_TRACKING_TABLE_MAX_FILL
);
rewriteConfigNotifykeyspaceeventsOption
(
state
);
rewriteConfigNotifykeyspaceeventsOption
(
state
);
rewriteConfigNumericalOption
(
state
,
"hash-max-ziplist-entries"
,
server
.
hash_max_ziplist_entries
,
OBJ_HASH_MAX_ZIPLIST_ENTRIES
);
rewriteConfigNumericalOption
(
state
,
"hash-max-ziplist-value"
,
server
.
hash_max_ziplist_value
,
OBJ_HASH_MAX_ZIPLIST_VALUE
);
rewriteConfigNumericalOption
(
state
,
"stream-node-max-bytes"
,
server
.
stream_node_max_bytes
,
OBJ_STREAM_NODE_MAX_BYTES
);
rewriteConfigNumericalOption
(
state
,
"stream-node-max-entries"
,
server
.
stream_node_max_entries
,
OBJ_STREAM_NODE_MAX_ENTRIES
);
rewriteConfigNumericalOption
(
state
,
"list-max-ziplist-size"
,
server
.
list_max_ziplist_size
,
OBJ_LIST_MAX_ZIPLIST_SIZE
);
rewriteConfigNumericalOption
(
state
,
"list-compress-depth"
,
server
.
list_compress_depth
,
OBJ_LIST_COMPRESS_DEPTH
);
rewriteConfigNumericalOption
(
state
,
"set-max-intset-entries"
,
server
.
set_max_intset_entries
,
OBJ_SET_MAX_INTSET_ENTRIES
);
rewriteConfigNumericalOption
(
state
,
"zset-max-ziplist-entries"
,
server
.
zset_max_ziplist_entries
,
OBJ_ZSET_MAX_ZIPLIST_ENTRIES
);
rewriteConfigNumericalOption
(
state
,
"zset-max-ziplist-value"
,
server
.
zset_max_ziplist_value
,
OBJ_ZSET_MAX_ZIPLIST_VALUE
);
rewriteConfigNumericalOption
(
state
,
"hll-sparse-max-bytes"
,
server
.
hll_sparse_max_bytes
,
CONFIG_DEFAULT_HLL_SPARSE_MAX_BYTES
);
rewriteConfigYesNoOption
(
state
,
"activedefrag"
,
server
.
active_defrag_enabled
,
CONFIG_DEFAULT_ACTIVE_DEFRAG
);
rewriteConfigYesNoOption
(
state
,
"activedefrag"
,
server
.
active_defrag_enabled
,
CONFIG_DEFAULT_ACTIVE_DEFRAG
);
rewriteConfigClientoutputbufferlimitOption
(
state
);
rewriteConfigClientoutputbufferlimitOption
(
state
);
rewriteConfigNumericalOption
(
state
,
"hz"
,
server
.
config_hz
,
CONFIG_DEFAULT_HZ
);
rewriteConfigNumericalOption
(
state
,
"hz"
,
server
.
config_hz
,
CONFIG_DEFAULT_HZ
);
rewriteConfigEnumOption
(
state
,
"supervised"
,
server
.
supervised_mode
,
supervised_mode_enum
,
SUPERVISED_NONE
);
rewriteConfigNumericalOption
(
state
,
"rdb-key-save-delay"
,
server
.
rdb_key_save_delay
,
CONFIG_DEFAULT_RDB_KEY_SAVE_DELAY
);
rewriteConfigNumericalOption
(
state
,
"key-load-delay"
,
server
.
key_load_delay
,
CONFIG_DEFAULT_KEY_LOAD_DELAY
);
#ifdef USE_OPENSSL
#ifdef USE_OPENSSL
rewriteConfigYesNoOption
(
state
,
"tls-cluster"
,
server
.
tls_cluster
,
0
);
rewriteConfigYesNoOption
(
state
,
"tls-cluster"
,
server
.
tls_cluster
,
0
);
rewriteConfigYesNoOption
(
state
,
"tls-replication"
,
server
.
tls_replication
,
0
);
rewriteConfigYesNoOption
(
state
,
"tls-replication"
,
server
.
tls_replication
,
0
);
...
@@ -2404,6 +1834,422 @@ int rewriteConfig(char *path) {
...
@@ -2404,6 +1834,422 @@ int rewriteConfig(char *path) {
return
retval
;
return
retval
;
}
}
/*-----------------------------------------------------------------------------
* Configs that fit one of the major types and require no special handling
*----------------------------------------------------------------------------*/
#define LOADBUF_SIZE 256
static
char
loadbuf
[
LOADBUF_SIZE
];
#define MEMORY_CONFIG 1
#define INTEGER_CONFIG 0
#define MODIFIABLE_CONFIG 1
#define IMMUTABLE_CONFIG 0
#define embedCommonConfig(config_name, config_alias, is_modifiable) \
.name = (config_name), \
.alias = (config_alias), \
.modifiable = (is_modifiable),
#define embedConfigInterface(loadfn, setfn, getfn, rewritefn) .interface = { \
.load = (loadfn), \
.set = (setfn), \
.get = (getfn), \
.rewrite = (rewritefn) \
},
/*
* What follows is the generic config types that are supported. To add a new
* config with one of these types, add it to the standardConfig table with
* the creation macro for each type.
*
* Each type contains the following:
* * A function defining how to load this type on startup.
* * A function defining how to update this type on CONFIG SET.
* * A function defining how to serialize this type on CONFIG SET.
* * A function defining how to rewrite this type on CONFIG REWRITE.
* * A Macro defining how to create this type.
*/
/* Bool Configs */
static
int
boolConfigLoad
(
typeData
data
,
sds
*
argv
,
int
argc
,
char
**
err
)
{
if
(
argc
!=
2
)
{
*
err
=
"wrong number of arguments"
;
return
0
;
}
if
((
*
(
data
.
yesno
.
config
)
=
yesnotoi
(
argv
[
1
]))
==
-
1
)
{
*
err
=
"argument must be 'yes' or 'no'"
;
return
0
;
}
return
1
;
}
static
int
boolConfigSet
(
typeData
data
,
sds
value
)
{
int
yn
=
yesnotoi
(
value
);
if
(
yn
==
-
1
)
return
0
;
*
(
data
.
yesno
.
config
)
=
yn
;
return
1
;
}
static
void
boolConfigGet
(
client
*
c
,
typeData
data
)
{
addReplyBulkCString
(
c
,
data
.
yesno
.
config
?
"yes"
:
"no"
);
}
static
void
boolConfigRewrite
(
typeData
data
,
const
char
*
name
,
struct
rewriteConfigState
*
state
)
{
rewriteConfigYesNoOption
(
state
,
name
,
*
(
data
.
yesno
.
config
),
data
.
yesno
.
default_value
);
}
#define createBoolConfig(name, alias, modifiable, config_addr, default) { \
embedCommonConfig(name, alias, modifiable) \
embedConfigInterface(boolConfigLoad, boolConfigSet, boolConfigGet, boolConfigRewrite) \
.data.yesno = { \
.config = &(config_addr), \
.default_value = (default) \
} \
}
/* String Configs */
static
int
stringConfigLoad
(
typeData
data
,
sds
*
argv
,
int
argc
,
char
**
err
)
{
if
(
argc
!=
2
)
{
*
err
=
"wrong number of arguments"
;
return
0
;
}
zfree
(
*
data
.
string
.
config
);
*
data
.
string
.
config
=
argv
[
1
][
0
]
?
zstrdup
(
argv
[
1
])
:
NULL
;
return
1
;
}
static
int
stringConfigSet
(
typeData
data
,
sds
value
)
{
zfree
(
*
data
.
string
.
config
);
*
data
.
string
.
config
=
value
?
zstrdup
(
value
)
:
NULL
;
return
1
;
}
static
void
stringConfigGet
(
client
*
c
,
typeData
data
)
{
addReplyBulkCString
(
c
,
*
data
.
string
.
config
?
*
data
.
string
.
config
:
""
);
}
static
void
stringConfigRewrite
(
typeData
data
,
const
char
*
name
,
struct
rewriteConfigState
*
state
)
{
rewriteConfigStringOption
(
state
,
name
,
*
(
data
.
string
.
config
),
data
.
string
.
default_value
);
}
#define createStringConfig(name, alias, modifiable, config_addr, default) { \
embedCommonConfig(name, alias, modifiable) \
embedConfigInterface(stringConfigLoad, stringConfigSet, stringConfigGet, stringConfigRewrite) \
.data.string = { \
.config = &(config_addr), \
.default_value = (default), \
} \
}
/* Enum configs */
static
int
configEnumLoad
(
typeData
data
,
sds
*
argv
,
int
argc
,
char
**
err
)
{
if
(
argc
!=
2
)
{
*
err
=
"wrong number of arguments"
;
return
0
;
}
int
enumval
=
configEnumGetValue
(
data
.
enumd
.
enum_value
,
argv
[
1
]);
if
(
enumval
==
INT_MIN
)
{
sds
enumerr
=
sdsnew
(
"argument must be one of the following: "
);
configEnum
*
enumNode
=
data
.
enumd
.
enum_value
;
while
(
enumNode
->
name
!=
NULL
)
{
sdscatlen
(
enumerr
,
enumNode
->
name
,
strlen
(
enumNode
->
name
));
sdscatlen
(
enumerr
,
", "
,
2
);
enumNode
++
;
}
enumerr
[
sdslen
(
enumerr
)
-
2
]
=
'\0'
;
/* Make sure we don't overrun the fixed buffer */
enumerr
[
LOADBUF_SIZE
-
1
]
=
'\0'
;
strncpy
(
loadbuf
,
enumerr
,
LOADBUF_SIZE
);
sdsfree
(
enumerr
);
*
err
=
loadbuf
;
return
0
;
}
*
(
data
.
enumd
.
config
)
=
enumval
;
return
1
;
}
static
int
configEnumSet
(
typeData
data
,
sds
value
)
{
int
enumval
=
configEnumGetValue
(
data
.
enumd
.
enum_value
,
value
);
if
(
enumval
==
INT_MIN
)
return
0
;
*
(
data
.
enumd
.
config
)
=
enumval
;
return
1
;
}
static
void
configEnumGet
(
client
*
c
,
typeData
data
)
{
addReplyBulkCString
(
c
,
configEnumGetNameOrUnknown
(
data
.
enumd
.
enum_value
,
*
data
.
enumd
.
config
));
}
static
void
configEnumRewrite
(
typeData
data
,
const
char
*
name
,
struct
rewriteConfigState
*
state
)
{
rewriteConfigEnumOption
(
state
,
name
,
*
(
data
.
enumd
.
config
),
data
.
enumd
.
enum_value
,
data
.
enumd
.
default_value
);
}
#define createEnumConfig(name, alias, modifiable, enum, config_addr, default) { \
embedCommonConfig(name, alias, modifiable) \
embedConfigInterface(configEnumLoad, configEnumSet, configEnumGet, configEnumRewrite) \
.data.enumd = { \
.config = &(config_addr), \
.default_value = (default), \
.enum_value = (enum) \
} \
}
/* Numeric configs */
static
int
numericConfigLoad
(
typeData
data
,
sds
*
argv
,
int
argc
,
char
**
err
)
{
long
long
ll
;
if
(
argc
!=
2
)
{
*
err
=
"wrong number of arguments"
;
return
0
;
}
if
(
data
.
numeric
.
is_memory
)
{
int
memerr
;
ll
=
memtoll
(
argv
[
1
],
&
memerr
);
if
(
memerr
||
ll
<
0
)
{
*
err
=
"argument must be a memory value"
;
return
0
;
}
}
else
{
if
(
!
string2ll
(
argv
[
1
],
sdslen
(
argv
[
1
]),
&
ll
))
{
*
err
=
"argument couldn't be parsed into an integer"
;
return
0
;
}
}
if
(
ll
>
data
.
numeric
.
upper_bound
||
ll
<
data
.
numeric
.
lower_bound
)
{
snprintf
(
loadbuf
,
LOADBUF_SIZE
,
"argument must be between %lld and %lld inclusive"
,
data
.
numeric
.
lower_bound
,
data
.
numeric
.
upper_bound
);
*
err
=
loadbuf
;
return
0
;
}
if
(
data
.
numeric
.
numeric_type
==
NUMERIC_TYPE_INT
)
{
*
(
data
.
numeric
.
config
.
i
)
=
(
int
)
ll
;
}
else
if
(
data
.
numeric
.
numeric_type
==
NUMERIC_TYPE_UNSIGNED_LONG
)
{
*
(
data
.
numeric
.
config
.
ul
)
=
(
unsigned
long
)
ll
;
}
else
if
(
data
.
numeric
.
numeric_type
==
NUMERIC_TYPE_LONG_LONG
)
{
*
(
data
.
numeric
.
config
.
ll
)
=
ll
;
}
else
if
(
data
.
numeric
.
numeric_type
==
NUMERIC_TYPE_SIZE_T
)
{
*
(
data
.
numeric
.
config
.
st
)
=
(
size_t
)
ll
;
}
return
1
;
}
static
int
numericConfigSet
(
typeData
data
,
sds
value
)
{
long
long
ll
;
if
(
data
.
numeric
.
is_memory
)
{
int
memerr
;
ll
=
memtoll
(
value
,
&
memerr
);
if
(
memerr
||
ll
<
0
)
return
0
;
}
else
{
if
(
!
string2ll
(
value
,
sdslen
(
value
),
&
ll
))
return
0
;
}
if
(
ll
>
data
.
numeric
.
upper_bound
||
ll
<
data
.
numeric
.
lower_bound
)
{
return
0
;
}
if
(
data
.
numeric
.
numeric_type
==
NUMERIC_TYPE_INT
)
{
*
(
data
.
numeric
.
config
.
i
)
=
(
int
)
ll
;
}
else
if
(
data
.
numeric
.
numeric_type
==
NUMERIC_TYPE_UNSIGNED_LONG
)
{
*
(
data
.
numeric
.
config
.
ul
)
=
(
unsigned
long
)
ll
;
}
else
if
(
data
.
numeric
.
numeric_type
==
NUMERIC_TYPE_LONG_LONG
)
{
*
(
data
.
numeric
.
config
.
ll
)
=
ll
;
}
else
if
(
data
.
numeric
.
numeric_type
==
NUMERIC_TYPE_SIZE_T
)
{
*
(
data
.
numeric
.
config
.
st
)
=
(
size_t
)
ll
;
}
return
1
;
}
static
void
numericConfigGet
(
client
*
c
,
typeData
data
)
{
char
buf
[
128
];
long
long
value
=
0
;
if
(
data
.
numeric
.
numeric_type
==
NUMERIC_TYPE_INT
)
{
value
=
*
(
data
.
numeric
.
config
.
i
);
}
else
if
(
data
.
numeric
.
numeric_type
==
NUMERIC_TYPE_UNSIGNED_LONG
)
{
value
=
*
(
data
.
numeric
.
config
.
ul
);
}
else
if
(
data
.
numeric
.
numeric_type
==
NUMERIC_TYPE_LONG_LONG
)
{
value
=
*
(
data
.
numeric
.
config
.
ll
);
}
else
if
(
data
.
numeric
.
numeric_type
==
NUMERIC_TYPE_SIZE_T
)
{
value
=
*
(
data
.
numeric
.
config
.
st
);
}
ll2string
(
buf
,
sizeof
(
buf
),
value
);
addReplyBulkCString
(
c
,
buf
);
}
static
void
numericConfigRewrite
(
typeData
data
,
const
char
*
name
,
struct
rewriteConfigState
*
state
)
{
long
long
value
;
if
(
data
.
numeric
.
numeric_type
==
NUMERIC_TYPE_INT
)
{
value
=
*
(
data
.
numeric
.
config
.
i
);
}
else
if
(
data
.
numeric
.
numeric_type
==
NUMERIC_TYPE_UNSIGNED_LONG
)
{
value
=
*
(
data
.
numeric
.
config
.
ul
);
}
else
if
(
data
.
numeric
.
numeric_type
==
NUMERIC_TYPE_LONG_LONG
)
{
value
=
*
(
data
.
numeric
.
config
.
ll
);
}
else
if
(
data
.
numeric
.
numeric_type
==
NUMERIC_TYPE_SIZE_T
)
{
value
=
*
(
data
.
numeric
.
config
.
st
);
}
if
(
data
.
numeric
.
is_memory
)
{
rewriteConfigBytesOption
(
state
,
name
,
value
,
data
.
numeric
.
default_value
);
}
else
{
rewriteConfigNumericalOption
(
state
,
name
,
value
,
data
.
numeric
.
default_value
);
}
}
#define embedCommonNumericalConfig(name, alias, modifiable, lower, upper, config_addr, default, memory) { \
embedCommonConfig(name, alias, modifiable) \
embedConfigInterface(numericConfigLoad, numericConfigSet, numericConfigGet, numericConfigRewrite) \
.data.numeric = { \
.lower_bound = (lower), \
.upper_bound = (upper), \
.default_value = (default), \
.is_memory = (memory),
#define createIntConfig(name, alias, modifiable, lower, upper, config_addr, default, memory) \
embedCommonNumericalConfig(name, alias, modifiable, lower, upper, config_addr, default, memory) \
.numeric_type = NUMERIC_TYPE_INT, \
.config.i = &(config_addr) \
} \
}
#define createUnsignedLongConfig(name, alias, modifiable, lower, upper, config_addr, default, memory) \
embedCommonNumericalConfig(name, alias, modifiable, lower, upper, config_addr, default, memory) \
.numeric_type = NUMERIC_TYPE_UNSIGNED_LONG, \
.config.ul = &(config_addr) \
} \
}
#define createLongLongConfig(name, alias, modifiable, lower, upper, config_addr, default, memory) \
embedCommonNumericalConfig(name, alias, modifiable, lower, upper, config_addr, default, memory) \
.numeric_type = NUMERIC_TYPE_LONG_LONG, \
.config.ll = &(config_addr) \
} \
}
#define createSizeTConfig(name, alias, modifiable, lower, upper, config_addr, default, memory) \
embedCommonNumericalConfig(name, alias, modifiable, lower, upper, config_addr, default, memory) \
.numeric_type = NUMERIC_TYPE_SIZE_T, \
.config.st = &(config_addr) \
} \
}
standardConfig
configs
[]
=
{
/* Bool configs */
createBoolConfig
(
"rdbchecksum"
,
NULL
,
IMMUTABLE_CONFIG
,
server
.
rdb_checksum
,
CONFIG_DEFAULT_RDB_CHECKSUM
),
createBoolConfig
(
"daemonize"
,
NULL
,
IMMUTABLE_CONFIG
,
server
.
daemonize
,
0
),
createBoolConfig
(
"io-threads-do-reads"
,
NULL
,
IMMUTABLE_CONFIG
,
server
.
io_threads_do_reads
,
CONFIG_DEFAULT_IO_THREADS_DO_READS
),
createBoolConfig
(
"lua-replicate-commands"
,
NULL
,
IMMUTABLE_CONFIG
,
server
.
lua_always_replicate_commands
,
1
),
createBoolConfig
(
"always-show-logo"
,
NULL
,
IMMUTABLE_CONFIG
,
server
.
always_show_logo
,
CONFIG_DEFAULT_ALWAYS_SHOW_LOGO
),
createBoolConfig
(
"protected-mode"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
protected_mode
,
CONFIG_DEFAULT_PROTECTED_MODE
),
createBoolConfig
(
"rdbcompression"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
rdb_compression
,
CONFIG_DEFAULT_RDB_COMPRESSION
),
createBoolConfig
(
"activerehashing"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
activerehashing
,
CONFIG_DEFAULT_ACTIVE_REHASHING
),
createBoolConfig
(
"stop-writes-on-bgsave-error"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
stop_writes_on_bgsave_err
,
CONFIG_DEFAULT_STOP_WRITES_ON_BGSAVE_ERROR
),
createBoolConfig
(
"dynamic-hz"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
dynamic_hz
,
CONFIG_DEFAULT_DYNAMIC_HZ
),
createBoolConfig
(
"lazyfree-lazy-eviction"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
lazyfree_lazy_eviction
,
CONFIG_DEFAULT_LAZYFREE_LAZY_EVICTION
),
createBoolConfig
(
"lazyfree-lazy-expire"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
lazyfree_lazy_expire
,
CONFIG_DEFAULT_LAZYFREE_LAZY_EXPIRE
),
createBoolConfig
(
"lazyfree-lazy-server-del"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
lazyfree_lazy_server_del
,
CONFIG_DEFAULT_LAZYFREE_LAZY_SERVER_DEL
),
createBoolConfig
(
"repl-disable-tcp-nodelay"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
repl_disable_tcp_nodelay
,
CONFIG_DEFAULT_REPL_DISABLE_TCP_NODELAY
),
createBoolConfig
(
"repl-diskless-sync"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
repl_diskless_sync
,
CONFIG_DEFAULT_REPL_DISKLESS_SYNC
),
createBoolConfig
(
"gopher-enabled"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
gopher_enabled
,
CONFIG_DEFAULT_GOPHER_ENABLED
),
createBoolConfig
(
"aof-rewrite-incremental-fsync"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
aof_rewrite_incremental_fsync
,
CONFIG_DEFAULT_AOF_REWRITE_INCREMENTAL_FSYNC
),
createBoolConfig
(
"no-appendfsync-on-rewrite"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
aof_no_fsync_on_rewrite
,
CONFIG_DEFAULT_AOF_NO_FSYNC_ON_REWRITE
),
createBoolConfig
(
"cluster-require-full-coverage"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
cluster_require_full_coverage
,
CLUSTER_DEFAULT_REQUIRE_FULL_COVERAGE
),
createBoolConfig
(
"rdb-save-incremental-fsync"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
rdb_save_incremental_fsync
,
CONFIG_DEFAULT_RDB_SAVE_INCREMENTAL_FSYNC
),
createBoolConfig
(
"aof-load-truncated"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
aof_load_truncated
,
CONFIG_DEFAULT_AOF_LOAD_TRUNCATED
),
createBoolConfig
(
"aof-use-rdb-preamble"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
aof_use_rdb_preamble
,
CONFIG_DEFAULT_AOF_USE_RDB_PREAMBLE
),
createBoolConfig
(
"cluster-replica-no-failover"
,
"cluster-slave-no-failover"
,
MODIFIABLE_CONFIG
,
server
.
cluster_slave_no_failover
,
CLUSTER_DEFAULT_SLAVE_NO_FAILOVER
),
createBoolConfig
(
"replica-lazy-flush"
,
"slave-lazy-flush"
,
MODIFIABLE_CONFIG
,
server
.
repl_slave_lazy_flush
,
CONFIG_DEFAULT_SLAVE_LAZY_FLUSH
),
createBoolConfig
(
"replica-serve-stale-data"
,
"slave-serve-stale-data"
,
MODIFIABLE_CONFIG
,
server
.
repl_serve_stale_data
,
CONFIG_DEFAULT_SLAVE_SERVE_STALE_DATA
),
createBoolConfig
(
"replica-read-only"
,
"slave-read-only"
,
MODIFIABLE_CONFIG
,
server
.
repl_slave_ro
,
CONFIG_DEFAULT_SLAVE_READ_ONLY
),
createBoolConfig
(
"replica-ignore-maxmemory"
,
"slave-ignore-maxmemory"
,
MODIFIABLE_CONFIG
,
server
.
repl_slave_ignore_maxmemory
,
CONFIG_DEFAULT_SLAVE_IGNORE_MAXMEMORY
),
createBoolConfig
(
"jemalloc-bg-thread"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
jemalloc_bg_thread
,
1
),
/* String Configs */
createStringConfig
(
"aclfile"
,
NULL
,
IMMUTABLE_CONFIG
,
server
.
acl_filename
,
CONFIG_DEFAULT_ACL_FILENAME
),
createStringConfig
(
"unixsocket"
,
NULL
,
IMMUTABLE_CONFIG
,
server
.
unixsocket
,
NULL
),
createStringConfig
(
"pidfile"
,
NULL
,
IMMUTABLE_CONFIG
,
server
.
pidfile
,
CONFIG_DEFAULT_PID_FILE
),
createStringConfig
(
"replica-announce-ip"
,
"slave-announce-ip"
,
MODIFIABLE_CONFIG
,
server
.
slave_announce_ip
,
CONFIG_DEFAULT_SLAVE_ANNOUNCE_IP
),
createStringConfig
(
"masteruser"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
masteruser
,
NULL
),
createStringConfig
(
"masterauth"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
masterauth
,
NULL
),
createStringConfig
(
"cluster-announce-ip"
,
NULL
,
MODIFIABLE_CONFIG
,
server
.
cluster_announce_ip
,
NULL
),
/* Enum Configs */
createEnumConfig
(
"supervised"
,
NULL
,
IMMUTABLE_CONFIG
,
supervised_mode_enum
,
server
.
supervised_mode
,
SUPERVISED_NONE
),
createEnumConfig
(
"syslog-facility"
,
NULL
,
IMMUTABLE_CONFIG
,
syslog_facility_enum
,
server
.
syslog_facility
,
LOG_LOCAL0
),
createEnumConfig
(
"repl-diskless-load"
,
NULL
,
MODIFIABLE_CONFIG
,
repl_diskless_load_enum
,
server
.
repl_diskless_load
,
CONFIG_DEFAULT_REPL_DISKLESS_LOAD
),
createEnumConfig
(
"loglevel"
,
NULL
,
MODIFIABLE_CONFIG
,
loglevel_enum
,
server
.
verbosity
,
CONFIG_DEFAULT_VERBOSITY
),
createEnumConfig
(
"maxmemory-policy"
,
NULL
,
MODIFIABLE_CONFIG
,
maxmemory_policy_enum
,
server
.
maxmemory_policy
,
CONFIG_DEFAULT_MAXMEMORY_POLICY
),
createEnumConfig
(
"appendfsync"
,
NULL
,
MODIFIABLE_CONFIG
,
aof_fsync_enum
,
server
.
aof_fsync
,
CONFIG_DEFAULT_AOF_FSYNC
),
/* Integer configs */
createIntConfig
(
"databases"
,
NULL
,
IMMUTABLE_CONFIG
,
1
,
INT_MAX
,
server
.
dbnum
,
CONFIG_DEFAULT_DBNUM
,
INTEGER_CONFIG
),
createIntConfig
(
"port"
,
NULL
,
IMMUTABLE_CONFIG
,
0
,
65535
,
server
.
port
,
CONFIG_DEFAULT_SERVER_PORT
,
INTEGER_CONFIG
),
createIntConfig
(
"io-threads"
,
NULL
,
IMMUTABLE_CONFIG
,
1
,
512
,
server
.
io_threads_num
,
CONFIG_DEFAULT_IO_THREADS_NUM
,
INTEGER_CONFIG
),
createIntConfig
(
"auto-aof-rewrite-percentage"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
INT_MAX
,
server
.
aof_rewrite_perc
,
AOF_REWRITE_PERC
,
INTEGER_CONFIG
),
createIntConfig
(
"cluster-replica-validity-factor"
,
"cluster-slave-validity-factor"
,
MODIFIABLE_CONFIG
,
0
,
INT_MAX
,
server
.
cluster_slave_validity_factor
,
CLUSTER_DEFAULT_SLAVE_VALIDITY
,
INTEGER_CONFIG
),
createIntConfig
(
"list-max-ziplist-size"
,
NULL
,
MODIFIABLE_CONFIG
,
INT_MIN
,
INT_MAX
,
server
.
list_max_ziplist_size
,
OBJ_LIST_MAX_ZIPLIST_SIZE
,
INTEGER_CONFIG
),
createIntConfig
(
"tcp-keepalive"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
INT_MAX
,
server
.
tcpkeepalive
,
CONFIG_DEFAULT_TCP_KEEPALIVE
,
INTEGER_CONFIG
),
createIntConfig
(
"cluster-migration-barrier"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
INT_MAX
,
server
.
cluster_migration_barrier
,
CLUSTER_DEFAULT_MIGRATION_BARRIER
,
INTEGER_CONFIG
),
createIntConfig
(
"active-defrag-cycle-min"
,
NULL
,
MODIFIABLE_CONFIG
,
1
,
99
,
server
.
active_defrag_cycle_min
,
CONFIG_DEFAULT_DEFRAG_CYCLE_MIN
,
INTEGER_CONFIG
),
createIntConfig
(
"active-defrag-cycle-max"
,
NULL
,
MODIFIABLE_CONFIG
,
1
,
99
,
server
.
active_defrag_cycle_max
,
CONFIG_DEFAULT_DEFRAG_CYCLE_MAX
,
INTEGER_CONFIG
),
createIntConfig
(
"active-defrag-threshold-lower"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
1000
,
server
.
active_defrag_threshold_lower
,
CONFIG_DEFAULT_DEFRAG_THRESHOLD_LOWER
,
INTEGER_CONFIG
),
createIntConfig
(
"active-defrag-threshold-upper"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
1000
,
server
.
active_defrag_threshold_upper
,
CONFIG_DEFAULT_DEFRAG_THRESHOLD_UPPER
,
INTEGER_CONFIG
),
createIntConfig
(
"lfu-log-factor"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
INT_MAX
,
server
.
lfu_log_factor
,
CONFIG_DEFAULT_LFU_LOG_FACTOR
,
INTEGER_CONFIG
),
createIntConfig
(
"lfu-decay-time"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
INT_MAX
,
server
.
lfu_decay_time
,
CONFIG_DEFAULT_LFU_DECAY_TIME
,
INTEGER_CONFIG
),
createIntConfig
(
"replica-priority"
,
"slave-priority"
,
MODIFIABLE_CONFIG
,
0
,
INT_MAX
,
server
.
slave_priority
,
CONFIG_DEFAULT_SLAVE_PRIORITY
,
INTEGER_CONFIG
),
createIntConfig
(
"repl-diskless-sync-delay"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
INT_MAX
,
server
.
repl_diskless_sync_delay
,
CONFIG_DEFAULT_REPL_DISKLESS_SYNC_DELAY
,
INTEGER_CONFIG
),
createIntConfig
(
"maxmemory-samples"
,
NULL
,
MODIFIABLE_CONFIG
,
1
,
INT_MAX
,
server
.
maxmemory_samples
,
CONFIG_DEFAULT_MAXMEMORY_SAMPLES
,
INTEGER_CONFIG
),
createIntConfig
(
"timeout"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
INT_MAX
,
server
.
maxidletime
,
CONFIG_DEFAULT_CLIENT_TIMEOUT
,
INTEGER_CONFIG
),
createIntConfig
(
"replica-announce-port"
,
"slave-announce-port"
,
MODIFIABLE_CONFIG
,
0
,
65535
,
server
.
slave_announce_port
,
CONFIG_DEFAULT_SLAVE_ANNOUNCE_PORT
,
INTEGER_CONFIG
),
createIntConfig
(
"tcp-backlog"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
INT_MAX
,
server
.
tcp_backlog
,
CONFIG_DEFAULT_TCP_BACKLOG
,
INTEGER_CONFIG
),
createIntConfig
(
"cluster-announce-bus-port"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
65535
,
server
.
cluster_announce_bus_port
,
CONFIG_DEFAULT_CLUSTER_ANNOUNCE_BUS_PORT
,
INTEGER_CONFIG
),
createIntConfig
(
"cluster-announce-port"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
65535
,
server
.
cluster_announce_port
,
CONFIG_DEFAULT_CLUSTER_ANNOUNCE_PORT
,
INTEGER_CONFIG
),
createIntConfig
(
"repl-timeout"
,
NULL
,
MODIFIABLE_CONFIG
,
1
,
INT_MAX
,
server
.
repl_timeout
,
CONFIG_DEFAULT_REPL_TIMEOUT
,
INTEGER_CONFIG
),
createIntConfig
(
"repl-ping-replica-period"
,
"repl-ping-slave-period"
,
MODIFIABLE_CONFIG
,
1
,
INT_MAX
,
server
.
repl_ping_slave_period
,
CONFIG_DEFAULT_REPL_PING_SLAVE_PERIOD
,
INTEGER_CONFIG
),
createIntConfig
(
"list-compress-depth"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
INT_MAX
,
server
.
list_compress_depth
,
OBJ_LIST_COMPRESS_DEPTH
,
INTEGER_CONFIG
),
createIntConfig
(
"rdb-key-save-delay"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
INT_MAX
,
server
.
rdb_key_save_delay
,
CONFIG_DEFAULT_RDB_KEY_SAVE_DELAY
,
INTEGER_CONFIG
),
createIntConfig
(
"key-load-delay"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
INT_MAX
,
server
.
key_load_delay
,
CONFIG_DEFAULT_KEY_LOAD_DELAY
,
INTEGER_CONFIG
),
createIntConfig
(
"tracking-table-max-fill"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
100
,
server
.
tracking_table_max_fill
,
CONFIG_DEFAULT_TRACKING_TABLE_MAX_FILL
,
INTEGER_CONFIG
),
createIntConfig
(
"active-expire-effort"
,
NULL
,
MODIFIABLE_CONFIG
,
1
,
10
,
server
.
active_expire_effort
,
CONFIG_DEFAULT_ACTIVE_EXPIRE_EFFORT
,
INTEGER_CONFIG
),
/* Unsigned Long configs */
createUnsignedLongConfig
(
"active-defrag-max-scan-fields"
,
NULL
,
MODIFIABLE_CONFIG
,
1
,
LONG_MAX
,
server
.
active_defrag_max_scan_fields
,
CONFIG_DEFAULT_DEFRAG_MAX_SCAN_FIELDS
,
INTEGER_CONFIG
),
createUnsignedLongConfig
(
"slowlog-max-len"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
LONG_MAX
,
server
.
slowlog_max_len
,
CONFIG_DEFAULT_SLOWLOG_MAX_LEN
,
INTEGER_CONFIG
),
/* Long Long configs */
createLongLongConfig
(
"stream-node-max-entries"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
LLONG_MAX
,
server
.
stream_node_max_entries
,
OBJ_STREAM_NODE_MAX_ENTRIES
,
INTEGER_CONFIG
),
createLongLongConfig
(
"lua-time-limit"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
LONG_MAX
,
server
.
lua_time_limit
,
LUA_SCRIPT_TIME_LIMIT
,
INTEGER_CONFIG
),
createLongLongConfig
(
"cluster-node-timeout"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
LLONG_MAX
,
server
.
cluster_node_timeout
,
CLUSTER_DEFAULT_NODE_TIMEOUT
,
INTEGER_CONFIG
),
createLongLongConfig
(
"slowlog-log-slower-than"
,
NULL
,
MODIFIABLE_CONFIG
,
-
1
,
LLONG_MAX
,
server
.
slowlog_log_slower_than
,
CONFIG_DEFAULT_SLOWLOG_LOG_SLOWER_THAN
,
INTEGER_CONFIG
),
createLongLongConfig
(
"latency-monitor-threshold"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
LLONG_MAX
,
server
.
latency_monitor_threshold
,
CONFIG_DEFAULT_LATENCY_MONITOR_THRESHOLD
,
INTEGER_CONFIG
),
createLongLongConfig
(
"proto-max-bulk-len"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
LONG_MAX
,
server
.
proto_max_bulk_len
,
CONFIG_DEFAULT_PROTO_MAX_BULK_LEN
,
MEMORY_CONFIG
),
createLongLongConfig
(
"auto-aof-rewrite-min-size"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
LONG_MAX
,
server
.
aof_rewrite_min_size
,
AOF_REWRITE_MIN_SIZE
,
MEMORY_CONFIG
),
/* Size_t configs */
createSizeTConfig
(
"hash-max-ziplist-entries"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
LONG_MAX
,
server
.
hash_max_ziplist_entries
,
OBJ_HASH_MAX_ZIPLIST_ENTRIES
,
INTEGER_CONFIG
),
createSizeTConfig
(
"set-max-intset-entries"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
LONG_MAX
,
server
.
set_max_intset_entries
,
OBJ_SET_MAX_INTSET_ENTRIES
,
INTEGER_CONFIG
),
createSizeTConfig
(
"zset-max-ziplist-entries"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
LONG_MAX
,
server
.
zset_max_ziplist_entries
,
OBJ_ZSET_MAX_ZIPLIST_ENTRIES
,
INTEGER_CONFIG
),
createSizeTConfig
(
"active-defrag-ignore-bytes"
,
NULL
,
MODIFIABLE_CONFIG
,
1
,
LONG_MAX
,
server
.
active_defrag_ignore_bytes
,
CONFIG_DEFAULT_DEFRAG_IGNORE_BYTES
,
MEMORY_CONFIG
),
createSizeTConfig
(
"hash-max-ziplist-value"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
LONG_MAX
,
server
.
hash_max_ziplist_value
,
OBJ_HASH_MAX_ZIPLIST_VALUE
,
MEMORY_CONFIG
),
createSizeTConfig
(
"stream-node-max-bytes"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
LONG_MAX
,
server
.
stream_node_max_bytes
,
OBJ_STREAM_NODE_MAX_BYTES
,
MEMORY_CONFIG
),
createSizeTConfig
(
"zset-max-ziplist-value"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
LONG_MAX
,
server
.
zset_max_ziplist_value
,
OBJ_ZSET_MAX_ZIPLIST_VALUE
,
MEMORY_CONFIG
),
createSizeTConfig
(
"hll-sparse-max-bytes"
,
NULL
,
MODIFIABLE_CONFIG
,
0
,
LONG_MAX
,
server
.
hll_sparse_max_bytes
,
CONFIG_DEFAULT_HLL_SPARSE_MAX_BYTES
,
MEMORY_CONFIG
),
/* NULL Terminator */
{
NULL
}
};
/*-----------------------------------------------------------------------------
/*-----------------------------------------------------------------------------
* CONFIG command entry point
* CONFIG command entry point
*----------------------------------------------------------------------------*/
*----------------------------------------------------------------------------*/
...
...
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