[MDEV-5798] Unexpected change in error code on INSERT .. PARTITION causes replication abort Created: 2014-03-05  Updated: 2024-01-12

Status: Open
Project: MariaDB Server
Component/s: Replication
Affects Version/s: 10.0.8, 10.4, 10.5, 10.6, 10.11, 11.0, 11.1, 11.2, 11.3, 11.4
Fix Version/s: 10.4, 10.5, 10.6, 10.11, 11.0, 11.1, 11.2, 11.3

Type: Bug Priority: Minor
Reporter: Elena Stepanova Assignee: Andrei Elkin
Resolution: Unresolved Votes: 0
Labels: upstream

Issue Links:
Relates

 Description   

In the provided test case, before I run INSERT, I execute a seemingly harmless, albeit useless, ALTER on a non-existent table, which expectedly fails with ER_NO_SUCH_TABLE.

But after that, the next INSERT on the existing table fails with ER_WRONG_PARTITION_NAME. It is expected to fail, but without the previous unrelated ALTER it fails with ER_NO_PARTITION_FOR_GIVEN_VALUE.

It wouldn't be so bad, but the whole sequence is executed on a master, the failed ALTER isn't written to the binary log, but INSERT might be, for example if it's run on a non-transactional table. In this case INSERT is written with ER_WRONG_PARTITION_NAME, but on a slave it causes ER_NO_PARTITION_FOR_GIVEN_VALUE, and this discrepancy causes replication failure.

--source include/have_partition.inc
--source include/master-slave.inc
--source include/have_binlog_format_statement.inc
 
CREATE TABLE IF NOT EXISTS t1 (a INT) 
ENGINE=MyISAM
PARTITION BY LIST(a) ( 
  PARTITION p0 VALUES IN (9, NULL), 
  PARTITION p1 VALUES IN (8, 2, 7), 
  PARTITION p2 VALUES IN (6, 4, 5), 
  PARTITION p3 VALUES IN (3, 1, 0) 
);
ALTER TABLE t1 DROP PARTITION p0;
 
####### Game changer
--error ER_NO_SUCH_TABLE
ALTER TABLE non_existent TRUNCATE PARTITION p1,p2;
#######
 
--error ER_NO_PARTITION_FOR_GIVEN_VALUE,ER_WRONG_PARTITION_NAME
INSERT INTO t1 PARTITION (p1,p2,p3) VALUES (0),(9);
SHOW WARNINGS;
 
--sync_slave_with_master

140305 23:11:27 [ERROR] Slave SQL: Query caused different errors on master and slave.     Error on master: message (format)='Incorrect partition name' error code=1567 ; Error on slave: actual message='Table has no partition for value 9', error code=1526. Default database: 'test'. Query: 'INSERT INTO t1 PARTITION (p1,p2,p3) VALUES (0),(9)', Internal MariaDB error code: 0
140305 23:11:27 [ERROR] Slave SQL: Table has no partition for value 9, Internal MariaDB error code: 1526



 Comments   
Comment by Elena Stepanova [ 2024-01-12 ]

Still reproducible on all existing versions.
I can't say whether it's reproducible on MySQL 8.x, as it refuses to create a partitioned MyISAM table in the provided test case.

Please also note the strangely looking error text (the "(format)" part):

Error on master: message (format)='Incorrect partition name'

Not sure whether it's a typo or it's trying to say something which I don't understand.

Generated at Thu Feb 08 07:07:08 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.