[ 
https://issues.apache.org/jira/browse/FLINK-40512?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated FLINK-40512:
-----------------------------------
    Labels: pull-request-available  (was: )

> PostgreSQL source emits relation schema events for tables outside the 
> configured table list
> -------------------------------------------------------------------------------------------
>
>                 Key: FLINK-40512
>                 URL: https://issues.apache.org/jira/browse/FLINK-40512
>             Project: Flink
>          Issue Type: New Feature
>    Affects Versions: cdc-3.6.0
>            Reporter: Hongshun Wang
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: cdc-3.7.0
>
>
> When a PostgreSQL source uses a publication covering all tables
> (`publication.autocreate.mode=all_tables` / `CREATE PUBLICATION ... FOR ALL 
> TABLES`),
> the Fluss YAML connector may receive schema events for tables that are not 
> included
> in the configured CDC table list.
> h3. Actual behavior
> PostgreSQL pgoutput sends Relation messages for all relations covered by the
> publication. Relation-derived schema records for excluded tables are emitted
> downstream and may be converted into schema change events, including
> CreateTableEvent, by PostgresPipelineRecordEmitter.
> As a result, the Fluss connector subscribes to and processes schemas belonging
> to unrelated tables.
> h3. Expected behavior
> Relation messages should still be consumed internally because they are 
> required
> for pgoutput tuple decoding. However, relation-derived schema records for 
> tables
> excluded by the configured table filter should not be emitted downstream.
> Signal events and schema events required for internal state recovery must 
> remain
> unaffected.
> h3. Root cause
> IncrementalSourceStreamFetcher#shouldEmit applies table and monitored-split
> filtering only to data change records.
> For every non-data-change record, it currently returns true unconditionally:
> {code:java}
> // always send the schema change event and signal event
> // we need record them to state of Flink
> return true;
> {code}
> PostgreSQL Relation messages are represented as schema records. Therefore,
> schemas for unrelated tables bypass taskContext.getTableFilter(), even when
> those tables are not part of the configured CDC table list.
> PostgresPipelineRecordEmitter#handleSchemaChangeRecord may subsequently infer
> and emit schema change events for those tables.
> h3. Steps to reproduce
> 1. Create a PostgreSQL publication covering all tables:
> {code:sql}
> CREATE PUBLICATION my_publication FOR ALL TABLES;
> {code}
> 2. Configure a PostgreSQL Pipeline YAML source to capture only a subset of the
>    database tables.
> 3. Configure Fluss as the sink and enable schema change processing.
> 4. Produce changes that cause pgoutput to send Relation messages for included
>    and excluded tables.
> 5. Observe that schema events, such as CreateTableEvent, for excluded tables
>    reach the downstream Fluss pipeline.
> h3. Relevant code
> * 
> org.apache.flink.cdc.connectors.base.source.reader.external.IncrementalSourceStreamFetcher#shouldEmit
> * 
> org.apache.flink.cdc.connectors.postgres.source.reader.PostgresPipelineRecordEmitter#handleSchemaChangeRecord



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

Reply via email to