Skip to content

Commit 28e62b9

Browse files
committed
Allow provisioner to affect stable start time
1 parent 7ed3379 commit 28e62b9

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

jupyter_client/ioloop/restarter.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,13 @@ async def poll(self):
9292
# restarter. Therefore, we use "has been alive continuously for X time" as a
9393
# heuristic for a stable start up.
9494
# See https://github.com/jupyter/jupyter_client/pull/717 for details.
95-
if self._initial_startup and self._last_dead - now >= self.stable_start_time:
95+
stable_start_time = self.stable_start_time
96+
if self.kernel_manager.provisioner:
97+
stable_start_time = self.kernel_manager.provisioner.get_stable_start_time(
98+
recommended=stable_start_time
99+
)
100+
if self._initial_startup and self._last_dead - now >= stable_start_time:
96101
self._initial_startup = False
97-
if self._restarting and self._last_dead - now >= self.stable_start_time:
102+
if self._restarting and self._last_dead - now >= stable_start_time:
98103
self.log.debug("AsyncIOLoopKernelRestarter: restart apparently succeeded")
99104
self._restarting = False

jupyter_client/provisioning/provisioner_base.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ async def load_provisioner_info(self, provisioner_info: Dict) -> None:
206206

207207
def get_shutdown_wait_time(self, recommended: float = 5.0) -> float:
208208
"""
209-
Returns the time allowed for a complete shutdown. This may vary by provisioner.
209+
Returns the time allowed for a complete shutdown. This may vary by provisioner.
210210
211211
This method is called from `KernelManager.finish_shutdown()` during the graceful
212212
phase of its kernel shutdown sequence.
@@ -215,6 +215,15 @@ def get_shutdown_wait_time(self, recommended: float = 5.0) -> float:
215215
"""
216216
return recommended
217217

218+
def get_stable_start_time(self, recommended: float = 10.0) -> float:
219+
"""
220+
Returns the expected upper bound for a kernel (re-)start to complete.
221+
This may vary by provisioner.
222+
223+
The recommended value will typically be what is configured in the kernel restarter.
224+
"""
225+
return recommended
226+
218227
def _finalize_env(self, env: Dict[str, str]) -> None:
219228
"""
220229
Ensures env is appropriate prior to launch.

jupyter_client/restarter.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,13 @@ def poll(self):
150150
# restarter. Therefore, we use "has been alive continuously for X time" as a
151151
# heuristic for a stable start up.
152152
# See https://github.com/jupyter/jupyter_client/pull/717 for details.
153-
if self._initial_startup and self._last_dead - now >= self.stable_start_time:
153+
stable_start_time = self.stable_start_time
154+
if self.kernel_manager.provisioner:
155+
stable_start_time = self.kernel_manager.provisioner.get_stable_start_time(
156+
recommended=stable_start_time
157+
)
158+
if self._initial_startup and self._last_dead - now >= stable_start_time:
154159
self._initial_startup = False
155-
if self._restarting and self._last_dead - now >= self.stable_start_time:
160+
if self._restarting and self._last_dead - now >= stable_start_time:
156161
self.log.debug("KernelRestarter: restart apparently succeeded")
157162
self._restarting = False

0 commit comments

Comments
 (0)