lukecwik commented on a change in pull request #11199: [BEAM-9562] Update Timer 
encoding with respect of dynamic timers
URL: https://github.com/apache/beam/pull/11199#discussion_r402425415
 
 

 ##########
 File path: 
runners/core-construction-java/src/main/java/org/apache/beam/runners/core/construction/Timer.java
 ##########
 @@ -40,92 +50,197 @@
 @AutoValue
 public abstract class Timer<T> {
 
-  /** Returns a timer for the given timestamp with a {@code null} payload. */
-  public static Timer<Void> of(Instant time) {
-    return of(time, (Void) null);
+  /**
+   * Returns a non-cleared timer for the given userKey, dynamicTimerTag, 
fireTimestamp,
+   * holdTimestamp, windows and pane.
+   */
+  public static <T> Timer<T> of(
+      T userKey,
+      String dynamicTimerTag,
+      Instant fireTimestamp,
+      Instant holdTimestamp,
+      Collection<? extends BoundedWindow> windows,
+      PaneInfo pane) {
+    return new AutoValue_Timer(
+        userKey, dynamicTimerTag, false, fireTimestamp, holdTimestamp, 
windows, pane);
   }
 
-  /** Returns a timer for the given timestamp with a user specified payload. */
-  public static <T> Timer<T> of(Instant timestamp, @Nullable T payload) {
-    return new AutoValue_Timer(timestamp, payload);
+  /** Returns a cleared timer for the given userKey, dynamicTimerTag. */
+  public static <T> Timer<T> cleared(T userKey, String dynamicTimerTag) {
+    return new AutoValue_Timer(userKey, dynamicTimerTag, true, null, null, 
null, null);
   }
 
+  /** Returns the key that the timer is set on. */
+  public abstract T getUserKey();
+
+  /**
+   * Returns the tag that the timer is set on. This tag is empty string only 
when the timer is set
+   * from TimerSpec.
+   */
+  public abstract String getDynamicTimerTag();
+
+  /** Returns a boolean which indicate whether the timer is going to be 
cleared. */
+  public abstract boolean getClearBit();
+
   /**
-   * Returns the timestamp of when the timer is scheduled to fire.
+   * Returns the timestamp of when the timer is scheduled to fire. This field 
is nullable only when
+   * the clearBit is true.
    *
    * <p>The time is relative to the time domain defined in the {@link
    * org.apache.beam.model.pipeline.v1.RunnerApi.TimerFamilySpec} that is 
associated with this
    * timer.
 
 Review comment:
   CC: @robertwb @reuvenlax 
   
   Originally I was thinking that timers should always be relative but now that 
I think about it more I think we should make this field absolute. When timers 
are created during normal element processing within an SDK then watermark timer 
should be computed based upon the input elements timestamp and processing time 
timers can be computed using the system's clock. For timers created during 
timer callbacks, the timers should always be relative to the fire timestamp of 
that timer.
   
   Hold timestamps by default should be the input elements timestamp plus an 
optional positive offset during normal element processing and they should be 
the hold timestamp of the fired timer plus an optional positive offset during 
timer callbacks.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to