Example #1
0
def handle_sigterm_at_dbnd_task_run():
    def signal_handler(signum, frame):
        logger.info("Task runner received signal. Exiting...")
        if is_plugin_enabled("dbnd-docker") and is_plugin_enabled(
                "dbnd-airflow"):
            from dbnd_docker.kubernetes.kubernetes_engine_config import (
                ENV_DBND_POD_NAME, )

            if ENV_DBND_POD_NAME in os.environ:
                # We are running inside cluster
                # We should log all events on sigterm for debugging when running inside cluster
                from dbnd_airflow_contrib.kubernetes_metrics_logger import (
                    log_pod_events_on_sigterm, )

                log_pod_events_on_sigterm(frame)

        raise DatabandSigTermError("Task received signal",
                                   help_msg="Probably the job was canceled")

    original_sigterm_signal = None
    try:
        original_sigterm_signal = safe_signal(signal.SIGTERM, signal_handler)
        yield
    finally:
        if original_sigterm_signal:
            safe_signal(signal.SIGTERM, original_sigterm_signal)
Example #2
0
 def preexec_fn():
     if windows_compatible_mode:
         return
     # Restore default signal disposition and invoke setsid
     for sig in ("SIGPIPE", "SIGXFZ", "SIGXFSZ"):
         if hasattr(signal, sig):
             safe_signal(getattr(signal, sig), signal.SIG_DFL)
     os.setsid()
Example #3
0
def _dbnd_exception_handling():
    if windows_compatible_mode:
        return

    # Enables graceful shutdown when running inside docker/kubernetes and subprocess shutdown
    # By default the kill signal is SIGTERM while our code mostly expects SIGINT (KeyboardInterrupt)
    def sigterm_handler(sig, frame):
        os.kill(os.getpid(), signal.SIGINT)

    safe_signal(signal.SIGTERM, sigterm_handler)
Example #4
0
def handle_sigterm_at_dbnd_task_run():
    def signal_handler(signum, frame):
        logger.info("Task runner received signal. Exiting...")
        raise DatabandSigTermError("Task received signal",
                                   help_msg="Probably the job was canceled")

    original_sigterm_signal = None
    try:
        original_sigterm_signal = safe_signal(signal.SIGTERM, signal_handler)
        yield
    finally:
        if original_sigterm_signal:
            safe_signal(signal.SIGTERM, original_sigterm_signal)
Example #5
0
def mgr_init():
    safe_signal(signal.SIGINT, mgr_sig_handler)