@@ -468,8 +468,9 @@ async def cull_kernels(self):
468
468
469
469
async def cull_kernel_if_idle (self , kernel_id ):
470
470
kernel = self ._kernels [kernel_id ]
471
- self .log .debug ("kernel_id=%s, kernel_name=%s, last_activity=%s" , kernel_id , kernel .kernel_name , kernel .last_activity )
472
- if kernel .last_activity is not None :
471
+ if hasattr (kernel , 'last_activity' ): # last_activity is monkey-patched, so ensure that has occurred
472
+ self .log .debug ("kernel_id=%s, kernel_name=%s, last_activity=%s" ,
473
+ kernel_id , kernel .kernel_name , kernel .last_activity )
473
474
dt_now = utcnow ()
474
475
dt_idle = dt_now - kernel .last_activity
475
476
# Compute idle properties
@@ -482,7 +483,7 @@ async def cull_kernel_if_idle(self, kernel_id):
482
483
idle_duration = int (dt_idle .total_seconds ())
483
484
self .log .warning ("Culling '%s' kernel '%s' (%s) with %d connections due to %s seconds of inactivity." ,
484
485
kernel .execution_state , kernel .kernel_name , kernel_id , connections , idle_duration )
485
- await self .shutdown_kernel (kernel_id )
486
+ await ensure_async ( self .shutdown_kernel (kernel_id ) )
486
487
487
488
488
489
# AsyncMappingKernelManager inherits as much as possible from MappingKernelManager,
@@ -506,12 +507,14 @@ async def shutdown_kernel(self, kernel_id, now=False, restart=False):
506
507
kernel ._activity_stream .close ()
507
508
kernel ._activity_stream = None
508
509
self .stop_buffering (kernel_id )
509
- self ._kernel_connections .pop (kernel_id , None )
510
510
511
511
# Decrease the metric of number of kernels
512
512
# running for the relevant kernel type by 1
513
513
KERNEL_CURRENTLY_RUNNING_TOTAL .labels (
514
514
type = self ._kernels [kernel_id ].kernel_name
515
515
).dec ()
516
516
517
- return await self .pinned_superclass .shutdown_kernel (self , kernel_id , now = now , restart = restart )
517
+ # Finish shutting down the kernel before clearing state to avoid a race condition.
518
+ ret = await self .pinned_superclass .shutdown_kernel (self , kernel_id , now = now , restart = restart )
519
+ self ._kernel_connections .pop (kernel_id , None )
520
+ return ret
0 commit comments