Open lichunzhu opened 2 years ago
Root cause:
Drainer doesn't handle create placement policy
type DDL job. create placement policy
has a 0 table id and goes to https://github.com/pingcap/tidb-binlog/blob/master/drainer/schema.go#L469 logic so it fails.
Have verified TiCDC doesn't have this bug, because TiCDC has a DDL allowlist, create placement policy
will be ignored.
ref: https://github.com/pingcap/tiflow/blob/be78431013772b41deab32ca9c1675b7d9cf1d80/pkg/filter/filter.go#L127
A allow list looks much better than a block list. I think we can apply the same logic to drainer.
Bug Report
Please answer these questions before submitting your issue. Thanks!
b. Run placement SQL in TiDB
mysql> CREATE PLACEMENT POLICY x1 FOLLOWERS=4; Query OK, 0 rows affected (0.18 sec)
mysql> CREATE TABLE T1 (ID INT) PLACEMENT POLICY =
x1
; Query OK, 0 rows affected (0.23 sec)What did you expect to see? Drainer replicates data successfully and filter this kind of DDL correctly.
What did you see instead? Drainer crashed.
Please provide the relate downstream type and version of drainer. (run
drainer -V
in terminal to get drainer's version) [2021/12/28 14:39:45.047 +08:00] [INFO] [version.go:50] ["Welcome to Drainer"] ["Release Version"=v5.3.0] ["Git Commit Hash"=c032e8ba9b524a6a698475a76cc2926db17b3cad] ["Build TS"="2021-11-16 11:53:46"] ["Go Version"=go1.16.4] ["Go OS/Arch"=darwin/amd64]