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

jinguishi updated FLINK-13383:
------------------------------
    Description: 
Using a Tumbling time window, I created a time-based and counter trigger. The 
parameters in the onElement method TriggerContext, ctx.getCurrentWatermark(), 
get negative values, 
There are screenshots in the attachment。

code show as below


{code:java}
public class CountTrigger extends Trigger<Object, TimeWindow> {

    private static final long serialVersionUID = 1L;

    private CountTrigger(int count) {
        this.threshold = count;
    }

    private int count = 0;
    private int threshold;

    @Override
    public TriggerResult onElement(Object element, long timestamp, TimeWindow 
window, TriggerContext ctx) {

        long watermark = ctx.getCurrentWatermark();
        ctx.registerEventTimeTimer(window.maxTimestamp());
        if (count > threshold) {
            count = 0;
            return TriggerResult.FIRE;
        } else {
            count++;
        }
        System.out.println("onElement: " + element);
        return TriggerResult.CONTINUE;
    }

    @Override
    public TriggerResult onEventTime(long time, TimeWindow window, 
Trigger.TriggerContext ctx) throws Exception {
        return TriggerResult.CONTINUE;
    }

    @Override
    public TriggerResult onProcessingTime(long time, TimeWindow window, 
Trigger.TriggerContext ctx) throws Exception {
        return TriggerResult.FIRE;
    }

    @Override
    public void clear(TimeWindow window, Trigger.TriggerContext ctx) throws 
Exception {
        ctx.deleteProcessingTimeTimer(window.maxTimestamp());
    }

    @Override
    public String toString() {
        return "CountTrigger";
    }

    public static <W extends Window> CountTrigger of(int threshold) {
        return new CountTrigger(threshold);
    }
}

{code}



{code:java}
  public TriggerResult onElement(Object element, long timestamp, W window, 
TriggerContext ctx) throws Exception {
        ReducingState<Long> fireTimestamp = ctx.getPartitionedState(stateDesc);
        timestamp = ctx.getCurrentWatermark();
        long end = window.maxTimestamp();

        System.out.println(element + "  " + timestamp + "  " + 
window.maxTimestamp() + "  " + fireTimestamp.get());
        if (fireTimestamp.get() == null) {
            long start = timestamp - (timestamp % interval);
            long nextFireTimestamp = start + interval;

            ctx.registerEventTimeTimer(nextFireTimestamp);

            fireTimestamp.add(nextFireTimestamp);
        
            return TriggerResult.CONTINUE;
        }
       
        return TriggerResult.CONTINUE;
    }
{code}




  was:
Using a Tumbling time window, I created a time-based and counter trigger. The 
parameters in the onElement method TriggerContext, ctx.getCurrentWatermark(), 
get negative values, 
There are screenshots in the attachment。

code show as below


{code:java}
public class CountTrigger extends Trigger<Object, TimeWindow> {

    private static final long serialVersionUID = 1L;

    private CountTrigger(int count) {
        this.threshold = count;
    }

    private int count = 0;
    private int threshold;

    @Override
    public TriggerResult onElement(Object element, long timestamp, TimeWindow 
window, TriggerContext ctx) {

        long watermark = ctx.getCurrentWatermark();
        ctx.registerEventTimeTimer(window.maxTimestamp());
        if (count > threshold) {
            count = 0;
            return TriggerResult.FIRE;
        } else {
            count++;
        }
        System.out.println("onElement: " + element);
        return TriggerResult.CONTINUE;
    }

    @Override
    public TriggerResult onEventTime(long time, TimeWindow window, 
Trigger.TriggerContext ctx) throws Exception {
        return TriggerResult.CONTINUE;
    }

    @Override
    public TriggerResult onProcessingTime(long time, TimeWindow window, 
Trigger.TriggerContext ctx) throws Exception {
        return TriggerResult.FIRE;
    }

    @Override
    public void clear(TimeWindow window, Trigger.TriggerContext ctx) throws 
Exception {
        ctx.deleteProcessingTimeTimer(window.maxTimestamp());
    }

    @Override
    public String toString() {
        return "CountTrigger";
    }

    public static <W extends Window> CountTrigger of(int threshold) {
        return new CountTrigger(threshold);
    }
}

{code}





> Customize the problem in the trigger
> ------------------------------------
>
>                 Key: FLINK-13383
>                 URL: https://issues.apache.org/jira/browse/FLINK-13383
>             Project: Flink
>          Issue Type: Bug
>          Components: API / DataStream
>    Affects Versions: 1.8.0
>         Environment: The development environment is idea, the flink version 
> is 1.8
>            Reporter: jinguishi
>            Priority: Blocker
>             Fix For: 1.8.0
>
>         Attachments: WX20190723-174236.png, WechatIMG2.png
>
>
> Using a Tumbling time window, I created a time-based and counter trigger. The 
> parameters in the onElement method TriggerContext, ctx.getCurrentWatermark(), 
> get negative values, 
> There are screenshots in the attachment。
> code show as below
> {code:java}
> public class CountTrigger extends Trigger<Object, TimeWindow> {
>     private static final long serialVersionUID = 1L;
>     private CountTrigger(int count) {
>         this.threshold = count;
>     }
>     private int count = 0;
>     private int threshold;
>     @Override
>     public TriggerResult onElement(Object element, long timestamp, TimeWindow 
> window, TriggerContext ctx) {
>         long watermark = ctx.getCurrentWatermark();
>         ctx.registerEventTimeTimer(window.maxTimestamp());
>         if (count > threshold) {
>             count = 0;
>             return TriggerResult.FIRE;
>         } else {
>             count++;
>         }
>         System.out.println("onElement: " + element);
>         return TriggerResult.CONTINUE;
>     }
>     @Override
>     public TriggerResult onEventTime(long time, TimeWindow window, 
> Trigger.TriggerContext ctx) throws Exception {
>         return TriggerResult.CONTINUE;
>     }
>     @Override
>     public TriggerResult onProcessingTime(long time, TimeWindow window, 
> Trigger.TriggerContext ctx) throws Exception {
>         return TriggerResult.FIRE;
>     }
>     @Override
>     public void clear(TimeWindow window, Trigger.TriggerContext ctx) throws 
> Exception {
>         ctx.deleteProcessingTimeTimer(window.maxTimestamp());
>     }
>     @Override
>     public String toString() {
>         return "CountTrigger";
>     }
>     public static <W extends Window> CountTrigger of(int threshold) {
>         return new CountTrigger(threshold);
>     }
> }
> {code}
> {code:java}
>   public TriggerResult onElement(Object element, long timestamp, W window, 
> TriggerContext ctx) throws Exception {
>         ReducingState<Long> fireTimestamp = 
> ctx.getPartitionedState(stateDesc);
>         timestamp = ctx.getCurrentWatermark();
>         long end = window.maxTimestamp();
>         System.out.println(element + "  " + timestamp + "  " + 
> window.maxTimestamp() + "  " + fireTimestamp.get());
>         if (fireTimestamp.get() == null) {
>             long start = timestamp - (timestamp % interval);
>             long nextFireTimestamp = start + interval;
>             ctx.registerEventTimeTimer(nextFireTimestamp);
>             fireTimestamp.add(nextFireTimestamp);
>         
>             return TriggerResult.CONTINUE;
>         }
>        
>         return TriggerResult.CONTINUE;
>     }
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

Reply via email to