futureverse / futureverse/future.batchtools
SGE template: Signal SIGINT by default to allow R to catch it gracefully
- Vorherrschende Sprache
- R
- Sterne
- 87
- Forks
- 10
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
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:
```bash
#! /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
```
Beitragsleitfaden
Rechercherichtung
Beginne mit der standardmäßigen SGE-Vorlage und verfolge, wie `rscript_call`, `uri` und `batchtools::doJobCollection` den Job starten. Überprüfe anschließend den vorgeschlagenen Bash-`SIGUSR2`-Trap und den Ablauf zum Warten auf den Prozess. Verifiziere dann, dass ein bevorstehendes Zeitlimit R als `SIGINT` erreicht und eine ordnungsgemäße Bereinigung vor der Beendigung ermöglicht.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- bash, r
- Bereich
- distributed-systems
- Issue-Typ
- Feature
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 50/100