summaryrefslogtreecommitdiff
path: root/test/bigfile001.tcl
blob: 05763d3db38483462610b4b3554ed65dafb177fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# See the file LICENSE for redistribution information.
#
# Copyright (c) 2001-2009 Oracle.  All rights reserved.
#
# $Id$
#
# TEST	bigfile001
# TEST	Create a database greater than 4 GB in size.  Close, verify.
# TEST	Grow the database somewhat.  Close, reverify.  Lather, rinse,
# TEST	repeat.  Since it will not work on all systems, this test is
# TEST	not run by default.
proc bigfile001 { { itemsize 4096 } \
    { nitems 1048576 } { growby 5000 } { growtms 2 } args } {
	source ./include.tcl

	set method "btree"
	set args [convert_args $method $args]
	set omethod [convert_method $method]
	global is_fat32
	if { $is_fat32 } {
		puts "Skipping bigfile001 for FAT32 file system."
		return
	}
	puts "Bigfile001: $method ($args) $nitems * $itemsize bytes of data"

	env_cleanup $testdir

	# Create the database.  Use 64K pages;  we want a good fill
	# factor, and page size doesn't matter much.  Use a 50MB
	# cache;  that should be manageable, and will help
	# performance.
	set dbname $testdir/big.db

	set db [eval {berkdb_open -create} {-pagesize 65536 \
	    -cachesize {0 50000000 0}} $omethod $args $dbname]
	error_check_good db_open [is_valid_db $db] TRUE

	puts "\tBigfile001.a: Creating database..."
	flush stdout

	set data [string repeat z $itemsize]

	for { set i 0 } { $i < $nitems } { incr i } {
		set key key[format %08u $i]

		error_check_good db_put($i) [$db put $key $data] 0

		if { $i % 50000 == 0 } {
			set pct [expr 100 * $i / $nitems]
			puts "\tBigfile001.a: $pct%..."
			flush stdout
		}
	}
	puts "\tBigfile001.a: 100%."
	error_check_good db_close [$db close] 0

	puts "\tBigfile001.b: Verifying database..."
	error_check_good verify \
	    [verify_dir $testdir "\t\t" 0 0 1 50000000] 0

	puts "\tBigfile001.c: Grow database $growtms times by $growby items"

	for { set j 0 } { $j < $growtms } { incr j } {
		set db [eval {berkdb_open} {-cachesize {0 50000000 0}} $dbname]
		error_check_good db_open [is_valid_db $db] TRUE
		puts -nonewline "\t\tBigfile001.c.1: Adding $growby items..."
		flush stdout
		for { set i 0 } { $i < $growby } { incr i } {
			set key key[format %08u $i].$j
			error_check_good db_put($j.$i) [$db put $key $data] 0
		}
		error_check_good db_close [$db close] 0
		puts "done."

		puts "\t\tBigfile001.c.2: Verifying database..."
		error_check_good verify($j) \
		    [verify_dir $testdir "\t\t\t" 0 0 1 50000000] 0
	}
}