aboutsummaryrefslogtreecommitdiff
path: root/core/operator/watermark.go
diff options
context:
space:
mode:
Diffstat (limited to 'core/operator/watermark.go')
-rw-r--r--core/operator/watermark.go10
1 files changed, 2 insertions, 8 deletions
diff --git a/core/operator/watermark.go b/core/operator/watermark.go
index 3d591e5..43d63fa 100644
--- a/core/operator/watermark.go
+++ b/core/operator/watermark.go
@@ -6,20 +6,15 @@ import (
6 "flux/core" 6 "flux/core"
7) 7)
8 8
9// TimestampAssigner is responsible for event time defined by user
10type TimestampAssigner[IN any] func(in IN) int64
11
12type WaterGeneratorOperator[IN any] struct { 9type WaterGeneratorOperator[IN any] struct {
13 assigner TimestampAssigner[IN]
14 maxOutOfOrder int64 10 maxOutOfOrder int64
15 currentMaxTimestamp int64 11 currentMaxTimestamp int64
16 lastEmittedWatermark int64 12 lastEmittedWatermark int64
17} 13}
18 14
19func NewWatermarkGeneratorOperator[IN any](maxOutOfOrder int64, assigner TimestampAssigner[IN]) *WaterGeneratorOperator[IN] { 15func NewWatermarkGeneratorOperator[IN any](maxOutOfOrder int64) *WaterGeneratorOperator[IN] {
20 return &WaterGeneratorOperator[IN]{ 16 return &WaterGeneratorOperator[IN]{
21 maxOutOfOrder: maxOutOfOrder, 17 maxOutOfOrder: maxOutOfOrder,
22 assigner: assigner,
23 lastEmittedWatermark: -1, 18 lastEmittedWatermark: -1,
24 } 19 }
25} 20}
@@ -34,8 +29,7 @@ func (w *WaterGeneratorOperator[IN]) Process(ctx context.Context, record core.St
34 return err 29 return err
35 } 30 }
36 // query the time 31 // query the time
37 eventTime := w.assigner(record.Value) 32 eventTime := record.Timestamp
38 record.Timestamp = eventTime
39 33
40 // update the max timestamp 34 // update the max timestamp
41 if w.currentMaxTimestamp < eventTime { 35 if w.currentMaxTimestamp < eventTime {