futureverse / futureverse/future.batchtools

SGE template: Signal SIGINT by default to allow R to catch it gracefully

Offen
#104 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
feature/resources scheduler/sge
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

Beitragsleitfaden öffnen

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

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.