diff --git a/src/config.c b/src/config.c index a1122d05..5bc6aa2e 100644 --- a/src/config.c +++ b/src/config.c @@ -1031,9 +1031,10 @@ void configSetCommand(client *c) { if (server.active_defrag_enabled) { server.active_defrag_enabled = 0; addReplyError(c, - "Active defragmentation cannot be enabled: it requires a " - "Redis server compiled with a modified Jemalloc like the " - "one shipped by default with the Redis source distribution"); + "-DISABLED Active defragmentation cannot be enabled: it " + "requires a Redis server compiled with a modified Jemalloc " + "like the one shipped by default with the Redis source " + "distribution"); return; } #endif diff --git a/tests/unit/memefficiency.tcl b/tests/unit/memefficiency.tcl index f9006ace..1796d695 100644 --- a/tests/unit/memefficiency.tcl +++ b/tests/unit/memefficiency.tcl @@ -55,31 +55,35 @@ start_server {tags {"defrag"}} { puts "frag $frag" } assert {$frag >= 1.4} - r config set activedefrag yes + catch {r config set activedefrag yes} e + if {![string match {DISABLED*} $e]} { + # Wait for the active defrag to start working (decision once a + # second). + wait_for_condition 50 100 { + [s active_defrag_running] ne 0 + } else { + fail "defrag not started." + } - # wait for the active defrag to start working (decision once a second) - wait_for_condition 50 100 { - [s active_defrag_running] ne 0 + # Wait for the active defrag to stop working. + wait_for_condition 100 100 { + [s active_defrag_running] eq 0 + } else { + puts [r info memory] + puts [r memory malloc-stats] + fail "defrag didn't stop." + } + + # Test the the fragmentation is lower. + after 120 ;# serverCron only updates the info once in 100ms + set frag [s allocator_frag_ratio] + if {$::verbose} { + puts "frag $frag" + } + assert {$frag < 1.1} } else { - fail "defrag not started." + set _ "" } - - # wait for the active defrag to stop working - wait_for_condition 100 100 { - [s active_defrag_running] eq 0 - } else { - puts [r info memory] - puts [r memory malloc-stats] - fail "defrag didn't stop." - } - - # test the the fragmentation is lower - after 120 ;# serverCron only updates the info once in 100ms - set frag [s allocator_frag_ratio] - if {$::verbose} { - puts "frag $frag" - } - assert {$frag < 1.1} } {} test "Active defrag big keys" { @@ -150,44 +154,48 @@ start_server {tags {"defrag"}} { assert {$frag >= $expected_frag} r config set latency-monitor-threshold 5 r latency reset - r config set activedefrag yes - # wait for the active defrag to start working (decision once a second) - wait_for_condition 50 100 { - [s active_defrag_running] ne 0 - } else { - fail "defrag not started." - } - - # wait for the active defrag to stop working - wait_for_condition 500 100 { - [s active_defrag_running] eq 0 - } else { - puts [r info memory] - puts [r memory malloc-stats] - fail "defrag didn't stop." - } - - # test the the fragmentation is lower - after 120 ;# serverCron only updates the info once in 100ms - set frag [s allocator_frag_ratio] - set max_latency 0 - foreach event [r latency latest] { - lassign $event eventname time latency max - if {$eventname == "active-defrag-cycle"} { - set max_latency $max + catch {r config set activedefrag yes} e + if {![string match {DISABLED*} $e]} { + # wait for the active defrag to start working (decision once a second) + wait_for_condition 50 100 { + [s active_defrag_running] ne 0 + } else { + fail "defrag not started." } + + # wait for the active defrag to stop working + wait_for_condition 500 100 { + [s active_defrag_running] eq 0 + } else { + puts [r info memory] + puts [r memory malloc-stats] + fail "defrag didn't stop." + } + + # test the the fragmentation is lower + after 120 ;# serverCron only updates the info once in 100ms + set frag [s allocator_frag_ratio] + set max_latency 0 + foreach event [r latency latest] { + lassign $event eventname time latency max + if {$eventname == "active-defrag-cycle"} { + set max_latency $max + } + } + if {$::verbose} { + puts "frag $frag" + puts "max latency $max_latency" + puts [r latency latest] + puts [r latency history active-defrag-cycle] + } + assert {$frag < 1.1} + # due to high fragmentation, 10hz, and active-defrag-cycle-max set to 75, + # we expect max latency to be not much higher than 75ms + assert {$max_latency <= 80} + } else { + set _ "" } - if {$::verbose} { - puts "frag $frag" - puts "max latency $max_latency" - puts [r latency latest] - puts [r latency history active-defrag-cycle] - } - assert {$frag < 1.1} - # due to high fragmentation, 10hz, and active-defrag-cycle-max set to 75, - # we expect max latency to be not much higher than 75ms - assert {$max_latency <= 80} } {} } }