@@ -42,22 +42,36 @@ pub(crate) fn create_memory_pool(
4242 const NUM_TRACKED_CONSUMERS : usize = 10 ;
4343 match memory_pool_config. pool_type {
4444 MemoryPoolType :: GreedyUnified => {
45- // Set Comet memory pool for native
46- let memory_pool =
47- CometUnifiedMemoryPool :: new ( comet_task_memory_manager, task_attempt_id) ;
48- Arc :: new ( TrackConsumersPool :: new (
49- memory_pool,
50- NonZeroUsize :: new ( NUM_TRACKED_CONSUMERS ) . unwrap ( ) ,
51- ) )
45+ let mut memory_pool_map = TASK_SHARED_MEMORY_POOLS . lock ( ) . unwrap ( ) ;
46+ let per_task_memory_pool =
47+ memory_pool_map. entry ( task_attempt_id) . or_insert_with ( || {
48+ let pool: Arc < dyn MemoryPool > = Arc :: new ( TrackConsumersPool :: new (
49+ CometUnifiedMemoryPool :: new (
50+ Arc :: clone ( & comet_task_memory_manager) ,
51+ task_attempt_id,
52+ ) ,
53+ NonZeroUsize :: new ( NUM_TRACKED_CONSUMERS ) . unwrap ( ) ,
54+ ) ) ;
55+ PerTaskMemoryPool :: new ( pool)
56+ } ) ;
57+ per_task_memory_pool. num_plans += 1 ;
58+ Arc :: clone ( & per_task_memory_pool. memory_pool )
5259 }
5360 MemoryPoolType :: FairUnified => {
54- // Set Comet fair memory pool for native
55- let memory_pool =
56- CometFairMemoryPool :: new ( comet_task_memory_manager, memory_pool_config. pool_size ) ;
57- Arc :: new ( TrackConsumersPool :: new (
58- memory_pool,
59- NonZeroUsize :: new ( NUM_TRACKED_CONSUMERS ) . unwrap ( ) ,
60- ) )
61+ let mut memory_pool_map = TASK_SHARED_MEMORY_POOLS . lock ( ) . unwrap ( ) ;
62+ let per_task_memory_pool =
63+ memory_pool_map. entry ( task_attempt_id) . or_insert_with ( || {
64+ let pool: Arc < dyn MemoryPool > = Arc :: new ( TrackConsumersPool :: new (
65+ CometFairMemoryPool :: new (
66+ Arc :: clone ( & comet_task_memory_manager) ,
67+ memory_pool_config. pool_size ,
68+ ) ,
69+ NonZeroUsize :: new ( NUM_TRACKED_CONSUMERS ) . unwrap ( ) ,
70+ ) ) ;
71+ PerTaskMemoryPool :: new ( pool)
72+ } ) ;
73+ per_task_memory_pool. num_plans += 1 ;
74+ Arc :: clone ( & per_task_memory_pool. memory_pool )
6175 }
6276 MemoryPoolType :: Greedy => Arc :: new ( TrackConsumersPool :: new (
6377 GreedyMemoryPool :: new ( memory_pool_config. pool_size ) ,
0 commit comments