1# See the file LICENSE for redistribution information. 2# 3# Copyright (c)-2009 Oracle. All rights reserved. 4# 5# TEST repmgr023 6# TEST Repmgr support for multi-process master. 7# TEST 8# TEST Start two processes at the master. 9# TEST Add a client site (not previously known to the master 10# TEST processes), and make sure 11# TEST both master processes connect to it. 12 13proc repmgr023 { } { 14 source ./include.tcl 15 16 set tnum "023" 17 puts "Repmgr$tnum: Two master processes both connect to a client." 18 set site_prog [setup_site_prog] 19 20 env_cleanup $testdir 21 22 set masterdir $testdir/MASTERDIR 23 set clientdir $testdir/CLIENTDIR 24 25 file mkdir $masterdir 26 file mkdir $clientdir 27 28 set ports [available_ports 2] 29 set master_port [lindex $ports 0] 30 set client_port [lindex $ports 1] 31 32 puts "\tRepmgr$tnum.a: Set up the master (on TCP port $master_port)." 33 set master [open "| $site_prog" "r+"] 34 fconfigure $master -buffering line 35 puts $master "home $masterdir" 36 puts $master "local $master_port" 37 make_dbconfig $masterdir {{rep_set_nsites 3}} 38 puts $master "output $testdir/m1output" 39 puts $master "open_env" 40 puts $master "start master" 41 set ignored [gets $master] 42 puts $master "open_db test.db" 43 puts $master "put myKey myValue" 44 45 # sync. 46 puts $master "echo setup" 47 set sentinel [gets $master] 48 error_check_good echo_setup $sentinel "setup" 49 50 puts "\tRepmgr$tnum.b: Start a second process at master." 51 set m2 [open "| $site_prog" "r+"] 52 fconfigure $m2 -buffering line 53 puts $m2 "home $masterdir" 54 puts $m2 "output $testdir/m2output" 55 puts $m2 "open_env" 56 puts $m2 "open_db test.db" 57 puts $m2 "put sub1 abc" 58 puts $m2 "echo firstputted" 59 set sentinel [gets $m2] 60 error_check_good m2_firstputted $sentinel "firstputted" 61 62 puts "\tRepmgr$tnum.c: Set up the client (on TCP port $client_port)." 63 set client [open "| $site_prog" "r+"] 64 fconfigure $client -buffering line 65 puts $client "home $clientdir" 66 puts $client "local $client_port" 67 make_dbconfig $clientdir {{rep_set_nsites 3}} 68 puts $client "output $testdir/coutput" 69 puts $client "open_env" 70 puts $client "remote localhost $master_port" 71 puts $client "start client" 72 error_check_match start_client [gets $client] "*Successful*" 73 74 puts "\tRepmgr$tnum.d: Wait for STARTUPDONE." 75 set clientenv [berkdb_env -home $clientdir] 76 await_startup_done $clientenv 77 78 # Initially there should be no rerequests. 79 set pfs1 [stat_field $clientenv rep_stat "Log records requested"] 80 error_check_good rerequest_count $pfs1 0 81 82 puts $m2 "put sub2 xyz" 83 puts $m2 "put sub3 ijk" 84 puts $m2 "put sub4 pqr" 85 puts $m2 "echo putted" 86 set sentinel [gets $m2] 87 error_check_good m2_putted $sentinel "putted" 88 puts $master "put another record" 89 puts $master "put and again" 90 puts $master "echo m1putted" 91 set sentinel [gets $master] 92 error_check_good m1_putted $sentinel "m1putted" 93 94 puts "\tRepmgr$tnum.e: Check that replicated data is visible at client." 95 puts $client "open_db test.db" 96 set expected {{myKey myValue} {sub1 abc} {sub2 xyz} {another record}} 97 verify_client_data $clientenv test.db $expected 98 99 # make sure there weren't too many rerequests 100 puts "\tRepmgr$tnum.f: Check rerequest stats" 101 set pfs [stat_field $clientenv rep_stat "Log records requested"] 102 error_check_good rerequest_count [expr $pfs <= 1] 1 103 104 puts "\tRepmgr$tnum.g: Clean up." 105 $clientenv close 106 close $client 107 close $master 108 close $m2 109} 110