Skip to content

Commit 5a3c866

Browse files
Fixes for NA in job tracking and missing start time in prefetch
1 parent 6bbf46a commit 5a3c866

4 files changed

Lines changed: 61 additions & 3 deletions

File tree

R/job_tracking_functions.R

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -408,12 +408,25 @@ update_tracked_job_status <- function(sqlite_db = NULL, job_id = NULL, status,
408408
if (cascade) {
409409
if (is.numeric(exclude)) exclude <- as.character(exclude)
410410

411-
status_tree <- get_tracked_job_status(job_id, return_children = TRUE, sqlite_db = sqlite_db) # retrieve current job and children
411+
status_tree <- get_tracked_job_status(
412+
job_id = job_id,
413+
return_children = TRUE,
414+
sqlite_db = sqlite_db
415+
) # retrieve current job and children
416+
if (!is.data.frame(status_tree) || nrow(status_tree) == 0L) return(invisible(NULL))
412417
job_ids <- status_tree$job_id # get list of job ids
413418

414419
for (child_job in setdiff(job_ids, c(job_id, exclude))) {
415-
child_status <- with(status_tree, status[which(job_ids == child_job)]) # check status
416-
if (child_status != "FAILED") update_tracked_job_status(child_job, sqlite_db = sqlite_db, status = "FAILED_BY_EXT", cascade = TRUE)
420+
child_idx <- which(status_tree$job_id == child_job)
421+
child_status <- if (length(child_idx) > 0L) status_tree$status[child_idx[1L]] else NA_character_ # check status
422+
if (length(child_status) != 1L || is.na(child_status) || child_status != "FAILED") {
423+
update_tracked_job_status(
424+
sqlite_db = sqlite_db,
425+
job_id = child_job,
426+
status = "FAILED_BY_EXT",
427+
cascade = TRUE
428+
)
429+
}
417430
}
418431
}
419432

inst/hpc_scripts/prefetch_templates.pbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ for path in "${bind_paths[@]}"; do
6767
done
6868

6969
log_message INFO "Prefetching TemplateFlow resources into $templateflow_home for spaces: $prefetch_spaces"
70+
start_time=$(date +%s)
7071

7172
"${R_HOME}/bin/Rscript" "$upd_job_status_path" --job_id "$PBS_JOBID" --sqlite_db "$sqlite_db" --status "STARTED"
7273

inst/hpc_scripts/prefetch_templates.sbatch

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ for path in "${bind_paths[@]}"; do
6767
done
6868

6969
log_message INFO "Prefetching TemplateFlow resources into $templateflow_home for spaces: $prefetch_spaces"
70+
start_time=$(date +%s)
7071

7172
"${R_HOME}/bin/Rscript" "$upd_job_status_path" --job_id "$SLURM_JOB_ID" --sqlite_db "$sqlite_db" --status "STARTED"
7273

tests/testthat/test-job_tracking.R

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,49 @@ test_that("job tracking cascade works for FAILED status", {
382382
expect_equal(child_result$status, "FAILED_BY_EXT")
383383
})
384384

385+
test_that("job tracking cascade tolerates NA child status", {
386+
db_file <- tempfile(fileext = ".sqlite")
387+
on.exit(unlink(db_file), add = TRUE)
388+
389+
create_tracking_db(db_file)
390+
391+
insert_tracked_job(
392+
sqlite_db = db_file,
393+
job_id = "parent_na",
394+
tracking_args = list(job_name = "parent", sequence_id = "seq_na")
395+
)
396+
insert_tracked_job(
397+
sqlite_db = db_file,
398+
job_id = "child_na",
399+
tracking_args = list(job_name = "child", sequence_id = "seq_na")
400+
)
401+
add_tracked_job_parent(
402+
sqlite_db = db_file,
403+
job_id = "child_na",
404+
parent_job_id = "parent_na",
405+
child_level = 1
406+
)
407+
408+
con <- DBI::dbConnect(RSQLite::SQLite(), db_file)
409+
DBI::dbExecute(
410+
con,
411+
"UPDATE job_tracking SET status = NULL WHERE job_id = 'child_na'"
412+
)
413+
DBI::dbDisconnect(con)
414+
415+
expect_no_error(
416+
update_tracked_job_status(
417+
sqlite_db = db_file,
418+
job_id = "parent_na",
419+
status = "FAILED",
420+
cascade = TRUE
421+
)
422+
)
423+
424+
child_result <- get_tracked_job_status(job_id = "child_na", sqlite_db = db_file)
425+
expect_equal(child_result$status, "FAILED_BY_EXT")
426+
})
427+
385428
test_that("get_tracked_job_status returns children when requested", {
386429
db_file <- tempfile(fileext = ".sqlite")
387430
on.exit(unlink(db_file), add = TRUE)

0 commit comments

Comments
 (0)