~ubuntu-branches/ubuntu/precise/mysql-5.1/precise

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
#
# BUG#45214
# The common part of the "rpl_get_master_version_and_clock" test. 
# Restart slave under network disconnection between slave and master
# following the steps:
#    1 - Got DBUG_SYNC_POINT lock
#    2 - Set DBUG_SYNC_POINT before call mysql_real_query(...) function in get_master_version_and_clock(...) function and hang here
#    3 - shutdown master server for simulating network disconnection
#    4 - Release DBUG_SYNC_POINT lock
#    5 - Check if the slave I/O thread tries to reconnect to master. 
#
# Note: Please make sure initialize the $debug_lock when call the test script.
#
connection slave;
if (`SELECT '$debug_lock' = ''`)
{
    --die Cannot continue. Please set value for $debug_lock.
}

# Restart slave
--disable_warnings
stop slave;
source include/wait_for_slave_to_stop.inc;
start slave;
source include/wait_for_slave_to_start.inc;
connection master;
# Write file to make mysql-test-run.pl expect the "crash", but don't start
# it until it's told to
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
wait
EOF

# Send shutdown to the connected server and give
# it 10 seconds to die before zapping it
shutdown_server 10;

connection slave;
eval SELECT RELEASE_LOCK($debug_lock);

# Show slave last IO errno
connection slave;
source include/wait_for_slave_io_error.inc;
let $last_io_errno= query_get_value("show slave status", Last_IO_Errno, 1);
--echo Check network error happened here
if (`SELECT '$last_io_errno' = '2013' || # CR_SERVER_LOST
            '$last_io_errno' = '2003' || # CR_CONN_HOST_ERROR
            '$last_io_errno' = '2002' || # CR_CONNECTION_ERROR
            '$last_io_errno' = '2006' || # CR_SERVER_GONE_ERROR
            '$last_io_errno' = '1040' || # ER_CON_COUNT_ERROR
            '$last_io_errno' = '1053'    # ER_SERVER_SHUTDOWN
            `)
{
  --echo NETWORK ERROR
}

# Write file to make mysql-test-run.pl start up the server again
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
restart
EOF

connection master;
# Turn on reconnect
--enable_reconnect

# Call script that will poll the server waiting for it to be back online again
--source include/wait_until_connected_again.inc

# Turn off reconnect again
--disable_reconnect

connection slave;
source include/wait_for_slave_to_start.inc;