summaryrefslogtreecommitdiff
path: root/test/test087.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'test/test087.tcl')
-rw-r--r--test/test087.tcl293
1 files changed, 0 insertions, 293 deletions
diff --git a/test/test087.tcl b/test/test087.tcl
deleted file mode 100644
index e7557b7..0000000
--- a/test/test087.tcl
+++ /dev/null
@@ -1,293 +0,0 @@
-# See the file LICENSE for redistribution information.
-#
-# Copyright (c) 1999-2009 Oracle. All rights reserved.
-#
-# $Id$
-#
-# TEST test087
-# TEST Test of cursor stability when converting to and modifying
-# TEST off-page duplicate pages with subtransaction aborts. [#2373]
-# TEST
-# TEST Does the following:
-# TEST a. Initialize things by DB->putting ndups dups and
-# TEST setting a reference cursor to point to each. Do each put twice,
-# TEST first aborting, then committing, so we're sure to abort the move
-# TEST to off-page dups at some point.
-# TEST b. c_put ndups dups (and correspondingly expanding
-# TEST the set of reference cursors) after the last one, making sure
-# TEST after each step that all the reference cursors still point to
-# TEST the right item.
-# TEST c. Ditto, but before the first one.
-# TEST d. Ditto, but after each one in sequence first to last.
-# TEST e. Ditto, but after each one in sequence from last to first.
-# TEST occur relative to the new datum)
-# TEST f. Ditto for the two sequence tests, only doing a
-# TEST DBC->c_put(DB_CURRENT) of a larger datum instead of adding a
-# TEST new one.
-proc test087 { method {pagesize 512} {ndups 50} {tnum "087"} args } {
- source ./include.tcl
- global alphabet
-
- set args [convert_args $method $args]
- set encargs ""
- set args [split_encargs $args encargs]
- set omethod [convert_method $method]
-
- puts "Test$tnum $omethod ($args): "
- set eindex [lsearch -exact $args "-env"]
- #
- # If we are using an env, then return
- if { $eindex != -1 } {
- puts "Environment specified; skipping."
- return
- }
- set pgindex [lsearch -exact $args "-pagesize"]
- if { $pgindex != -1 } {
- puts "Test087: skipping for specific pagesizes"
- return
- }
- env_cleanup $testdir
- set testfile test$tnum.db
- set key "the key"
- append args " -pagesize $pagesize -dup"
-
- if { [is_record_based $method] || [is_rbtree $method] } {
- puts "Skipping for method $method."
- return
- } elseif { [is_compressed $args] == 1 } {
- puts "Test$tnum skipping for btree with compression."
- return
- } else {
- puts "Test$tnum: Cursor stability on dup. pages w/ aborts."
- }
-
- set env [eval {berkdb_env \
- -create -home $testdir -txn -pagesize $pagesize} $encargs]
- error_check_good env_create [is_valid_env $env] TRUE
-
- set db [eval {berkdb_open -auto_commit \
- -create -env $env -mode 0644} $omethod $args $testfile]
- error_check_good "db open" [is_valid_db $db] TRUE
-
- # Number of outstanding keys.
- set keys $ndups
-
- puts "\tTest$tnum.a: put/abort/put/commit loop;\
- $ndups dups, short data."
- set txn [$env txn]
- error_check_good txn [is_valid_txn $txn $env] TRUE
- for { set i 0 } { $i < $ndups } { incr i } {
- set datum [makedatum_t73 $i 0]
-
- set ctxn [$env txn -parent $txn]
- error_check_good ctxn(abort,$i) [is_valid_txn $ctxn $env] TRUE
- error_check_good "db put/abort ($i)" \
- [$db put -txn $ctxn $key $datum] 0
- error_check_good ctxn_abort($i) [$ctxn abort] 0
-
- verify_t73 is_long dbc [expr $i - 1] $key
-
- set ctxn [$env txn -parent $txn]
- error_check_good ctxn(commit,$i) [is_valid_txn $ctxn $env] TRUE
- error_check_good "db put/commit ($i)" \
- [$db put -txn $ctxn $key $datum] 0
- error_check_good ctxn_commit($i) [$ctxn commit] 0
-
- set is_long($i) 0
-
- set dbc($i) [$db cursor -txn $txn]
- error_check_good "db cursor ($i)"\
- [is_valid_cursor $dbc($i) $db] TRUE
- error_check_good "dbc get -get_both ($i)"\
- [$dbc($i) get -get_both $key $datum]\
- [list [list $key $datum]]
-
- verify_t73 is_long dbc $i $key
- }
-
- puts "\tTest$tnum.b: Cursor put (DB_KEYLAST); $ndups new dups,\
- short data."
-
- set ctxn [$env txn -parent $txn]
- error_check_good ctxn($i) [is_valid_txn $ctxn $env] TRUE
- for { set i 0 } { $i < $ndups } { incr i } {
- # !!! keys contains the number of the next dup
- # to be added (since they start from zero)
- set datum [makedatum_t73 $keys 0]
- set curs [$db cursor -txn $ctxn]
- error_check_good "db cursor create" [is_valid_cursor $curs $db]\
- TRUE
- error_check_good "c_put(DB_KEYLAST, $keys)"\
- [$curs put -keylast $key $datum] 0
-
- # We can't do a verification while a child txn is active,
- # or we'll run into trouble when DEBUG_ROP is enabled.
- # If this test has trouble, though, uncommenting this
- # might be illuminating--it makes things a bit more rigorous
- # and works fine when DEBUG_ROP is not enabled.
- # verify_t73 is_long dbc $keys $key
- error_check_good curs_close [$curs close] 0
- }
- error_check_good ctxn_abort [$ctxn abort] 0
- verify_t73 is_long dbc $keys $key
-
- puts "\tTest$tnum.c: Cursor put (DB_KEYFIRST); $ndups new dups,\
- short data."
-
- set ctxn [$env txn -parent $txn]
- error_check_good ctxn($i) [is_valid_txn $ctxn $env] TRUE
- for { set i 0 } { $i < $ndups } { incr i } {
- # !!! keys contains the number of the next dup
- # to be added (since they start from zero)
-
- set datum [makedatum_t73 $keys 0]
- set curs [$db cursor -txn $ctxn]
- error_check_good "db cursor create" [is_valid_cursor $curs $db]\
- TRUE
- error_check_good "c_put(DB_KEYFIRST, $keys)"\
- [$curs put -keyfirst $key $datum] 0
-
- # verify_t73 is_long dbc $keys $key
- error_check_good curs_close [$curs close] 0
- }
- # verify_t73 is_long dbc $keys $key
- # verify_t73 is_long dbc $keys $key
- error_check_good ctxn_abort [$ctxn abort] 0
- verify_t73 is_long dbc $keys $key
-
- puts "\tTest$tnum.d: Cursor put (DB_AFTER) first to last;\
- $keys new dups, short data"
- # We want to add a datum after each key from 0 to the current
- # value of $keys, which we thus need to save.
- set ctxn [$env txn -parent $txn]
- error_check_good ctxn($i) [is_valid_txn $ctxn $env] TRUE
- set keysnow $keys
- for { set i 0 } { $i < $keysnow } { incr i } {
- set datum [makedatum_t73 $keys 0]
- set curs [$db cursor -txn $ctxn]
- error_check_good "db cursor create" [is_valid_cursor $curs $db]\
- TRUE
-
- # Which datum to insert this guy after.
- set curdatum [makedatum_t73 $i 0]
- error_check_good "c_get(DB_GET_BOTH, $i)"\
- [$curs get -get_both $key $curdatum]\
- [list [list $key $curdatum]]
- error_check_good "c_put(DB_AFTER, $i)"\
- [$curs put -after $datum] 0
-
- # verify_t73 is_long dbc $keys $key
- error_check_good curs_close [$curs close] 0
- }
- error_check_good ctxn_abort [$ctxn abort] 0
- verify_t73 is_long dbc $keys $key
-
- puts "\tTest$tnum.e: Cursor put (DB_BEFORE) last to first;\
- $keys new dups, short data"
- set ctxn [$env txn -parent $txn]
- error_check_good ctxn($i) [is_valid_txn $ctxn $env] TRUE
- for { set i [expr $keys - 1] } { $i >= 0 } { incr i -1 } {
- set datum [makedatum_t73 $keys 0]
- set curs [$db cursor -txn $ctxn]
- error_check_good "db cursor create" [is_valid_cursor $curs $db]\
- TRUE
-
- # Which datum to insert this guy before.
- set curdatum [makedatum_t73 $i 0]
- error_check_good "c_get(DB_GET_BOTH, $i)"\
- [$curs get -get_both $key $curdatum]\
- [list [list $key $curdatum]]
- error_check_good "c_put(DB_BEFORE, $i)"\
- [$curs put -before $datum] 0
-
- # verify_t73 is_long dbc $keys $key
- error_check_good curs_close [$curs close] 0
- }
- error_check_good ctxn_abort [$ctxn abort] 0
- verify_t73 is_long dbc $keys $key
-
- puts "\tTest$tnum.f: Cursor put (DB_CURRENT), first to last,\
- growing $keys data."
- set ctxn [$env txn -parent $txn]
- error_check_good ctxn($i) [is_valid_txn $ctxn $env] TRUE
- for { set i 0 } { $i < $keysnow } { incr i } {
- set olddatum [makedatum_t73 $i 0]
- set newdatum [makedatum_t73 $i 1]
- set curs [$db cursor -txn $ctxn]
- error_check_good "db cursor create" [is_valid_cursor $curs $db]\
- TRUE
-
- error_check_good "c_get(DB_GET_BOTH, $i)"\
- [$curs get -get_both $key $olddatum]\
- [list [list $key $olddatum]]
- error_check_good "c_put(DB_CURRENT, $i)"\
- [$curs put -current $newdatum] 0
-
- set is_long($i) 1
-
- # verify_t73 is_long dbc $keys $key
- error_check_good curs_close [$curs close] 0
- }
- error_check_good ctxn_abort [$ctxn abort] 0
- for { set i 0 } { $i < $keysnow } { incr i } {
- set is_long($i) 0
- }
- verify_t73 is_long dbc $keys $key
-
- # Now delete the first item, abort the deletion, and make sure
- # we're still sane.
- puts "\tTest$tnum.g: Cursor delete first item, then abort delete."
- set ctxn [$env txn -parent $txn]
- error_check_good ctxn($i) [is_valid_txn $ctxn $env] TRUE
- set curs [$db cursor -txn $ctxn]
- error_check_good "db cursor create" [is_valid_cursor $curs $db] TRUE
- set datum [makedatum_t73 0 0]
- error_check_good "c_get(DB_GET_BOTH, 0)"\
- [$curs get -get_both $key $datum] [list [list $key $datum]]
- error_check_good "c_del(0)" [$curs del] 0
- error_check_good curs_close [$curs close] 0
- error_check_good ctxn_abort [$ctxn abort] 0
- verify_t73 is_long dbc $keys $key
-
- # Ditto, for the last item.
- puts "\tTest$tnum.h: Cursor delete last item, then abort delete."
- set ctxn [$env txn -parent $txn]
- error_check_good ctxn($i) [is_valid_txn $ctxn $env] TRUE
- set curs [$db cursor -txn $ctxn]
- error_check_good "db cursor create" [is_valid_cursor $curs $db] TRUE
- set datum [makedatum_t73 [expr $keys - 1] 0]
- error_check_good "c_get(DB_GET_BOTH, [expr $keys - 1])"\
- [$curs get -get_both $key $datum] [list [list $key $datum]]
- error_check_good "c_del(0)" [$curs del] 0
- error_check_good curs_close [$curs close] 0
- error_check_good ctxn_abort [$ctxn abort] 0
- verify_t73 is_long dbc $keys $key
-
- # Ditto, for all the items.
- puts "\tTest$tnum.i: Cursor delete all items, then abort delete."
- set ctxn [$env txn -parent $txn]
- error_check_good ctxn($i) [is_valid_txn $ctxn $env] TRUE
- set curs [$db cursor -txn $ctxn]
- error_check_good "db cursor create" [is_valid_cursor $curs $db] TRUE
- set datum [makedatum_t73 0 0]
- error_check_good "c_get(DB_GET_BOTH, 0)"\
- [$curs get -get_both $key $datum] [list [list $key $datum]]
- error_check_good "c_del(0)" [$curs del] 0
- for { set i 1 } { $i < $keys } { incr i } {
- error_check_good "c_get(DB_NEXT, $i)"\
- [$curs get -next] [list [list $key [makedatum_t73 $i 0]]]
- error_check_good "c_del($i)" [$curs del] 0
- }
- error_check_good curs_close [$curs close] 0
- error_check_good ctxn_abort [$ctxn abort] 0
- verify_t73 is_long dbc $keys $key
-
- # Close cursors.
- puts "\tTest$tnum.j: Closing cursors."
- for { set i 0 } { $i < $keys } { incr i } {
- error_check_good "dbc close ($i)" [$dbc($i) close] 0
- }
- error_check_good txn_commit [$txn commit] 0
- error_check_good "db close" [$db close] 0
- error_check_good "env close" [$env close] 0
-}