1
# See the file LICENSE for redistribution information.
3
# Copyright (c) 1996-2002
4
# Sleepycat Software. All rights reserved.
10
# TEST Verify that log_flush is flushing records correctly.
14
puts "Log003: Verify log_flush behavior"
16
set max [expr 1024 * 128]
18
set short_rec "abcdefghijklmnopqrstuvwxyz"
19
set long_rec [repeat $short_rec 200]
20
set very_long_rec [repeat $long_rec 4]
22
foreach rec "$short_rec $long_rec $very_long_rec" {
23
puts "\tLog003.a: Verify flush on [string length $rec] byte rec"
25
set env [berkdb_env -log -home $testdir \
26
-create -mode 0644 -log_max $max]
27
error_check_good envopen [is_valid_env $env] TRUE
29
set lsn [$env log_put $rec]
30
error_check_bad log_put [lindex $lsn 0] "ERROR:"
31
set ret [$env log_flush $lsn]
32
error_check_good log_flush $ret 0
34
# Now, we want to crash the region and recheck. Closing the
35
# log does not flush any records, so we'll use a close to
38
error_check_good log_env:close $ret 0
40
# Now, remove the log region
41
#set ret [berkdb envremove -home $testdir]
42
#error_check_good env:remove $ret 0
44
# Re-open the log and try to read the record.
45
set env [berkdb_env -create -home $testdir \
46
-log -mode 0644 -log_max $max]
47
error_check_good envopen [is_valid_env $env] TRUE
49
set logc [$env log_cursor]
50
error_check_good log_cursor [is_valid_logc $logc $env] TRUE
52
set gotrec [$logc get -first]
53
error_check_good lp_get [lindex $gotrec 1] $rec
55
# Close and unlink the file
56
error_check_good log_cursor:close:$logc [$logc close] 0
57
error_check_good env:close:$env [$env close] 0
58
error_check_good envremove [berkdb envremove -home $testdir] 0
62
foreach rec "$short_rec $long_rec $very_long_rec" {
64
Verify flush on non-last record [string length $rec]"
66
-create -log -home $testdir -mode 0644 -log_max $max]
67
error_check_good envopen [is_valid_env $env] TRUE
69
# Put 10 random records
70
for { set i 0 } { $i < 10 } { incr i} {
71
set r [random_data 450 0 0]
72
set lsn [$env log_put $r]
73
error_check_bad log_put [lindex $lsn 0] "ERROR:"
76
# Put the record we are interested in
77
set save_lsn [$env log_put $rec]
78
error_check_bad log_put [lindex $save_lsn 0] "ERROR:"
80
# Put 10 more random records
81
for { set i 0 } { $i < 10 } { incr i} {
82
set r [random_data 450 0 0]
83
set lsn [$env log_put $r]
84
error_check_bad log_put [lindex $lsn 0] "ERROR:"
88
set ret [$env log_flush $save_lsn]
89
error_check_good log_flush $ret 0
91
# Now, we want to crash the region and recheck. Closing the
92
# log does not flush any records, so we'll use a close to
96
# Now, close and remove the log region
97
error_check_good env:close:$env [$env close] 0
98
set ret [berkdb envremove -home $testdir]
99
error_check_good env:remove $ret 0
101
# Re-open the log and try to read the record.
102
set env [berkdb_env \
103
-home $testdir -create -log -mode 0644 -log_max $max]
104
error_check_good envopen [is_valid_env $env] TRUE
106
set logc [$env log_cursor]
107
error_check_good log_cursor [is_valid_logc $logc $env] TRUE
109
set gotrec [$logc get -set $save_lsn]
110
error_check_good lp_get [lindex $gotrec 1] $rec
112
# Close and unlink the file
113
error_check_good log_cursor:close:$logc [$logc close] 0
114
error_check_good env:close:$env [$env close] 0
115
error_check_good envremove [berkdb envremove -home $testdir] 0