| 
									
										
										
										
											2015-10-09 15:47:17 +08:00
										 |  |  | start_server {tags {"lazyfree"}} { | 
					
						
							|  |  |  |     test "UNLINK can reclaim memory in background" { | 
					
						
							|  |  |  |         set orig_mem [s used_memory] | 
					
						
							|  |  |  |         set args {} | 
					
						
							|  |  |  |         for {set i 0} {$i < 100000} {incr i} { | 
					
						
							|  |  |  |             lappend args $i | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         r sadd myset {*}$args | 
					
						
							|  |  |  |         assert {[r scard myset] == 100000} | 
					
						
							|  |  |  |         set peak_mem [s used_memory] | 
					
						
							|  |  |  |         assert {[r unlink myset] == 1} | 
					
						
							|  |  |  |         assert {$peak_mem > $orig_mem+1000000} | 
					
						
							|  |  |  |         wait_for_condition 50 100 { | 
					
						
							|  |  |  |             [s used_memory] < $peak_mem && | 
					
						
							|  |  |  |             [s used_memory] < $orig_mem*2 | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             fail "Memory is not reclaimed by UNLINK" | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test "FLUSHDB ASYNC can reclaim memory in background" { | 
					
						
							| 
									
										
										
										
											2021-10-26 18:02:31 +08:00
										 |  |  |         # make the previous test is really done before sampling used_memory
 | 
					
						
							| 
									
										
										
										
											2021-11-02 22:42:53 +08:00
										 |  |  |         wait_lazyfree_done r | 
					
						
							| 
									
										
										
										
											2021-10-26 18:02:31 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-09 15:47:17 +08:00
										 |  |  |         set orig_mem [s used_memory] | 
					
						
							|  |  |  |         set args {} | 
					
						
							|  |  |  |         for {set i 0} {$i < 100000} {incr i} { | 
					
						
							|  |  |  |             lappend args $i | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         r sadd myset {*}$args | 
					
						
							|  |  |  |         assert {[r scard myset] == 100000} | 
					
						
							|  |  |  |         set peak_mem [s used_memory] | 
					
						
							|  |  |  |         r flushdb async | 
					
						
							|  |  |  |         assert {$peak_mem > $orig_mem+1000000} | 
					
						
							|  |  |  |         wait_for_condition 50 100 { | 
					
						
							|  |  |  |             [s used_memory] < $peak_mem && | 
					
						
							|  |  |  |             [s used_memory] < $orig_mem*2 | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             fail "Memory is not reclaimed by FLUSHDB ASYNC" | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-05-17 21:54:37 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     test "lazy free a stream with all types of metadata" { | 
					
						
							| 
									
										
										
										
											2021-05-19 21:06:43 +08:00
										 |  |  |         # make the previous test is really done before doing RESETSTAT
 | 
					
						
							| 
									
										
										
										
											2021-09-22 14:48:44 +08:00
										 |  |  |         wait_for_condition 50 100 { | 
					
						
							| 
									
										
										
										
											2021-05-19 21:06:43 +08:00
										 |  |  |             [s lazyfree_pending_objects] == 0 | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             fail "lazyfree isn't done" | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-17 21:54:37 +08:00
										 |  |  |         r config resetstat | 
					
						
							|  |  |  |         r config set stream-node-max-entries 5 | 
					
						
							|  |  |  |         for {set j 0} {$j < 1000} {incr j} { | 
					
						
							|  |  |  |             if {rand() < 0.9} { | 
					
						
							|  |  |  |                 r xadd stream * foo $j | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 r xadd stream * bar $j | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         r xgroup create stream mygroup 0 | 
					
						
							|  |  |  |         set records [r xreadgroup GROUP mygroup Alice COUNT 2 STREAMS stream >] | 
					
						
							|  |  |  |         r xdel stream [lindex [lindex [lindex [lindex $records 0] 1] 1] 0] | 
					
						
							|  |  |  |         r xack stream mygroup [lindex [lindex [lindex [lindex $records 0] 1] 0] 0] | 
					
						
							|  |  |  |         r unlink stream | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # make sure it was lazy freed
 | 
					
						
							| 
									
										
										
										
											2021-09-22 14:48:44 +08:00
										 |  |  |         wait_for_condition 50 100 { | 
					
						
							| 
									
										
										
										
											2021-05-17 21:54:37 +08:00
										 |  |  |             [s lazyfree_pending_objects] == 0 | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             fail "lazyfree isn't done" | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         assert_equal [s lazyfreed_objects] 1 | 
					
						
							| 
									
										
										
										
											2021-06-09 20:13:24 +08:00
										 |  |  |     } {} {needs:config-resetstat} | 
					
						
							| 
									
										
										
										
											2021-05-17 21:54:37 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     test "lazy free a stream with deleted cgroup" { | 
					
						
							|  |  |  |         r config resetstat | 
					
						
							|  |  |  |         r xadd s * a b | 
					
						
							|  |  |  |         r xgroup create s bla $ | 
					
						
							|  |  |  |         r xgroup destroy s bla | 
					
						
							|  |  |  |         r unlink s | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # make sure it was not lazy freed
 | 
					
						
							| 
									
										
										
										
											2021-09-22 14:48:44 +08:00
										 |  |  |         wait_for_condition 50 100 { | 
					
						
							| 
									
										
										
										
											2021-05-17 21:54:37 +08:00
										 |  |  |             [s lazyfree_pending_objects] == 0 | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             fail "lazyfree isn't done" | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         assert_equal [s lazyfreed_objects] 0 | 
					
						
							| 
									
										
										
										
											2021-06-09 20:13:24 +08:00
										 |  |  |     } {} {needs:config-resetstat} | 
					
						
							| 
									
										
										
										
											2015-10-09 15:47:17 +08:00
										 |  |  | } |