File: repmgr033.tcl

package info (click to toggle)
db5.3 5.3.28%2Bdfsg2-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 158,500 kB
  • sloc: ansic: 448,411; java: 111,824; tcl: 80,544; sh: 44,264; cs: 33,697; cpp: 21,604; perl: 14,557; xml: 10,799; makefile: 4,077; javascript: 1,998; yacc: 1,003; awk: 965; sql: 801; erlang: 342; python: 216; php: 24; asm: 14
file content (104 lines) | stat: -rw-r--r-- 3,048 bytes parent folder | download | duplicates (9)
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
# See the file LICENSE for redistribution information.
#
# Copyright (c) 2011, 2013 Oracle and/or its affiliates.  All rights reserved.
#
# TEST	repmgr033
# TEST	Under quorum policy, if the number of peers in the group is less than a
# TEST	majority, that's still OK.

proc repmgr033 { { tnum "033" } args } {

	source ./include.tcl 

	if { $is_freebsd_test == 1 } { 
		puts "Skipping replication manager test on FreeBSD."
		return
	}

	set method "btree"
	set args [convert_args $method $args]
	
	puts "Repmgr$tnum: Test quorum policy when the number of peers\
	    is less than a majority."
	repmgr033_sub $method $tnum $args
}

proc repmgr033_sub { method tnum largs } {
	global rep_verbose
	global testdir

	set rv off
	if { $rep_verbose == 1 } {
		set rv on
	}

	env_cleanup $testdir
	foreach {portA portB portC portD portE} [available_ports 5] {}

	set dirA $testdir/A
	set dirB $testdir/B
	set dirC $testdir/C
	set dirD $testdir/D
	set dirE $testdir/E

	file mkdir $dirA
	file mkdir $dirB
	file mkdir $dirC
	file mkdir $dirD
	file mkdir $dirE
    
	puts -nonewline "\tRepmgr$tnum: Set up a group of 5"
	set envA [berkdb env -create -errpfx A -home $dirA -txn -rep -thread \
	    -verbose [list rep $rv] -event]
	$envA repmgr -local [list 127.0.0.1 $portA] -start master
	puts -nonewline "." ; flush stdout

	set envB [berkdb env -create -errpfx B -home $dirB -txn -rep -thread \
	    -verbose [list rep $rv]]
	$envB repmgr -local [list 127.0.0.1 $portB] \
	    -remote [list 127.0.0.1 $portA] -start client
	await_startup_done $envB
	puts -nonewline "." ; flush stdout

	# These last three clients have priority 0, making them unelectable. 
	set envC [berkdb env -create -errpfx C -home $dirC -txn -rep -thread \
	    -verbose [list rep $rv]]
	$envC repmgr -local [list 127.0.0.1 $portC] \
	    -remote [list 127.0.0.1 $portA] -start client -pri 0
	await_startup_done $envC
	puts -nonewline "." ; flush stdout

	set envD [berkdb env -create -errpfx D -home $dirD -txn -rep -thread \
	    -verbose [list rep $rv]]
	$envD repmgr -local [list 127.0.0.1 $portD] \
	    -remote [list 127.0.0.1 $portA] -start client -pri 0
	await_startup_done $envD
	puts -nonewline "." ; flush stdout

	set envE [berkdb env -create -errpfx E -home $dirE -txn -rep -thread \
	    -verbose [list rep $rv]]
	$envE repmgr -local [list 127.0.0.1 $portE] \
	    -remote [list 127.0.0.1 $portA] -pri 0 -start client
	await_startup_done $envE
	puts "."

	puts "\tRepmgr$tnum: Write updates and check perm_failed event"
	$envA event_info -clear
	set niter 1
	rep_test $method $envA NULL $niter 0 0 0 $largs
	error_check_good nofailure \
	    [string length [find_event [$envA event_info] perm_failed]] 0

	# If site B, the only other electable site, is missing, then we should
	# get a perm failure, because the other clients' acks are worthless.
	$envB close
	rep_test $method $envA NULL $niter 0 0 0 $largs
	error_check_bad failure \
	    [string length [find_event [$envA event_info] perm_failed]] 0

	# Clean up.
	$envE close
	$envD close
	$envC close
	$envA close
}