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

Michał updated KAFKA-8924:
--------------------------
    Description: 
#Problem 

The default creation of TimeWindows, like

{code}
TimeWindows.of(ofMillis(xxx))
{code}

calls an internal constructor

{code}
return new TimeWindows(sizeMs, sizeMs, -1, DEFAULT_RETENTION_MS);
{code}

And the *-1* parameter is the default grace period which I think is here for 
backward compatibility

{code}
    @SuppressWarnings("deprecation") // continuing to support 
Windows#maintainMs/segmentInterval in fallback mode
    @Override
    public long gracePeriodMs() {
        // NOTE: in the future, when we remove maintainMs,
        // we should default the grace period to 24h to maintain the default 
behavior,
        // or we can default to (24h - size) if you want to be super accurate.
        return graceMs != -1 ? graceMs : maintainMs() - size();
    }
{code}

The problem is that if you use a TimeWindows with gracePeriod of *-1* together 
with suppress *untilWindowCloses*, it never emits an event.

You can check the Suppress tests 
(SuppressScenarioTest.shouldSupportFinalResultsForTimeWindows), where 
[~vvcephei] was (maybe) aware of that and all the scenarios specify the 
gracePeriod.

I will add a test without it on my branch and it will fail.

#Now what can be done

One easy fix would be to change the default value to 0, which works fine for me 
in my project, however, I am not aware of the impact it would have done due to 
the changes in the *gracePeriodMs* method mentioned before.



  was:
#Problem 

The default creation of TimeWindows, like

```
TimeWindows.of(ofMillis(xxx))
```

calls an internal constructor

```
return new TimeWindows(sizeMs, sizeMs, -1, DEFAULT_RETENTION_MS);
```

And the *-1* parameter is the default grace period which I think is here for 
backward compatibility

```
    @SuppressWarnings("deprecation") // continuing to support 
Windows#maintainMs/segmentInterval in fallback mode
    @Override
    public long gracePeriodMs() {
        // NOTE: in the future, when we remove maintainMs,
        // we should default the grace period to 24h to maintain the default 
behavior,
        // or we can default to (24h - size) if you want to be super accurate.
        return graceMs != -1 ? graceMs : maintainMs() - size();
    }
```

The problem is that if you use a TimeWindows with gracePeriod of *-1* together 
with suppress *untilWindowCloses*, it never emits an event.

You can check the Suppress tests 
(SuppressScenarioTest.shouldSupportFinalResultsForTimeWindows), where 
[~vvcephei] was (maybe) aware of that and all the scenarios specify the 
gracePeriod.

I will add a test without it on my branch and it will fail.

#Now what can be done

One easy fix would be to change the default value to 0, which works fine for me 
in my project, however, I am not aware of the impact it would have done due to 
the changes in the *gracePeriodMs* method mentioned before.




> Default grace period (-1) of TimeWindows causes suppress to never emit events 
> ------------------------------------------------------------------------------
>
>                 Key: KAFKA-8924
>                 URL: https://issues.apache.org/jira/browse/KAFKA-8924
>             Project: Kafka
>          Issue Type: Bug
>          Components: streams
>    Affects Versions: 2.3.0
>            Reporter: Michał
>            Priority: Major
>
> #Problem 
> The default creation of TimeWindows, like
> {code}
> TimeWindows.of(ofMillis(xxx))
> {code}
> calls an internal constructor
> {code}
> return new TimeWindows(sizeMs, sizeMs, -1, DEFAULT_RETENTION_MS);
> {code}
> And the *-1* parameter is the default grace period which I think is here for 
> backward compatibility
> {code}
>     @SuppressWarnings("deprecation") // continuing to support 
> Windows#maintainMs/segmentInterval in fallback mode
>     @Override
>     public long gracePeriodMs() {
>         // NOTE: in the future, when we remove maintainMs,
>         // we should default the grace period to 24h to maintain the default 
> behavior,
>         // or we can default to (24h - size) if you want to be super accurate.
>         return graceMs != -1 ? graceMs : maintainMs() - size();
>     }
> {code}
> The problem is that if you use a TimeWindows with gracePeriod of *-1* 
> together with suppress *untilWindowCloses*, it never emits an event.
> You can check the Suppress tests 
> (SuppressScenarioTest.shouldSupportFinalResultsForTimeWindows), where 
> [~vvcephei] was (maybe) aware of that and all the scenarios specify the 
> gracePeriod.
> I will add a test without it on my branch and it will fail.
> #Now what can be done
> One easy fix would be to change the default value to 0, which works fine for 
> me in my project, however, I am not aware of the impact it would have done 
> due to the changes in the *gracePeriodMs* method mentioned before.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to