aboutsummaryrefslogtreecommitdiff
path: root/core/operator/watermark.go
diff options
context:
space:
mode:
authorsangtran <tranquangsang12.7@gmail.com>2026-09-12 16:35:06 +0700
committersangtran <tranquangsang12.7@gmail.com>2026-09-12 16:35:06 +0700
commit50139c994e539f2f902fc0c06ab29ee93c1bc03c (patch)
tree7e355de76444c4eb02a178018dcc4d7ab258c466 /core/operator/watermark.go
parenta7cb942d8b03e325b70ac95238d24939939a4c5a (diff)
signatureVerified sangtran <tranquangsang12.7@gmail.com> Key: 8DD79823D235E1BB ultimate trust
downloadflux-main.tar.gz
flux-main.zip
Verified refactor(event-time): make source timestamps authoritativeHEADmain
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 {