diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2016-12-17 21:28:53 -0800 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2016-12-17 21:28:53 -0800 |
commit | 54df2afaa61c6a03cbb4a33c9b90fa572b6d07b8 (patch) | |
tree | 18147b92b969d25ffbe61935fb63035cac820dd0 /db-4.8.30/test/repmgr032.tcl |
Berkeley DB 4.8 with rust build script for linux.
Diffstat (limited to 'db-4.8.30/test/repmgr032.tcl')
-rw-r--r-- | db-4.8.30/test/repmgr032.tcl | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/db-4.8.30/test/repmgr032.tcl b/db-4.8.30/test/repmgr032.tcl new file mode 100644 index 0000000..f76dfcc --- /dev/null +++ b/db-4.8.30/test/repmgr032.tcl @@ -0,0 +1,198 @@ +# See the file LICENSE for redistribution information. +# +# Copyright (c)-2009 Oracle. All rights reserved. +# +# TEST repmgr032 +# TEST Multi-process repmgr start-up policies. +# + +proc repmgr032 { } { + source ./include.tcl + + set tnum "032" + puts "Repmgr$tnum: repmgr multi-process start policies." + + env_cleanup $testdir + + file mkdir [set dira $testdir/A] + file mkdir [set dirb $testdir/B] + file mkdir [set dirc $testdir/C] + + set conf { + {rep_set_nsites 3} + {rep_set_timeout DB_REP_ELECTION_RETRY 3000000} + } + make_dbconfig $dira $conf + make_dbconfig $dirb $conf + make_dbconfig $dirc $conf + foreach {aport bport cport} [available_ports 3] {} + + puts "\tRepmgr$tnum.a: Create a master and client." + set cmds { + "home $dira" + "local $aport" + "output $testdir/a1output1" + "open_env" + "start master" + } + set a [open_site_prog [subst $cmds]] + + set cmds { + "home $dirb" + "local $bport" + "output $testdir/boutput1" + "remote localhost $aport" + "open_env" + "start client" + } + set b [open_site_prog [subst $cmds]] + + puts "\tRepmgr$tnum.b: Wait for start-up done at client." + set benv [berkdb_env -home $dirb] + await_startup_done $benv + + puts $a "open_db test.db" + puts $a "put key1 val1" + puts $a "echo done" + gets $a + + # + # 1. shutting down client and restarting as client should do nothing + # + puts "\tRepmgr$tnum.c: Shut down client, restart as client." + set elections0 [stat_field $benv rep_stat "Elections held"] + set aenv [berkdb_env -home $dira] + set requests0 [stat_field $aenv rep_stat "Client service requests"] + puts $b "exit" + gets $b + error_check_good eof1 [eof $b] 1 + close $b + set cmds { + "home $dirb" + "local $bport" + "output $testdir/boutput1" + "remote localhost $aport" + "open_env" + "start election" + } + set b [open_site_prog [subst $cmds]] + error_check_good already_startedup \ + [stat_field $benv rep_stat "Startup complete"] 1 + puts "\tRepmgr$tnum.d: Pause 20 seconds to check for start-up activity" + tclsleep 20 + error_check_good no_more_requests \ + [stat_field $aenv rep_stat "Client service requests"] $requests0 + error_check_good no_more_requests \ + [stat_field $benv rep_stat "Elections held"] $elections0 + + # + # 2. Start policy should be ignored if there's already a listener + # running in a separate process. + # + + # start a second process at master. Even though it specifies "election" + # as its start policy, the fact that a listener is already running + # should force it to continue as master (IMHO). + + puts "\tRepmgr$tnum.e: Second master process accepts existing role" + set cmds { + "home $dira" + "local $aport" + "output $testdir/a2output1" + "open_env" + "start election" + } + set a2 [open_site_prog [subst $cmds]] + + # Make sure we still seem to be master, by checking stats, and by trying + # to write a new transaction. + # + error_check_good still_master \ + [stat_field $aenv rep_stat "Role"] "master" + + puts $a2 "open_db test.db" + puts $a2 "put key2 val2" + puts $a2 "echo done" + gets $a2 + + # + # 3. Specifying MASTER start policy results in rep_start(MASTER), no + # matter what happened previously. + # + puts "\tRepmgr$tnum.f: Restart master as master." + + puts $a "exit" + gets $a + error_check_good eof2 [eof $a] 1 + close $a + puts $a2 "exit" + gets $a2 + error_check_good eof3 [eof $a2] 1 + close $a2 + + set initial_gen [stat_field $aenv rep_stat "Generation number"] + set cmds { + "home $dira" + "local $aport" + "output $testdir/a2output2" + "remote localhost $bport" + "open_env" + "start master" + } + set a [open_site_prog [subst $cmds]] + + # Since we were already master, the gen number shouldn't change. + error_check_good same_gen \ + [stat_field $aenv rep_stat "Generation number"] $initial_gen + + puts $a "exit" + gets $a + error_check_good eof4 [eof $a] 1 + close $a + puts $b "exit" + gets $b + error_check_good eof5 [eof $b] 1 + close $b + + puts "\tRepmgr$tnum.g: Restart client as master." + # Note that site A is not running at this point. + set cmds { + "home $dirb" + "local $bport" + "output $testdir/boutput3" + "open_env" + "start master" + } + set b [open_site_prog [subst $cmds]] + set gen [stat_field $benv rep_stat "Generation number"] + error_check_good bumped_gen [expr $gen > $initial_gen] 1 + + + # + # 4. Specifying CLIENT when we were MASTER causes a change + # + puts $b "exit" + gets $b + error_check_good eof6 [eof $b] 1 + close $b + $benv close + exec $util_path/db_recover -h $dirb + + puts "\tRepmgr$tnum.h: Restart master as client" + set initial_value [stat_field $aenv rep_stat "Elections held"] + set cmds { + "home $dira" + "local $aport" + "output $testdir/aoutput4" + "open_env" + "start election" + } + set a [open_site_prog [subst $cmds]] + puts "\tRepmgr$tnum.i: Pause for 10 seconds to wait for elections." + tclsleep 10 + set elections [stat_field $aenv rep_stat "Elections held"] + error_check_good bumped_gen [expr $elections > $initial_value] 1 + + $aenv close + close $a +} |