1 # See the file LICENSE for redistribution information.
3 # Copyright (c) 2010, 2012 Oracle and/or its affiliates. All rights reserved.
8 # TEST Basic repmgr init test.
10 # TEST Run all combinations of the basic_repmgr_init_test.
12 proc repmgr003 { {display 0} {run 1} args } {
15 if { !$display && $is_freebsd_test == 1 } {
16 puts "Skipping replication manager tests on FreeBSD platform."
23 # This is the basis for simple repmgr internal init test cases. It starts
24 # an appointed master and two clients, processing transactions between each
25 # additional site. Then it verifies all expected transactions are
26 # replicated. The following parameters control runtime options:
27 # niter - number of records to process
28 # inmemdb - put databases in-memory (0, 1)
29 # inmemlog - put logs in-memory (0, 1)
30 # inmemrep - put replication files in-memory (0, 1)
31 # envprivate - put region files in-memory (0, 1)
32 # bulk - use bulk processing (0, 1)
34 proc basic_repmgr_init_test { niter inmemdb inmemlog \
35 inmemrep envprivate bulk args } {
42 global databases_in_memory
47 if { $is_freebsd_test == 1 } {
48 puts "Skipping basic_repmgr_init_test on FreeBSD platform."
53 set largs [convert_args $method $args]
55 # Set databases_in_memory for this test, preserving original value.
57 set restore_dbinmem $databases_in_memory
58 set databases_in_memory 1
62 if { $rep_verbose == 1 } {
63 set verbargs " -verbose {$verbose_type on} "
67 set ports [available_ports $nsites]
69 set masterdir $testdir/MASTERDIR
70 set clientdir $testdir/CLIENTDIR
71 set clientdir2 $testdir/CLIENTDIR2
75 file mkdir $clientdir2
77 # In-memory logs require a large log buffer, and cannot
78 # be used with -txn nosync. Adjust the args.
81 set logtype "in-memory"
84 set logargs [adjust_logargs $logtype]
85 set txnargs [adjust_txnargs $logtype]
87 # Determine in-memory replication argument for environments. Also
88 # beef up cachesize for clients because the second client will need
89 # to catch up with a few sets of records which could build up in the
90 # tempdb, which is in-memory in this case.
92 set repmemarg " -rep_inmem_files "
93 set cachesize [expr 2 * (1024 * 1024)]
94 set cacheargs "-cachesize { 0 $cachesize 1 }"
100 # Determine argument for region files.
102 set private "-private "
107 print_repmgr_headers basic_repmgr_init_test $niter $inmemdb\
108 $inmemlog $inmemrep $envprivate $bulk
111 puts "\tBasic repmgr init test.a: Start a master."
112 set ma_envcmd "berkdb_env_noerr -create $verbargs $private \
114 -errpfx MASTER -home $masterdir -rep -thread $repmemarg"
115 set masterenv [eval $ma_envcmd]
116 $masterenv repmgr -ack all \
117 -local [list 127.0.0.1 [lindex $ports 0]] \
120 puts "\tBasic repmgr init test.b: Run some transactions at master."
121 eval rep_test $method $masterenv NULL $niter 0 0 0 $largs
124 puts "\tBasic repmgr init test.c: Start first client."
125 set cl_envcmd "berkdb_env_noerr -create $verbargs $private \
126 $logargs $txnargs $cacheargs \
127 -errpfx CLIENT -home $clientdir -rep -thread $repmemarg"
128 set clientenv [eval $cl_envcmd]
129 $clientenv repmgr -ack all \
130 -local [list 127.0.0.1 [lindex $ports 1]] \
131 -remote [list 127.0.0.1 [lindex $ports 0]] \
132 -remote [list 127.0.0.1 [lindex $ports 2]] \
134 await_startup_done $clientenv
137 # Use of -ack all guarantees replication complete before repmgr send
138 # function returns and rep_test finishes.
140 puts "\tBasic repmgr init test.d: Run some more transactions at master."
142 error_check_good set_bulk [$masterenv rep_config {bulk on}] 0
143 eval rep_test_bulk $method $masterenv NULL $niter 0 0 0 $largs
145 # Must turn off bulk because some configs (debug_rop/wop)
146 # generate log records when verifying databases.
147 error_check_good set_bulk [$masterenv rep_config {bulk off}] 0
149 eval rep_test $method $masterenv NULL $niter $niter 0 0 $largs
153 puts "\tBasic repmgr init test.e: Start second client."
154 set cl_envcmd "berkdb_env_noerr -create $verbargs $private \
155 $logargs $txnargs $cacheargs \
156 -errpfx CLIENT2 -home $clientdir2 -rep -thread $repmemarg"
157 set clientenv2 [eval $cl_envcmd]
158 $clientenv2 repmgr -ack all \
159 -local [list 127.0.0.1 [lindex $ports 2]] \
160 -remote [list 127.0.0.1 [lindex $ports 0]] \
161 -remote [list 127.0.0.1 [lindex $ports 1]] \
163 await_startup_done $clientenv2
165 puts "\tBasic repmgr init test.f: Verifying client database contents."
166 rep_verify $masterdir $masterenv $clientdir $clientenv 1 1 1
167 rep_verify $masterdir $masterenv $clientdir2 $clientenv2 1 1 1
169 # For in-memory replication, verify replication files not there.
171 puts "\tBasic repmgr init test.g:\
172 Verify no replication files on disk."
173 no_rep_files_on_disk $masterdir
174 no_rep_files_on_disk $clientdir
175 no_rep_files_on_disk $clientdir2
178 # For private envs, verify region files are not on disk.
180 puts "\tBasic repmgr init test.h:\
181 Verify no region files on disk."
182 no_region_files_on_disk $masterdir
183 no_region_files_on_disk $clientdir
184 no_region_files_on_disk $clientdir2
187 # Restore original databases_in_memory value.
189 set databases_in_memory $restore_dbinmem
192 error_check_good client2_close [$clientenv2 close] 0
193 error_check_good client_close [$clientenv close] 0
194 error_check_good masterenv_close [$masterenv close] 0