Skip to content

Commit da62178

Browse files
authored
Merge pull request redis#4691 from oranagra/active_defrag_v2
Active defrag v2
2 parents 3851d30 + 806736c commit da62178

10 files changed

+884
-205
lines changed

redis.conf

+5-1
Original file line numberDiff line numberDiff line change
@@ -1312,8 +1312,12 @@ aof-rewrite-incremental-fsync yes
13121312
# active-defrag-threshold-upper 100
13131313

13141314
# Minimal effort for defrag in CPU percentage
1315-
# active-defrag-cycle-min 25
1315+
# active-defrag-cycle-min 5
13161316

13171317
# Maximal effort for defrag in CPU percentage
13181318
# active-defrag-cycle-max 75
13191319

1320+
# Maximum number of set/hash/zset/list fields that will be processed from
1321+
# the main dictionary scan
1322+
# active-defrag-max-scan-fields 1000
1323+

src/config.c

+10
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,12 @@ void loadServerConfigFromString(char *config) {
537537
err = "active-defrag-cycle-max must be between 1 and 99";
538538
goto loaderr;
539539
}
540+
} else if (!strcasecmp(argv[0],"active-defrag-max-scan-fields") && argc == 2) {
541+
server.active_defrag_max_scan_fields = strtoll(argv[1],NULL,10);
542+
if (server.active_defrag_max_scan_fields < 1) {
543+
err = "active-defrag-max-scan-fields must be positive";
544+
goto loaderr;
545+
}
540546
} else if (!strcasecmp(argv[0],"hash-max-ziplist-entries") && argc == 2) {
541547
server.hash_max_ziplist_entries = memtoll(argv[1], NULL);
542548
} else if (!strcasecmp(argv[0],"hash-max-ziplist-value") && argc == 2) {
@@ -1068,6 +1074,8 @@ void configSetCommand(client *c) {
10681074
"active-defrag-cycle-min",server.active_defrag_cycle_min,1,99) {
10691075
} config_set_numerical_field(
10701076
"active-defrag-cycle-max",server.active_defrag_cycle_max,1,99) {
1077+
} config_set_numerical_field(
1078+
"active-defrag-max-scan-fields",server.active_defrag_max_scan_fields,1,LLONG_MAX) {
10711079
} config_set_numerical_field(
10721080
"auto-aof-rewrite-percentage",server.aof_rewrite_perc,0,LLONG_MAX){
10731081
} config_set_numerical_field(
@@ -1249,6 +1257,7 @@ void configGetCommand(client *c) {
12491257
config_get_numerical_field("active-defrag-ignore-bytes",server.active_defrag_ignore_bytes);
12501258
config_get_numerical_field("active-defrag-cycle-min",server.active_defrag_cycle_min);
12511259
config_get_numerical_field("active-defrag-cycle-max",server.active_defrag_cycle_max);
1260+
config_get_numerical_field("active-defrag-max-scan-fields",server.active_defrag_max_scan_fields);
12521261
config_get_numerical_field("auto-aof-rewrite-percentage",
12531262
server.aof_rewrite_perc);
12541263
config_get_numerical_field("auto-aof-rewrite-min-size",
@@ -2025,6 +2034,7 @@ int rewriteConfig(char *path) {
20252034
rewriteConfigBytesOption(state,"active-defrag-ignore-bytes",server.active_defrag_ignore_bytes,CONFIG_DEFAULT_DEFRAG_IGNORE_BYTES);
20262035
rewriteConfigNumericalOption(state,"active-defrag-cycle-min",server.active_defrag_cycle_min,CONFIG_DEFAULT_DEFRAG_CYCLE_MIN);
20272036
rewriteConfigNumericalOption(state,"active-defrag-cycle-max",server.active_defrag_cycle_max,CONFIG_DEFAULT_DEFRAG_CYCLE_MAX);
2037+
rewriteConfigNumericalOption(state,"active-defrag-max-scan-fields",server.active_defrag_max_scan_fields,CONFIG_DEFAULT_DEFRAG_MAX_SCAN_FIELDS);
20282038
rewriteConfigYesNoOption(state,"appendonly",server.aof_state != AOF_OFF,0);
20292039
rewriteConfigStringOption(state,"appendfilename",server.aof_filename,CONFIG_DEFAULT_AOF_FILENAME);
20302040
rewriteConfigEnumOption(state,"appendfsync",server.aof_fsync,aof_fsync_enum,CONFIG_DEFAULT_AOF_FSYNC);

0 commit comments

Comments
 (0)