[ https://issues.apache.org/jira/browse/FLINK-37545?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Grzegorz Liter updated FLINK-37545: ----------------------------------- Description: When using MetricGroup to expose custom metrics in Watermark Generator Example: ``` WatermarkStrategy .forGenerator(ctx -> new CustomWatermarkStrategy(ctx.getMetricGroup())) .withTimestampAssigner((event, timestamp) -> ...); ``` StackOverflowError will be thrown. This is due to changes done in https://issues.apache.org/jira/browse/FLINK-35886 Previously code in `org.apache.flink.streaming.runtime.operators.TimestampsAndWatermarksOperator#open` look like this: ``` watermarkGenerator = emitProgressiveWatermarks ? watermarkStrategy.createWatermarkGenerator(this::getMetricGroup) : new NoWatermarksGenerator<>(); ``` here in the `this::getMetricGroup` `this` refers to parent class instance now it looks like this ``` watermarkGenerator = emitProgressiveWatermarks ? watermarkStrategy.createWatermarkGenerator( new WatermarkGeneratorSupplier.Context() { @Override public MetricGroup getMetricGroup() { return this.getMetricGroup(); } @Override public RelativeClock getInputActivityClock() { return inputActivityClock; } }) : new NoWatermarksGenerator<>(); ``` where `this` reference to anonymous class instance and causes infinite recursive loop was: When using MetricGroup to expose custom metrics in Watermark Generator Example: ``` {{WatermarkStrategy .forGenerator(ctx -> new CustomWatermarkStrategy(ctx.getMetricGroup())) .withTimestampAssigner((event, timestamp) -> ...);}} ``` StackOverflowError will be thrown. This is due to changes done in https://issues.apache.org/jira/browse/FLINK-35886 Previously code in `org.apache.flink.streaming.runtime.operators.TimestampsAndWatermarksOperator#open` look like this: ``` watermarkGenerator = emitProgressiveWatermarks ? watermarkStrategy.createWatermarkGenerator(this::getMetricGroup) : new NoWatermarksGenerator<>(); ``` here in the `this::getMetricGroup` `this` refers to parent class instance now it looks like this ``` watermarkGenerator = emitProgressiveWatermarks ? watermarkStrategy.createWatermarkGenerator( new WatermarkGeneratorSupplier.Context() { @Override public MetricGroup getMetricGroup() { return this.getMetricGroup(); } @Override public RelativeClock getInputActivityClock() { return inputActivityClock; } }) : new NoWatermarksGenerator<>(); ``` where `this` reference to anonymous class instance and causes infinite recursive loop > StackOverflowError when using MetricGroup in custom WatermarkStrategy > --------------------------------------------------------------------- > > Key: FLINK-37545 > URL: https://issues.apache.org/jira/browse/FLINK-37545 > Project: Flink > Issue Type: Bug > Components: API / DataStream > Affects Versions: 1.19.2, 1.20.1 > Reporter: Grzegorz Liter > Priority: Critical > > When using MetricGroup to expose custom metrics in Watermark Generator > Example: > ``` > WatermarkStrategy > .forGenerator(ctx -> > new CustomWatermarkStrategy(ctx.getMetricGroup())) > .withTimestampAssigner((event, timestamp) -> ...); > ``` > StackOverflowError will be thrown. > This is due to changes done in > https://issues.apache.org/jira/browse/FLINK-35886 > Previously code in > `org.apache.flink.streaming.runtime.operators.TimestampsAndWatermarksOperator#open` > look like this: > ``` > watermarkGenerator = > emitProgressiveWatermarks > ? > watermarkStrategy.createWatermarkGenerator(this::getMetricGroup) > : new NoWatermarksGenerator<>(); > ``` > here in the `this::getMetricGroup` `this` refers to parent class instance > now it looks like this > ``` > watermarkGenerator = > emitProgressiveWatermarks > ? watermarkStrategy.createWatermarkGenerator( > new WatermarkGeneratorSupplier.Context() { > @Override > public MetricGroup getMetricGroup() { > return this.getMetricGroup(); > } > @Override > public RelativeClock > getInputActivityClock() { > return inputActivityClock; > } > }) > : new NoWatermarksGenerator<>(); > ``` > where `this` reference to anonymous class instance and causes infinite > recursive loop -- This message was sent by Atlassian Jira (v8.20.10#820010)