File: binlog_ddl_half_atomic.inc

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 (115 lines) | stat: -rw-r--r-- 5,764 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
# ==== Purpose ====
# 2pc-aware DDL Query-log-event binlog event generator to be sourced from
# top-level files, e.g suite/binlog/t/binlog_half_crash_safe_ddl.test
# The file contains DDLs that are not fully crash-safe
# which include at this point general DDL:s like CREATE|DROP|ALTER table.
# See binlog_ddl.inc for the fully atomic ddl list.
#
# TODO: Fully-atomic reading statements could be migrated into binlog_ddl.inc
#
# ==== Implementation ====
# See comments in suite/binlog/t/binlog_half_crash_safe_ddl.test

# The result file records content of the binary log which in particular demonstrates
# xid field is in there.
--let $do_show_binlog_events= 1

# For dll in create-, drop-, alter-, rename- table(s), ... do
# {

# CREATE TABLE, (not CREATE..SELECT)
--let $ddl_query=CREATE TABLE $table (a int auto_increment primary key)

--let $pre_binlog_crash_check=SELECT count(*) = 0 FROM information_schema.tables WHERE table_name = '$table'
--let $post_binlog_crash_check=SELECT count(*) = 1 FROM information_schema.tables WHERE table_name = '$table'
  --source extra/binlog_tests/binlog_crash_safe_ddl.inc

# ALTER TABLE
--let $ddl_query_comment='Col b copy-added'
--let $ddl_query=ALTER TABLE $table ADD COLUMN b INT NOT NULL, ALGORITHM=COPY, COMMENT $ddl_query_comment
--let $post_binlog_crash_check=select TABLE_COMMENT LIKE $ddl_query_comment FROM information_schema.tables where table_name = '$table'
  --source extra/binlog_tests/binlog_crash_safe_ddl.inc

--let $ddl_query_comment='Index on b inplace-added'
--let $ddl_query=ALTER TABLE $table ADD INDEX idx(b), ALGORITHM= INPLACE, COMMENT $ddl_query_comment
--let $post_binlog_crash_check=select TABLE_COMMENT LIKE $ddl_query_comment FROM information_schema.tables where table_name = '$table'
  --source extra/binlog_tests/binlog_crash_safe_ddl.inc

--let $table_renamed=t_3
--let $ddl_query=ALTER TABLE $table RENAME $table_renamed
--let $post_binlog_crash_check=SELECT count(*) = 1 FROM information_schema.tables WHERE table_name = '$table_renamed'
  --source extra/binlog_tests/binlog_crash_safe_ddl.inc

# RENAME
--let $ddl_query=RENAME TABLE $table_renamed TO $table /* Name restored */
--let $pre_binlog_crash_check=SELECT count(*) = 1 FROM information_schema.tables WHERE table_name = '$table_renamed'
--let $post_binlog_crash_check=SELECT count(*) = 1 FROM information_schema.tables WHERE table_name = '$table'
  --source extra/binlog_tests/binlog_crash_safe_ddl.inc

# TRUNCATE
# This one is apparently not a DDL, but rather a satelite to the next TRUNCATE
--let $ddl_query=INSERT INTO $table SET a=1,b=1
--let $post_binlog_crash_check=SELECT count(*) = 1 FROM $table
  --source extra/binlog_tests/binlog_crash_safe_ddl.inc
#
--let $ddl_query=TRUNCATE TABLE $table
#
--let $pre_binlog_crash_check=SELECT count(*) = 1 FROM $table
--let $post_binlog_crash_check=SELECT count(*) = 0 FROM $table
  --source extra/binlog_tests/binlog_crash_safe_ddl.inc

#
# TABLESPACE
#
--let $do_pre_binlog=0
--let $ts=ts_0
--let $ddl_query=CREATE TABLESPACE $ts ADD DATAFILE 'ts_0.ibd'
--let $pre_binlog_crash_check= SELECT COUNT(*) = 0 FROM information_schema.INNODB_TABLESPACES WHERE name = '$ts'
--let $post_binlog_crash_check=   SELECT COUNT(*) = 1 FROM information_schema.INNODB_TABLESPACES WHERE name = '$ts'
  --source extra/binlog_tests/binlog_crash_safe_ddl.inc

# The following feature is just not implemented expect for NDB, e.g:
#--error ER_CHECK_NOT_IMPLEMENTED
#--let $ddl_query=ALTER TABLESPACE $ts ADD DATAFILE 'ts_1.ibd'
# Otherwise the after crash checks would be:
#--let $pre_binlog_crash_check= SELECT COUNT(*) = 0 FROM information_schema.INNODB_TABLESPACES WHERE name = '$ts'
#--let $post_binlog_crash_check=   SELECT COUNT(*) = 1 FROM information_schema.INNODB_TABLESPACES WHERE name = '$ts'
#  --source extra/binlog_tests/binlog_crash_safe_ddl.inc

--let $ddl_query=DROP TABLESPACE $ts
--let $pre_binlog_crash_check= SELECT COUNT(*) = 1 FROM information_schema.INNODB_TABLESPACES WHERE name = '$ts'
--let $post_binlog_crash_check=   SELECT COUNT(*) = 0 FROM information_schema.INNODB_TABLESPACES WHERE name = '$ts'
  --source extra/binlog_tests/binlog_crash_safe_ddl.inc

#
# CREATE,ALTER,DROP DB
#

--let $db=db_0
--let $collate_old=latin1_general_ci
--let $collate_new=utf8mb3_general_ci

--let $ddl_query=CREATE DATABASE $db DEFAULT COLLATE $collate_old
--let $pre_binlog_crash_check= SELECT count(*) = 0 FROM information_schema.SCHEMATA WHERE schema_name = '$db'
--let $post_binlog_crash_check=   SELECT count(*) = 1 FROM information_schema.SCHEMATA WHERE schema_name = '$db'
  --source extra/binlog_tests/binlog_crash_safe_ddl.inc

--let $ddl_query=ALTER DATABASE $db DEFAULT COLLATE $collate_new
--let $pre_binlog_crash_check= SELECT count(*) = 1 FROM information_schema.SCHEMATA WHERE schema_name = '$db' and default_collation_name = '$collate_old'
--let $post_binlog_crash_check=   SELECT count(*) = 1 FROM information_schema.SCHEMATA WHERE schema_name = '$db' and default_collation_name = '$collate_new'
  --source extra/binlog_tests/binlog_crash_safe_ddl.inc

--let $ddl_query=DROP DATABASE $db
--let $pre_binlog_crash_check= SELECT count(*) = 1 FROM information_schema.SCHEMATA WHERE schema_name = '$db'
--let $post_binlog_crash_check=   SELECT count(*) = 0 FROM information_schema.SCHEMATA WHERE schema_name = '$db'
  --source extra/binlog_tests/binlog_crash_safe_ddl.inc

#
# The following DROP query is also a part of the test's total cleanup.
#

# DROP TABLE
--let $ddl_query=DROP TABLE $table
--let $pre_binlog_crash_check=SELECT count(*) = 1 FROM information_schema.tables WHERE table_name = '$table'
--let $post_binlog_crash_check=SELECT count(*) = 0 FROM information_schema.tables WHERE table_name = '$table'
  --source extra/binlog_tests/binlog_crash_safe_ddl.inc