代码拉取完成,页面将自动刷新
463
fix inplace alter rollback
已合并
【问题场景】
CREATE TABLE t1(name char,a int,b double);
ALTER TABLE t1 ADD UNIQUE INDEX idx11 (((regexp_substr(name,1,3)))); # cantian coredump
ALTER TABLE t1 ADD UNIQUE INDEX idx10 (((regexp_instr(name,1,3)))); # cantian coredump
【问题原因】
- alter table 失败:
// alter 失败位置
tse_alter_table
--> tse_alter_table_atomic_impl
--> knl_alter_table4mysql
--> knl_alter_single_action
--> knl_reopen_dc_in_alter_constraints
// 报错日志
CT-00606:[knl_reopen_dc_in_alter_constraints]:knl_open_dc failed,Inconsistent datatypes, expected VARCHAR - got BINARY_INTEGER [knl_interface.c:15207]
CT-00606:[knl_alter_single_action]: knl_reopen_dc_in_alter_constraints failed,Inconsistent datatypes, expected VARCHAR - got BINARY_INTEGER [knl_interface.c:15240]
CT-00606:[for mysql]alter table t1 fail, count:0,Inconsistent datatypes, expected VARCHAR - got BINARY_INTEGER [knl_interface.c:15272]
- alter 失败导致回滚
// rollback 失败位置
tse_trx_rollback
--> tse_ddl_rollback_update_dc
--> knl_open_dc_by_id // 失败
--> assert(0) // coredump
【修改方案】
- 如果alter中open dc失败,那rollback时失败就是正常的,不能assert(0); 因此修改rollback中tse_ddl_rollback_update_dc的失败处理逻辑;
- 调整rollback中代码顺序,如:赋有效/无效值和失败提前return等;
- MySQL和参天函数索引实现不同,参天目前保持报错。