azure-slurm/slurmcc/__init__.py (28 lines of code) (raw):

# Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. # import os import random from typing import Any, Callable, Optional try: from requests.exceptions import ConnectionError except ImportError: # this is only used during live testing with scalelib, so this should never happen import logging logging.exception("Failed to import ConnectionError from requests.exceptions") ConnectionError = RuntimeError class AzureSlurmError(RuntimeError): pass def custom_chaos_mode(action: Callable) -> Callable: def wrapped(func: Callable) -> Any: return chaos_mode(func, action) return wrapped def chaos_mode(func: Callable, action: Optional[Callable] = None) -> Callable: def default_action() -> Any: raise random.choice( [RuntimeError, ValueError, ConnectionError] )("Random failure") action = action or default_action def wrapped(*args: Any, **kwargs: Any) -> Any: if is_chaos_mode(): return action or default_action() return func(*args, **kwargs) return wrapped def is_chaos_mode() -> bool: return random.random() < float(os.getenv("AZURE_SLURM_CHAOS_MODE", 0))