File: log_invalid_format.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (180 lines) | stat: -rw-r--r-- 5,751 bytes parent folder | download
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
# 1. Test redo log files with invalid value of redo format (from future).
# 2. Test redo log files filled with 0x00 only.

--source include/have_debug.inc

--source ../include/redo_log_error_patterns.inc

let $tmpdir = $MYSQLTEST_VARDIR/tmp;

let MYSQLD_DATADIR = $tmpdir/log_invalid_format;
--mkdir $MYSQLD_DATADIR


let MYSQLD_ERROR_LOG = $tmpdir/my_restart.err;
let SEARCH_FILE = $MYSQLD_ERROR_LOG;

--echo # Create new data directory (in order to corrupt its redo log files)...
--source include/initialize_datadir.inc

--force-rmdir $MYSQLD_DATADIR/#innodb_redo

--echo ############################################################################################
--echo # Case 1. Attempt to start with redo files in old location, filled with 0x00.
--echo ############################################################################################

--remove_file $SEARCH_FILE

--echo # Prepare...

let IB_LOGFILE0_PATH = $MYSQLD_DATADIR/ib_logfile0;
let IB_LOGFILE1_PATH = $MYSQLD_DATADIR/ib_logfile1;

perl;
sub create_empty_file {
    my ($file_path, $file_size) = @_;
    open my $fh, '>:raw', $file_path or die "open failed: $!\n";
    syswrite $fh, "\0" x $file_size or die "print failed: $!\n";
    close $fh or die "closed failed: $!\n";
}
create_empty_file($ENV{IB_LOGFILE0_PATH}, 4*1024*1024);
create_empty_file($ENV{IB_LOGFILE1_PATH}, 4*1024*1024);
EOF

let $i = 1;
while ($i <= 2) {
    --echo # Start MySQL... (attempt $i)
    --error 1,42
    --exec $MYSQLD --no-defaults $MYSQLD_ARGS --$UNKNOWN_PARAM

    --echo # Verify...

    let SEARCH_PATTERN = Unsupported redo log format \(v0\);
    # Expected: found
    --source include/search_pattern.inc

    let SEARCH_PATTERN = $PATTERN_UNKNOWN_PARAM;
    # Expected: not found
    --source include/search_pattern.inc

    inc $i;
}

--move_file $SEARCH_FILE $MYSQLTEST_VARDIR/log/log_invalid_format-1.err

--echo ############################################################################################
--echo # Case 2. Attempt to start with redo files in new location, filled with 0x00.
--echo ############################################################################################

--echo # Prepare...
--mkdir $MYSQLD_DATADIR/#innodb_redo

--move_file $IB_LOGFILE0_PATH $MYSQLD_DATADIR/#innodb_redo/#ib_redo1
--move_file $IB_LOGFILE1_PATH $MYSQLD_DATADIR/#innodb_redo/#ib_redo2

let $i = 1;
while ($i <= 2) {
    --echo # Start MySQL... (attempt $i)
    --error 1,42
    --exec $MYSQLD --no-defaults $MYSQLD_ARGS --$UNKNOWN_PARAM

    --echo # Verify...

    let SEARCH_PATTERN = Found redo log file.*#ib_redo1 which has format \(v0\) and is stored inside #innodb_redo;
    # Expected: found
    --source include/search_pattern.inc

    let SEARCH_PATTERN = $PATTERN_UNKNOWN_PARAM;
    # Expected: not found
    --source include/search_pattern.inc

    inc $i;
}

--move_file $MYSQLD_DATADIR/#innodb_redo/#ib_redo1 $IB_LOGFILE0_PATH
--move_file $MYSQLD_DATADIR/#innodb_redo/#ib_redo2 $IB_LOGFILE1_PATH

--move_file $SEARCH_FILE $MYSQLTEST_VARDIR/log/log_invalid_format-2.err

--force-rmdir $MYSQLD_DATADIR/#innodb_redo

--echo ############################################################################################
--echo # Case 3. Attempt to start with redo files in old location, with future format (4294967295).
--echo ############################################################################################

--echo # Prepare...
perl;
sub log_update_file_format {
    my ($file_path, $format) = @_;
    open my $fh, '+<:raw', $file_path or die "open failed: $!\n";
    seek $fh, 0, 0;
    syswrite($fh, pack('N', $format), 4) > 0 or die "print failed: $!\n";
    close $fh or die "closed failed: $!\n";
}
log_update_file_format($ENV{IB_LOGFILE0_PATH}, 4294967295);
log_update_file_format($ENV{IB_LOGFILE1_PATH}, 4294967295);
EOF

let $i = 1;
while ($i <= 2) {
    --echo # Start MySQL... (attempt $i)
    --error 1,42
    --exec $MYSQLD --no-defaults $MYSQLD_ARGS --debug="d,log_header_checksum_disabled" --$UNKNOWN_PARAM

    --echo # Verify...

    let SEARCH_PATTERN = Found redo log file .*ib_logfile0 which has format \(v4294967295\) and is stored outside #innodb_redo;
    # Expected: found
    --source include/search_pattern.inc

    let SEARCH_PATTERN = $PATTERN_UNKNOWN_PARAM;
    # Expected: not found
    --source include/search_pattern.inc

    inc $i;
}

--move_file $SEARCH_FILE $MYSQLTEST_VARDIR/log/log_invalid_format-3.err

--echo ############################################################################################
--echo # Case 4. Attempt to start with redo files in new location, with future format (4294967295).
--echo ############################################################################################

--echo # Prepare...
--mkdir $MYSQLD_DATADIR/#innodb_redo

--move_file $IB_LOGFILE0_PATH $MYSQLD_DATADIR/#innodb_redo/#ib_redo1
--move_file $IB_LOGFILE1_PATH $MYSQLD_DATADIR/#innodb_redo/#ib_redo2

let $i = 1;
while ($i <= 2) {
    --echo # Start MySQL... (attempt $i)
    --error 1,42
    --exec $MYSQLD --no-defaults $MYSQLD_ARGS --debug="d,log_header_checksum_disabled" --$UNKNOWN_PARAM

    --echo # Verify...

    let SEARCH_PATTERN = Unknown redo log format \(v4294967295\) in file.*#ib_redo1;
    # Expected: found
    --source include/search_pattern.inc

    let SEARCH_PATTERN = $PATTERN_UNKNOWN_PARAM;
    # Expected: not found
    --source include/search_pattern.inc

    inc $i;
}

--move_file $SEARCH_FILE $MYSQLTEST_VARDIR/log/log_invalid_format-4.err

--echo ############################################################################################

--echo # Cleanup...

--force-rmdir $MYSQLD_DATADIR

let MYSQLD_ARGS=;
let MYSQLD_DATADIR=;
let MYSQLD_ERROR_LOG=;
let SEARCH_FILE=;
let SEARCH_PATTERN=;