Xiaobing Fang created FLINK-40850:
-------------------------------------

             Summary: Fluss sink rejects pre-created primary-key tables with 
custom bucket keys
                 Key: FLINK-40850
                 URL: https://issues.apache.org/jira/browse/FLINK-40850
             Project: Flink
          Issue Type: Bug
          Components: Flink CDC
            Reporter: Xiaobing Fang


h2. Description

The Fluss sink rejects a pre-created table when its bucket keys differ from the 
default inferred from the primary key, even when the source and sink tables 
have identical definitions.

h2. Steps to reproduce

# Pre-create identical Fluss source and sink tables with:
## Columns: \{{id INT NOT NULL, tenant INT NOT NULL, marker STRING}}
## Primary key: \{{(id, tenant)}}
## Bucket keys: \{{(tenant, id)}}
## Bucket count: \{{2}}
# Start a Fluss-to-Fluss CDC pipeline without sink \{{bucket.key}} or 
\{{bucket.num}} overrides.

The initial \{{CreateTableEvent}} fails with:

{code}
ValidationException:
New Fluss table's bucket keys : [id, tenant]
Current Fluss's bucket keys: [tenant, id]
{code}

The same problem occurs when both tables use a valid bucket-key subset, such as 
\{{(tenant)}}.

h2. Root cause

{\{FlussConversions.toFlussTable()}} defaults unspecified bucket keys to 
primary keys minus partition keys. \{{FlussMetaDataApplier.sanityCheck()}} then 
compares this inferred list with the existing table's bucket keys using 
\{{List.equals}}, treating a table-creation default as an existing-table 
constraint.

h2. Expected behavior and proposed fix

Accept the compatible pre-created table and preserve its layout.

For existing primary-key tables without an explicit bucket-key override, accept 
target bucket keys that are a subset of the inferred keys, regardless of order. 
Preserve strict ordered comparison for explicit overrides and leave new-table 
creation unchanged.

Both cases were reproduced through \{{FlussMetadataApplierTest}} on 
\{{3.7-SNAPSHOT}}.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to