[BugFix] Fix dcg meta inconsistency when partial update with auto increment column in column upsert mode. (backport #63370) (#63423)

Signed-off-by: srlch <linzichao@starrocks.com>
Co-authored-by: srlch <111035020+srlch@users.noreply.github.com>
This commit is contained in:
mergify[bot] 2025-09-23 07:25:57 +00:00 committed by GitHub
parent f3c0f6898b
commit a12237e952
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 93 additions and 2 deletions

View File

@ -699,8 +699,8 @@ Status RowsetColumnUpdateState::finalize(Tablet* tablet, Rowset* rowset, uint32_
* used and we need to discard the column for the keys which have already existed in the tablet.
*/
for (ColumnId cid : txn_meta.partial_update_column_ids()) {
if (txn_meta.has_auto_increment_partial_update_column_id() &&
cid == txn_meta.auto_increment_partial_update_column_id()) {
DCHECK(cid < tschema->columns().size());
if (txn_meta.has_auto_increment_partial_update_column_id() && tschema->column(cid).is_auto_increment()) {
// skip auto increment column if it is being used for partial update
continue;
}

View File

@ -833,4 +833,64 @@ SELECT * FROM t_alter_auto_increment_counter ORDER BY k;
-- !result
DROP TABLE t_alter_auto_increment_counter;
-- result:
-- !result
-- name: test_auto_increment_partial_update_column_upsert_2 @sequential
CREATE DATABASE test_auto_increment_partial_update_column_upsert_2;
-- result:
-- !result
ADMIN SET FRONTEND CONFIG ("auto_increment_cache_size" = "0");
USE test_auto_increment_partial_update_column_upsert_2;
-- result:
-- !result
CREATE TABLE `t_auto_increment_partial_update_column_upsert_2` (
`k` BIGINT NOT NULL COMMENT "",
`v1` BIGINT,
`v2` BIGINT,
`v3` BIGINT AUTO_INCREMENT,
`v4` BIGINT
) ENGINE=OLAP
PRIMARY KEY(`k`)
DISTRIBUTED BY HASH(`k`) BUCKETS 1
PROPERTIES (
"replicated_storage" = "true",
"replication_num" = "1"
);
-- result:
-- !result
INSERT INTO t_auto_increment_partial_update_column_upsert_2 VALUES (1, 2, 3, DEFAULT, 4);
-- result:
-- !result
SELECT * FROM t_auto_increment_partial_update_column_upsert_2;
-- result:
1 2 3 1 4
-- !result
shell: curl --location-trusted -u root: -T ${root_path}/lib/../common/data/stream_load/sr_auto_increment_partial_update_only.csv -XPUT -H partial_update:true -H partial_update_mode:column -H label:test_auto_increment_partial_update_column_upsert_12345 -H column_separator:, -H columns:k,v2,xx ${url}/api/test_auto_increment_partial_update_column_upsert_2/t_auto_increment_partial_update_column_upsert_2/_stream_load
-- result:
0
{
"Status": "Success",
"Message": "OK"
}
-- !result
sync;
-- result:
-- !result
SELECT * FROM t_auto_increment_partial_update_column_upsert_2;
-- result:
1 2 20 1 4
2 None 40 2 None
-- !result
INSERT INTO t_auto_increment_partial_update_column_upsert_2 VALUES (1, 300, 20, DEFAULT, 30), (2, 301, 40, DEFAULT, 50);
-- result:
-- !result
SELECT * FROM t_auto_increment_partial_update_column_upsert_2;
-- result:
1 300 20 3 30
2 301 40 4 50
-- !result
DROP TABLE t_auto_increment_partial_update_column_upsert_2;
-- result:
-- !result
DROP DATABASE test_auto_increment_partial_update_column_upsert_2;
-- result:
-- !result

View File

@ -373,3 +373,34 @@ ALTER TABLE t_alter_auto_increment_counter AUTO_INCREMENT = 300;
INSERT INTO t_alter_auto_increment_counter VALUES (3, DEFAULT);
SELECT * FROM t_alter_auto_increment_counter ORDER BY k;
DROP TABLE t_alter_auto_increment_counter;
-- name: test_auto_increment_partial_update_column_upsert_2 @sequential
CREATE DATABASE test_auto_increment_partial_update_column_upsert_2;
ADMIN SET FRONTEND CONFIG ("auto_increment_cache_size" = "0");
USE test_auto_increment_partial_update_column_upsert_2;
CREATE TABLE `t_auto_increment_partial_update_column_upsert_2` (
`k` BIGINT NOT NULL COMMENT "",
`v1` BIGINT,
`v2` BIGINT,
`v3` BIGINT AUTO_INCREMENT,
`v4` BIGINT
) ENGINE=OLAP
PRIMARY KEY(`k`)
DISTRIBUTED BY HASH(`k`) BUCKETS 1
PROPERTIES (
"replicated_storage" = "true",
"replication_num" = "1"
);
INSERT INTO t_auto_increment_partial_update_column_upsert_2 VALUES (1, 2, 3, DEFAULT, 4);
SELECT * FROM t_auto_increment_partial_update_column_upsert_2;
shell: curl --location-trusted -u root: -T ${root_path}/lib/../common/data/stream_load/sr_auto_increment_partial_update_only.csv -XPUT -H partial_update:true -H partial_update_mode:column -H label:test_auto_increment_partial_update_column_upsert_12345 -H column_separator:, -H columns:k,v2,xx ${url}/api/test_auto_increment_partial_update_column_upsert_2/t_auto_increment_partial_update_column_upsert_2/_stream_load
sync;
SELECT * FROM t_auto_increment_partial_update_column_upsert_2;
INSERT INTO t_auto_increment_partial_update_column_upsert_2 VALUES (1, 300, 20, DEFAULT, 30), (2, 301, 40, DEFAULT, 50);
SELECT * FROM t_auto_increment_partial_update_column_upsert_2;
DROP TABLE t_auto_increment_partial_update_column_upsert_2;
DROP DATABASE test_auto_increment_partial_update_column_upsert_2;