File: repmgr003.tcl

package info (click to toggle)
db5.3 5.3.28%2Bdfsg2-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 158,500 kB
  • sloc: ansic: 448,411; java: 111,824; tcl: 80,544; sh: 44,264; cs: 33,697; cpp: 21,604; perl: 14,557; xml: 10,799; makefile: 4,077; javascript: 1,998; yacc: 1,003; awk: 965; sql: 801; erlang: 342; python: 216; php: 24; asm: 14
file content (195 lines) | stat: -rw-r--r-- 6,050 bytes parent folder | download | duplicates (8)
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# See the file LICENSE for redistribution information.
#
# Copyright (c) 2010, 2013 Oracle and/or its affiliates.  All rights reserved.
#
# $Id$
#
# TEST	repmgr003
# TEST	Basic repmgr init test.
# TEST
# TEST	Run all combinations of the basic_repmgr_init_test.
# TEST
proc repmgr003 { {display 0} {run 1} args } {

	source ./include.tcl
	if { !$display && $is_freebsd_test == 1 } {
		puts "Skipping replication manager tests on FreeBSD platform."
		return
	}

	run_repmgr_tests init
}

# This is the basis for simple repmgr internal init test cases.  It starts
# an appointed master and two clients, processing transactions between each
# additional site.  Then it verifies all expected transactions are 
# replicated.  The following parameters control runtime options:
#     niter    - number of records to process
#     inmemdb  - put databases in-memory (0, 1)
#     inmemlog - put logs in-memory (0, 1)
#     inmemrep - put replication files in-memory (0, 1)
#     envprivate - put region files in-memory (0, 1)
#     bulk     - use bulk processing (0, 1)
#
proc basic_repmgr_init_test { niter inmemdb inmemlog \
    inmemrep envprivate bulk args } {

	source ./include.tcl
	global rep_verbose
	global verbose_type
	global overflowword1
	global overflowword2
	global databases_in_memory
	set overflowword1 "0"
	set overflowword2 "0"
	set nsites 3

	if { $is_freebsd_test == 1 } {
		puts "Skipping basic_repmgr_init_test on FreeBSD platform."
		return
	}

	set method "btree"
	set largs [convert_args $method $args]

	# Set databases_in_memory for this test, preserving original value.
	if { $inmemdb } {
		set restore_dbinmem $databases_in_memory
		set databases_in_memory 1
	}

	set verbargs ""
	if { $rep_verbose == 1 } {
		set verbargs " -verbose {$verbose_type on} "
	}

	env_cleanup $testdir
	set ports [available_ports $nsites]

	set masterdir $testdir/MASTERDIR
	set clientdir $testdir/CLIENTDIR
	set clientdir2 $testdir/CLIENTDIR2

	file mkdir $masterdir
	file mkdir $clientdir
	file mkdir $clientdir2

	# In-memory logs require a large log buffer, and cannot
	# be used with -txn nosync.  Adjust the args.
	set logtype "on-disk"
	if { $inmemlog } {
		set logtype "in-memory"
	}

	set logargs [adjust_logargs $logtype]
	set txnargs [adjust_txnargs $logtype]

	# Determine in-memory replication argument for environments.  Also
	# beef up cachesize for clients because the second client will need 
	# to catch up with a few sets of records which could build up in the 
	# tempdb, which is in-memory in this case.
	if { $inmemrep } {
		set repmemarg " -rep_inmem_files "
		set cachesize [expr 2 * (1024 * 1024)]
		set cacheargs "-cachesize { 0 $cachesize 1 }"
	} else {
		set repmemarg ""
		set cacheargs ""
	}

	# Determine argument for region files. 
	if { $envprivate } {
		set private "-private "
	} else {
		set private ""
	}

	print_repmgr_headers basic_repmgr_init_test $niter $inmemdb\
	    $inmemlog $inmemrep $envprivate $bulk

	# Open a master.
	puts "\tBasic repmgr init test.a: Start a master."
	set ma_envcmd "berkdb_env_noerr -create $verbargs $private \
	    $logargs $txnargs \
	    -errpfx MASTER -home $masterdir -rep -thread $repmemarg"
	set masterenv [eval $ma_envcmd]
	$masterenv repmgr -ack all \
	    -local [list 127.0.0.1 [lindex $ports 0]] \
	    -start master

	puts "\tBasic repmgr init test.b: Run some transactions at master."
	eval rep_test $method $masterenv NULL $niter 0 0 0 $largs

	# Open first client
	puts "\tBasic repmgr init test.c: Start first client."
	set cl_envcmd "berkdb_env_noerr -create $verbargs $private \
	    $logargs $txnargs $cacheargs \
	    -errpfx CLIENT -home $clientdir -rep -thread $repmemarg"
	set clientenv [eval $cl_envcmd]
	$clientenv repmgr -ack all \
	    -local [list 127.0.0.1 [lindex $ports 1]] \
	    -remote [list 127.0.0.1 [lindex $ports 0]] \
	    -remote [list 127.0.0.1 [lindex $ports 2]] \
	    -start client
	await_startup_done $clientenv

	#
	# Use of -ack all guarantees replication complete before repmgr send
	# function returns and rep_test finishes.
	#
	puts "\tBasic repmgr init test.d: Run some more transactions at master."
	if { $bulk } {
		error_check_good set_bulk [$masterenv rep_config {bulk on}] 0
		eval rep_test_bulk $method $masterenv NULL $niter 0 0 0 $largs

		# Must turn off bulk because some configs (debug_rop/wop)
		# generate log records when verifying databases.
		error_check_good set_bulk [$masterenv rep_config {bulk off}] 0
	} else {
		eval rep_test $method $masterenv NULL $niter $niter 0 0 $largs
	}

	# Open second client
	puts "\tBasic repmgr init test.e: Start second client."
	set cl_envcmd "berkdb_env_noerr -create $verbargs $private \
	    $logargs $txnargs $cacheargs \
	    -errpfx CLIENT2 -home $clientdir2 -rep -thread $repmemarg"
	set clientenv2 [eval $cl_envcmd]
	$clientenv2 repmgr -ack all \
	    -local [list 127.0.0.1 [lindex $ports 2]] \
	    -remote [list 127.0.0.1 [lindex $ports 0]] \
	    -remote [list 127.0.0.1 [lindex $ports 1]] \
	    -start client
	await_startup_done $clientenv2

	puts "\tBasic repmgr init test.f: Verifying client database contents."
	rep_verify $masterdir $masterenv $clientdir $clientenv 1 1 1
	rep_verify $masterdir $masterenv $clientdir2 $clientenv2 1 1 1

	# For in-memory replication, verify replication files not there.
	if { $inmemrep } {
		puts "\tBasic repmgr init test.g:\
		    Verify no replication files on disk."
		no_rep_files_on_disk $masterdir
		no_rep_files_on_disk $clientdir
		no_rep_files_on_disk $clientdir2
	}

	# For private envs, verify region files are not on disk.
	if { $envprivate } {
		puts "\tBasic repmgr init test.h:\
		    Verify no region files on disk."
		no_region_files_on_disk $masterdir
		no_region_files_on_disk $clientdir
		no_region_files_on_disk $clientdir2
	}

	# Restore original databases_in_memory value.
	if { $inmemdb } {
		set databases_in_memory $restore_dbinmem
	}

	error_check_good client2_close [$clientenv2 close] 0
	error_check_good client_close [$clientenv close] 0
	error_check_good masterenv_close [$masterenv close] 0
}