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