@@ -65,6 +65,19 @@ proc waitForBgsave r {
65
65
}
66
66
}
67
67
68
+ proc waitForBgrewriteaof r {
69
+ while 1 {
70
+ set i [$r info]
71
+ if {[string match {*bgrewriteaof_in_progress:1*} $i ]} {
72
+ puts -nonewline " \n Waiting for background AOF rewrite to finish... "
73
+ flush stdout
74
+ after 1000
75
+ } else {
76
+ break
77
+ }
78
+ }
79
+ }
80
+
68
81
proc randomInt {max} {
69
82
expr {int(rand()*$max )}
70
83
}
@@ -154,17 +167,36 @@ proc createComplexDataset {r ops} {
154
167
155
168
proc datasetDigest r {
156
169
set keys [lsort [split [$r keys *] " " ]]
157
- set digest [::sha1::sha1 -hex $keys ]
170
+ set digest {}
158
171
foreach k $keys {
159
172
set t [$r type $k ]
160
- switch t {
161
- {string } {set aux [::sha1::sha1 -hex [$r get $k ]]} \
162
- {list } {set aux [::sha1::sha1 -hex [$r lrange $k 0 -1]]} \
163
- {set } {set aux [::sha1::sha1 -hex [$r smembers $k ]]} \
164
- {zset} {set aux [::sha1::sha1 -hex [$r zrange $k 0 -1]]}
173
+ switch $t {
174
+ {string } {
175
+ set aux [::sha1::sha1 -hex [$r get $k ]]
176
+ } {list } {
177
+ if {[$r llen $k ] == 0} {
178
+ set aux {}
179
+ } else {
180
+ set aux [::sha1::sha1 -hex [$r lrange $k 0 -1]]
181
+ }
182
+ } {set } {
183
+ if {[$r scard $k ] == 0} {
184
+ set aux {}
185
+ } else {
186
+ set aux [::sha1::sha1 -hex [lsort [$r smembers $k ]]]
187
+ }
188
+ } {zset} {
189
+ if {[$r zcard $k ] == 0} {
190
+ set aux {}
191
+ } else {
192
+ set aux [::sha1::sha1 -hex [$r zrange $k 0 -1]]
193
+ }
194
+ } default {
195
+ error " Type not supported"
196
+ }
165
197
}
166
- append aux $digest
167
- set digest [::sha1::sha1 -hex $aux ]
198
+ if { $ aux eq {}} continue
199
+ set digest [::sha1::sha1 -hex [ join [ list $aux $digest $k ] " \n " ] ]
168
200
}
169
201
return $digest
170
202
}
@@ -1392,17 +1424,30 @@ proc main {server port} {
1392
1424
set sha1_after [datasetDigest $r ]
1393
1425
expr {$sha1 eq $sha1_after }
1394
1426
} {1}
1427
+
1428
+ test {Same dataset digest if saving/reloading as AOF?} {
1429
+ $r bgrewriteaof
1430
+ waitForBgrewriteaof $r
1431
+ $r debug loadaof
1432
+ set sha1_after [datasetDigest $r ]
1433
+ expr {$sha1 eq $sha1_after }
1434
+ } {1}
1395
1435
}
1396
1436
1397
- test {EXPIRES after a reload} {
1437
+ test {EXPIRES after a reload (snapshot + append only file) } {
1398
1438
$r flushdb
1399
1439
$r set x 10
1400
1440
$r expire x 1000
1401
1441
$r save
1402
1442
$r debug reload
1403
1443
set ttl [$r ttl x]
1404
- expr {$ttl > 900 && $ttl <= 1000}
1405
- } {1}
1444
+ set e1 [expr {$ttl > 900 && $ttl <= 1000}]
1445
+ $r bgrewriteaof
1446
+ waitForBgrewriteaof $r
1447
+ set ttl [$r ttl x]
1448
+ set e2 [expr {$ttl > 900 && $ttl <= 1000}]
1449
+ list $e1 $e2
1450
+ } {1 1}
1406
1451
1407
1452
# Leave the user with a clean DB before to exit
1408
1453
test {FLUSHDB} {
0 commit comments