File tree 1 file changed +19
-0
lines changed
1 file changed +19
-0
lines changed Original file line number Diff line number Diff line change @@ -130,6 +130,9 @@ impl<S: StateStore> WatermarkFilterExecutor<S> {
130
130
current_watermark. clone ( ) ,
131
131
) ) ;
132
132
133
+ // If the input is idle
134
+ let mut idle_input = true ;
135
+
133
136
#[ for_await]
134
137
for msg in input {
135
138
let msg = msg?;
@@ -180,6 +183,7 @@ impl<S: StateStore> WatermarkFilterExecutor<S> {
180
183
yield Message :: Chunk ( output_chunk) ;
181
184
} ;
182
185
186
+ idle_input = false ;
183
187
yield Message :: Watermark ( Watermark :: new (
184
188
event_time_col_idx,
185
189
watermark_type. clone ( ) ,
@@ -192,6 +196,7 @@ impl<S: StateStore> WatermarkFilterExecutor<S> {
192
196
let watermark = watermark. val ;
193
197
if current_watermark. default_cmp ( & watermark) . is_lt ( ) {
194
198
current_watermark = watermark;
199
+ idle_input = false ;
195
200
yield Message :: Watermark ( Watermark :: new (
196
201
event_time_col_idx,
197
202
watermark_type. clone ( ) ,
@@ -229,6 +234,20 @@ impl<S: StateStore> WatermarkFilterExecutor<S> {
229
234
table. insert ( row) ;
230
235
}
231
236
table. commit ( barrier. epoch ) . await ?;
237
+
238
+ if idle_input {
239
+ // Align watermark
240
+ let global_max_watermark =
241
+ Self :: get_global_max_watermark ( & table, watermark_type. clone ( ) )
242
+ . await ?;
243
+ current_watermark = cmp:: max_by (
244
+ current_watermark,
245
+ global_max_watermark,
246
+ DefaultOrd :: default_cmp,
247
+ ) ;
248
+ } else {
249
+ idle_input = true ;
250
+ }
232
251
} else {
233
252
table. commit_no_data_expected ( barrier. epoch ) ;
234
253
}
You can’t perform that action at this time.
0 commit comments