@@ -128,6 +128,7 @@ pub trait Cluster: DIService + Send + Sync {
128128 ) -> Result < ( ) , CubeError > ;
129129
130130 async fn free_memory_chunk ( & self , node_name : & str , chunk_id : u64 ) -> Result < ( ) , CubeError > ;
131+ async fn free_deleted_memory_chunks ( & self , node_name : & str ) -> Result < ( ) , CubeError > ;
131132
132133 fn job_result_listener ( & self ) -> JobResultListener ;
133134
@@ -435,6 +436,16 @@ impl Cluster for ClusterImpl {
435436 }
436437 }
437438
439+ async fn free_deleted_memory_chunks ( & self , node_name : & str ) -> Result < ( ) , CubeError > {
440+ let response = self
441+ . send_or_process_locally ( node_name, NetworkMessage :: FreeDeletedMemoryChunks )
442+ . await ?;
443+ match response {
444+ NetworkMessage :: FreeDeletedMemoryChunksResult ( r) => r,
445+ x => panic ! ( "Unexpected result for add chunk: {:?}" , x) ,
446+ }
447+ }
448+
438449 fn job_result_listener ( & self ) -> JobResultListener {
439450 JobResultListener {
440451 receiver : self . meta_store_sender . subscribe ( ) ,
@@ -573,8 +584,21 @@ impl Cluster for ClusterImpl {
573584 let res = chunk_store. free_memory_chunk ( chunk_id) . await ;
574585 NetworkMessage :: FreeMemoryChunkResult ( res)
575586 }
587+ NetworkMessage :: FreeDeletedMemoryChunks => {
588+ let chunk_store = self
589+ . injector
590+ . upgrade ( )
591+ . unwrap ( )
592+ . get_service_typed :: < dyn ChunkDataStore > ( )
593+ . await ;
594+ let res = chunk_store. free_deleted_memory_chunks ( ) . await ;
595+ NetworkMessage :: FreeDeletedMemoryChunksResult ( res)
596+ }
576597 NetworkMessage :: FreeMemoryChunkResult ( _) => {
577- panic ! ( "AddChunkResult sent to worker" ) ;
598+ panic ! ( "FreeMemoryChunkResult sent to worker" ) ;
599+ }
600+ NetworkMessage :: FreeDeletedMemoryChunksResult ( _) => {
601+ panic ! ( "FreeDeletedMemoryChunksResult sent to worker" ) ;
578602 }
579603 NetworkMessage :: MetaStoreCall ( _) | NetworkMessage :: MetaStoreCallResult ( _) => {
580604 panic ! ( "MetaStoreCall sent to worker" ) ;
@@ -890,6 +914,9 @@ impl JobRunner {
890914 if let RowKey :: Table ( TableId :: Partitions , partition_id) = job. row_reference ( ) {
891915 let compaction_service = self . compaction_service . clone ( ) ;
892916 let partition_id = * partition_id;
917+ log:: warn!(
918+ "JobType::InMemoryChunksCompaction is deprecated and should not be used"
919+ ) ;
893920 Ok ( cube_ext:: spawn ( async move {
894921 compaction_service
895922 . compact_in_memory_chunks ( partition_id)
@@ -899,6 +926,19 @@ impl JobRunner {
899926 Self :: fail_job_row_key ( job)
900927 }
901928 }
929+ JobType :: NodeInMemoryChunksCompaction ( _) => {
930+ if let RowKey :: Table ( TableId :: Tables , _) = job. row_reference ( ) {
931+ let compaction_service = self . compaction_service . clone ( ) ;
932+ let node_name = self . server_name . clone ( ) ;
933+ Ok ( cube_ext:: spawn ( async move {
934+ compaction_service
935+ . compact_node_in_memory_chunks ( node_name)
936+ . await
937+ } ) )
938+ } else {
939+ Self :: fail_job_row_key ( job)
940+ }
941+ }
902942 JobType :: MultiPartitionSplit => {
903943 if let RowKey :: Table ( TableId :: MultiPartitions , id) = job. row_reference ( ) {
904944 let compaction_service = self . compaction_service . clone ( ) ;
0 commit comments