You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flink.apache.org by "Florian Vazelle (Jira)" <ji...@apache.org> on 2026/09/28 09:30:00 UTC
[jira] [Created] (FLINK-40829) operators hidden by `assign_timestamps_and_watermarks` get no uid, breaking `pipeline.auto-generate-uids: false`
Florian Vazelle created FLINK-40829:
---------------------------------------
Summary: operators hidden by `assign_timestamps_and_watermarks` get no uid, breaking `pipeline.auto-generate-uids: false`
Key: FLINK-40829
URL: https://issues.apache.org/jira/browse/FLINK-40829
Project: Flink
Issue Type: Bug
Components: API / Python
Reporter: Florian Vazelle
{{DataStream.assign_timestamps_and_watermarks()}} expands a *Python* {{TimestampAssigner}} into three transformations, but returns a {{DataStream}} which represents only the last one:
{noformat}
Extract-Timestamp (python) -> Timestamps/Watermarks (java) -> Remove-Timestamp (java map){noformat}
A uid set on the returned stream reaches {{Remove-Timestamp}} only. The two others are not reachable from the Python API, and with {{pipeline.auto-generate-uids: false}} (or {{{}ExecutionConfig.disable_auto_generated_uids(){}}}) the job cannot be submitted at all:
{noformat}
java.lang.IllegalStateException: Auto generated UIDs have been disabled but no UID or hash has been assigned to operator Timestamps/Watermarks
{noformat}
h2. How to reproduce
{code:python}
from pyflink.common import WatermarkStrategy
from pyflink.common.watermark_strategy import TimestampAssigner
from pyflink.datastream import StreamExecutionEnvironment
class MyAssigner(TimestampAssigner):
def extract_timestamp(self, value, record_timestamp):
return value[0]
env = StreamExecutionEnvironment.get_execution_environment()
env.get_config().disable_auto_generated_uids()
stream = env.from_collection([(1000, "a"), (2000, "b")]).uid("source")
timed = stream.assign_timestamps_and_watermarks(
WatermarkStrategy.for_monotonous_timestamps().with_timestamp_assigner(MyAssigner())
).uid("watermarks")
timed.print().uid("sink")
env.execute()
{code}
*Expected:* the job is submitted, because the uid the user sets covers every operator the call created.
*Actual:* submission fails on {{{}Extract-Timestamp{}}}, and on {{Timestamps/Watermarks}} once that one has a uid.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)