SGE template: Signal SIGINT by default to allow R to catch it gracefully
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 50/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- bash, r
- Área
- distributed-systems
Línea de trabajo
Comienza con la plantilla SGE predeterminada y sigue cómo rscript_call, uri y batchtools::doJobCollection lanzan el trabajo. Revisa el trap de Bash SIGUSR2 propuesto y el flujo de espera del proceso; después, verifica que un límite de tiempo inminente llegue a R como SIGINT y permita una limpieza ordenada antes de la terminación.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
When a job is approaching it's maximum run-time limit, and --notify has been specified, SGE sends a SIGUSR2 60 seconds before sending a SIGKILL (abrupt; not capturable).
R code cannot handle SIGUSR2 signals, only SIGINT. If SGE would signal SIGINT instead, we could capture it internally as an interrupt condition, and using tryCatch(..., interrupt = ...), on.exit(), and likes to gracefully exit, e.g. close connections, checkpoint intermediate results, etc.
Idea
Update the default SGE template to signal SIGINT. Unlike Slurm, there is no user-facing option to change the type of signal in SGE. But we could use Bash traps to capture the SIGUSR2 and re-signal it as SIGINT. Something like:
#! /bin/bash
...
## Request SGE to send warning signals (SIGUSR2) before run-time limit termination
#$ -notify
...
# Function to catch SGE run-time signals and re-signal as SIGINT
forward_sigint() {
echo "Caught SGE run-time signal. Re-signal as SIGINT to R..."
kill -2 "${R_PID}" 2>/dev/null || true
wait "${R_PID}"
res=$?
echo " - exit code (from signal handler): ${res}"
exit "${res}"
}
# Trap SGE run-time limit signals
trap forward_sigint SIGUSR2
<%= rscript_call %> -e 'batchtools::doJobCollection("<%= uri %>")' &
R_PID=$!
wait "${R_PID}"
res=$?
# Clear the trap on normal exit
trap - SIGUSR2
- Lenguaje dominante
- R
- Estrellas
- 87
- Forks
- 10
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de futureverse/future.batchtools
-
feature/resources scheduler/lsf
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
futureverse/future.batchtools#105 ·
-
feature/resources scheduler/slurm
Dificultad 3/5 1-2 días Aptitud para principiantes 66/100
futureverse/future.batchtools#103 ·
-
Add batchtools_hyperqueue() Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 55/100
futureverse/future.batchtools#102 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 15/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
Todos los issues de futureverse/future.batchtools
Issues similares
-
Affects Web App documentation PRIORITY LOW
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 80/100
hubverse-org/hubCI#36 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
-
Release 1.4.0 Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
pharmaverse/pharmaverseadam#170 ·