blob: 105f2b04b302f36b4c409596ff7307ab2e779a16 (
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
|
# See the file LICENSE for redistribution information.
#
# Copyright (c)-2009 Oracle. All rights reserved.
#
# TEST repmgr030
# TEST Subordinate connections and processes should not trigger elections.
proc repmgr030 { } {
source ./include.tcl
set tnum "030"
puts "Repmgr$tnum: Subordinate\
connections and processes should not trigger elections."
env_cleanup $testdir
foreach {mport cport} [available_ports 2] {}
file mkdir [set mdir $testdir/MASTER]
file mkdir [set cdir $testdir/CLIENT]
make_dbconfig $mdir [set dbconfig {{rep_set_nsites 3}}]
make_dbconfig $cdir $dbconfig
puts "\tRepmgr$tnum.a: Set up a pair of sites, two processes each."
set cmds {
"home $mdir"
"local $mport"
"output $testdir/m1output"
"open_env"
"start master"
}
set m1 [open_site_prog [subst $cmds]]
set cmds {
"home $mdir"
"local $mport"
"output $testdir/m2output"
"open_env"
"start master"
}
set m2 [open_site_prog [subst $cmds]]
# Force subordinate client process to be the one to inform master of its
# address, to be sure there's a connection. This shouldn't be
# necessary, but it's hard to verify this in a test.
#
set cmds {
"home $cdir"
"local $cport"
"output $testdir/c1output"
"open_env"
"start client"
}
set c1 [open_site_prog [subst $cmds]]
set cmds {
"home $cdir"
"local $cport"
"output $testdir/c2output"
"remote localhost $mport"
"open_env"
"start client"
}
set c2 [open_site_prog [subst $cmds]]
set cenv [berkdb_env -home $cdir]
await_startup_done $cenv
puts "\tRepmgr$tnum.b: Stop master's subordinate process (pause)."
close $m2
# Pause to let client notice the connection loss.
tclsleep 3
# The client main process is still running, but it shouldn't care about
# a connection loss to the master's subordinate process.
puts "\tRepmgr$tnum.c:\
Stop client's main process, then master's main process (pause)."
close $c1
tclsleep 2
close $m1
tclsleep 3
# If the client main process were still running, it would have reacted
# to the loss of the master by calling for an election. However, with
# only the client subordinate process still running, he cannot call for
# an election. So, we should see no elections ever having been
# started.
#
set election_count [stat_field $cenv rep_stat "Elections held"]
puts "\tRepmgr$tnum.d: Check election count ($election_count)."
error_check_good no_elections $election_count 0
$cenv close
close $c2
}
|