blob: 7893a8a7c0eed0d652f9c7e862004691385d1eca (
plain)
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
|
# See the file LICENSE for redistribution information.
#
# Copyright (c)-2009 Oracle. All rights reserved.
#
# TEST repmgr022
# TEST Basic test of repmgr's multi-process master support.
# TEST
# TEST Set up a simple 2-site group, create data and replicate it.
# TEST Add a second process at the master and have it write some
# TEST updates. It does not explicitly start repmgr (nor do any
# TEST replication configuration, for that matter). Its first
# TEST update triggers initiation of connections, and so it doesn't
# TEST get to the client without a log request. But later updates
# TEST should go directly.
proc repmgr022 { } {
source ./include.tcl
global rep_verbose
global verbose_type
set tnum "022"
puts "Repmgr$tnum: Basic repmgr multi-process master support."
set site_prog [setup_site_prog]
env_cleanup $testdir
set masterdir $testdir/MASTERDIR
set clientdir $testdir/CLIENTDIR
file mkdir $masterdir
file mkdir $clientdir
set ports [available_ports 2]
set master_port [lindex $ports 0]
set client_port [lindex $ports 1]
puts "\tRepmgr$tnum.a: Set up the master (on TCP port $master_port)."
set master [open "| $site_prog" "r+"]
fconfigure $master -buffering line
puts $master "home $masterdir"
puts $master "local $master_port"
make_dbconfig $masterdir {{rep_set_nsites 3}}
puts $master "output $testdir/m1output"
puts $master "open_env"
puts $master "start master"
error_check_match start_master [gets $master] "*Successful*"
puts $master "open_db test.db"
puts $master "put myKey myValue"
puts "\tRepmgr$tnum.b: Set up the client (on TCP port $client_port)."
set client [open "| $site_prog" "r+"]
fconfigure $client -buffering line
puts $client "home $clientdir"
puts $client "local $client_port"
make_dbconfig $clientdir {{rep_set_nsites 3}}
puts $client "output $testdir/coutput"
puts $client "open_env"
puts $client "remote localhost $master_port"
puts $client "start client"
error_check_match start_client [gets $client] "*Successful*"
puts "\tRepmgr$tnum.c: Wait for STARTUPDONE."
set clientenv [berkdb_env -home $clientdir]
await_startup_done $clientenv
puts "\tRepmgr$tnum.d: Start a second process at master."
set m2 [open "| $site_prog" "r+"]
fconfigure $m2 -buffering line
puts $m2 "home $masterdir"
puts $m2 "output $testdir/m2output"
puts $m2 "open_env"
puts $m2 "open_db test.db"
puts $m2 "put sub1 abc"
puts $m2 "echo firstputted"
set sentinel [gets $m2]
error_check_good m2_firstputted $sentinel "firstputted"
puts $m2 "put sub2 xyz"
puts $m2 "put sub3 ijk"
puts $m2 "put sub4 pqr"
puts $m2 "echo putted"
set sentinel [gets $m2]
error_check_good m2_putted $sentinel "putted"
puts $master "put another record"
puts $master "put and again"
puts $master "echo m1putted"
set sentinel [gets $master]
error_check_good m1_putted $sentinel "m1putted"
puts "\tRepmgr$tnum.e: Check that replicated data is visible at client."
puts $client "open_db test.db"
set expected {{myKey myValue} {sub1 abc} {sub2 xyz} {another record}}
verify_client_data $clientenv test.db $expected
# make sure there weren't too many rerequests
puts "\tRepmgr$tnum.f: Check rerequest stats"
set pfs [stat_field $clientenv rep_stat "Log records requested"]
error_check_good rerequest_count [expr $pfs <= 1] 1
puts "\tRepmgr$tnum.g: Clean up."
$clientenv close
close $client
close $master
close $m2
}
|