1515use std:: collections:: { HashMap , HashSet } ;
1616use std:: sync:: Arc ;
1717
18- use anyhow:: { Context , anyhow } ;
18+ use anyhow:: Context ;
1919use risingwave_common:: catalog:: { DatabaseId , FragmentTypeFlag , TableId } ;
2020use risingwave_common:: id:: JobId ;
2121use risingwave_meta_model:: ActorId ;
@@ -28,6 +28,7 @@ use risingwave_pb::stream_service::barrier_complete_response::{
2828use risingwave_pb:: stream_service:: streaming_control_stream_request:: PbInitRequest ;
2929use risingwave_rpc_client:: StreamingControlHandle ;
3030
31+ use crate :: MetaResult ;
3132use crate :: barrier:: command:: CommandContext ;
3233use crate :: barrier:: context:: { GlobalBarrierWorkerContext , GlobalBarrierWorkerContextImpl } ;
3334use crate :: barrier:: progress:: TrackingJob ;
@@ -39,8 +40,7 @@ use crate::barrier::{
3940} ;
4041use crate :: hummock:: CommitEpochInfo ;
4142use crate :: model:: FragmentDownstreamRelation ;
42- use crate :: stream:: { REFRESH_TABLE_PROGRESS_TRACKER , SourceChange , SplitState } ;
43- use crate :: { MetaError , MetaResult } ;
43+ use crate :: stream:: { SourceChange , SplitState } ;
4444
4545impl GlobalBarrierWorkerContext for GlobalBarrierWorkerContextImpl {
4646 #[ await_tree:: instrument]
@@ -134,17 +134,9 @@ impl GlobalBarrierWorkerContext for GlobalBarrierWorkerContextImpl {
134134 }
135135
136136 for ( ( table_id, associated_source_id) , actors) in list_finished_info {
137- let allow_yield = {
138- let mut lock_handle = REFRESH_TABLE_PROGRESS_TRACKER . lock ( ) ;
139- let single_task_tracker =
140- lock_handle. inner . get_mut ( & table_id) . ok_or_else ( || {
141- MetaError :: from ( anyhow ! ( "Table tracker not found for table {}" , table_id) )
142- } ) ?;
143- single_task_tracker. report_list_finished ( actors. iter ( ) . copied ( ) ) ;
144- let allow_yield = single_task_tracker. is_list_finished ( ) ?;
145-
146- Ok :: < _ , MetaError > ( allow_yield)
147- } ?;
137+ let allow_yield = self
138+ . refresh_manager
139+ . mark_list_stage_finished ( table_id, & actors) ?;
148140
149141 if !allow_yield {
150142 continue ;
@@ -194,17 +186,9 @@ impl GlobalBarrierWorkerContext for GlobalBarrierWorkerContextImpl {
194186 }
195187
196188 for ( ( table_id, associated_source_id) , actors) in load_finished_info {
197- let allow_yield = {
198- let mut lock_handle = REFRESH_TABLE_PROGRESS_TRACKER . lock ( ) ;
199- let single_task_tracker =
200- lock_handle. inner . get_mut ( & table_id) . ok_or_else ( || {
201- MetaError :: from ( anyhow ! ( "Table tracker not found for table {}" , table_id) )
202- } ) ?;
203- single_task_tracker. report_load_finished ( actors. iter ( ) . copied ( ) ) ;
204- let allow_yield = single_task_tracker. is_load_finished ( ) ?;
205-
206- Ok :: < _ , MetaError > ( allow_yield)
207- } ?;
189+ let allow_yield = self
190+ . refresh_manager
191+ . mark_load_stage_finished ( table_id, & actors) ?;
208192
209193 if !allow_yield {
210194 continue ;
@@ -244,29 +228,18 @@ impl GlobalBarrierWorkerContext for GlobalBarrierWorkerContextImpl {
244228 refresh_finished_table_job_ids : Vec < JobId > ,
245229 ) -> MetaResult < ( ) > {
246230 for job_id in refresh_finished_table_job_ids {
247- {
248- let table_id = & job_id. as_mv_table_id ( ) ;
249- let mut lock_handle = REFRESH_TABLE_PROGRESS_TRACKER . lock ( ) ;
250- let remove_res = lock_handle. inner . remove ( table_id) ;
251- debug_assert ! ( remove_res. is_some( ) ) ;
252-
253- // try remove the table_id from the table_id_by_database_id
254- lock_handle
255- . table_id_by_database_id
256- . values_mut ( )
257- . for_each ( |table_ids| {
258- table_ids. remove ( table_id) ;
259- } ) ;
260- }
231+ let table_id = job_id. as_mv_table_id ( ) ;
232+
233+ self . refresh_manager . mark_refresh_complete ( table_id) . await ?;
261234
262235 // Update the table's refresh state back to Idle (refresh complete)
263236 self . metadata_manager
264237 . catalog_controller
265- . set_table_refresh_state ( job_id . as_mv_table_id ( ) , RefreshState :: Idle )
238+ . set_table_refresh_state ( table_id , RefreshState :: Idle )
266239 . await
267240 . context ( "Failed to set table refresh state to Idle" ) ?;
268241
269- tracing:: info!( %job_id, "Table refresh completed, state updated to Idle" ) ;
242+ tracing:: info!( %job_id, %table_id , "Table refresh completed, state updated to Idle" ) ;
270243 }
271244
272245 Ok ( ( ) )
@@ -309,9 +282,16 @@ impl CommandContext {
309282 }
310283
311284 Command :: DropStreamingJobs {
285+ streaming_job_ids,
312286 unregistered_state_table_ids,
313287 ..
314288 } => {
289+ for job_id in streaming_job_ids {
290+ barrier_manager_context
291+ . refresh_manager
292+ . remove_progress_tracker ( job_id. as_mv_table_id ( ) ) ;
293+ }
294+
315295 barrier_manager_context
316296 . hummock_manager
317297 . unregister_table_ids ( unregistered_state_table_ids. iter ( ) . cloned ( ) )
0 commit comments