diff --git a/DESCRIPTION b/DESCRIPTION index 3fe6febc..56d2c108 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -50,6 +50,8 @@ Suggests: doParallel, doMPI, e1071, + jsonlite, + RCurl, foreach, future, future.batchtools, diff --git a/NAMESPACE b/NAMESPACE index 75da5452..a56e7114 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -81,6 +81,7 @@ export(loadResult) export(lpt) export(makeClusterFunctions) export(makeClusterFunctionsDocker) +export(makeClusterFunctionsDockerQueue) export(makeClusterFunctionsInteractive) export(makeClusterFunctionsLSF) export(makeClusterFunctionsMulticore) diff --git a/R/clusterFunctionsDockerQueue.R b/R/clusterFunctionsDockerQueue.R new file mode 100644 index 00000000..dd9cee92 --- /dev/null +++ b/R/clusterFunctionsDockerQueue.R @@ -0,0 +1,133 @@ +#' @title ClusterFunctions for DockerQueue +#' +#' @description +#' Customized cluster functions for the isolated application running on the SFB876 cluster. +#' +#' @param image [\code{character(1)}]\cr +#' Name of the docker image to run. +#' @param docker.args [\code{character}]\cr +#' Additional arguments passed to \dQuote{docker} *before* the command (\dQuote{run}, \dQuote{ps} or \dQuote{kill}) to execute (e.g., the docker host). +#' @param image.args [\code{character}]\cr +#' Additional arguments passed to \dQuote{docker run} (e.g., to define mounts or environment variables). +#' @param docker.scheduler.url [\code{character}]\cr +#' URL of the docker scheduler API. +#' @param curl.args [\code{character}]\cr +#' arguments that should be passed to curl when accessing the DockerQueue-API. +#' @inheritParams makeClusterFunctions +#' @return [\code{\link{ClusterFunctions}}]. +#' @family ClusterFunctions +#' @export +makeClusterFunctionsDockerQueue = function(image, docker.args = character(0L), image.args = character(0L), scheduler.latency = 1, fs.latency = 65, docker.scheduler.url = "https://s876cnsm:2350/v1.30", curl.args = character(0L)) { # nocov start + assertString(image) + assertCharacter(docker.args, any.missing = FALSE) + assertCharacter(image.args, any.missing = FALSE) + docker.scheduler.url = stri_replace_all_regex(docker.scheduler.url, "\\/$", replacement = "") + assertCharacter(docker.scheduler.url, any.missing = FALSE) + assertCharacter(curl.args, any.missing = FALSE) + user = Sys.info()["user"] + + submitJob = function(reg, jc) { + assertRegistry(reg, writeable = TRUE) + assertClass(jc, "JobCollection") + assertIntegerish(jc$resources$ncpus, lower = 1L, any.missing = FALSE, .var.name = "resources$ncpus") + assertIntegerish(jc$resources$memory, lower = 1L, any.missing = FALSE, .var.name = "resources$memory") + timeout = if (is.null(jc$resources$walltime)) character(0L) else sprintf("timeout %i", asInt(jc$resources$walltime, lower = 0L)) + + # https://sfb876.tu-dortmund.de/sfbwiki/Wiki.jsp?page=Cluster + jc$resources$nodetype = jc$resources$nodetype %??% "==~cpu" + assertChoice(jc$resources$nodetype, c("==phi", "==~cpu", "!=phi"), null.ok = TRUE) + + batch.id = sprintf("%s-bt_%s", user, jc$job.hash) + cmd = c("docker", docker.args, "create", "--label queue", "--label rm", image.args, + sprintf("-e constraint:nodetype%s", jc$resources$nodetype), + sprintf("-e DEBUGME='%s'", Sys.getenv("DEBUGME")), + sprintf("-e OMP_NUM_THREADS=%i", jc$resources$threads %??% 1L), + sprintf("-e OPENBLAS_NUM_THREADS=%i", jc$resources$threads %??% 1L), + sprintf("-c %i", jc$resources$ncpus), + sprintf("-m %im", jc$resources$memory), + sprintf("--memory-swap %im", jc$resources$memory), + sprintf("--label batchtools=%s", jc$job.hash), + sprintf("--label user=%s", user), + sprintf("--name=%s", batch.id), + image, timeout, "Rscript", stri_join("-e", shQuote(sprintf("batchtools::doJobCollection('%s', '%s')", jc$uri, jc$log.file)), sep = " ")) + + res = runOSCommand(cmd[1L], cmd[-1L]) + + if (res$exit.code > 0L) { + return(cfHandleUnknownSubmitError(stri_flatten(cmd, " "), res$exit.code, res$output)) + } else { + return(makeSubmitJobResult(status = 0L, batch.id = batch.id)) + } + } + + dfJobsRunning = function(reg) { + args = c(docker.args, "ps", "--format='{{.ID}};{{.Names}}'", "--filter 'label=batchtools'", sprintf("--filter 'user=%s'", user)) + res = runOSCommand("docker", args) + if (res$exit.code > 0L) + OSError("Listing of jobs failed", res) + res.jobs = stri_split_fixed(res$output, ";") + if (length(res.jobs) == 0) { + res.jobs = data.table(character(0), character(0)) + } else { + res.jobs = do.call(rbind, res.jobs) + } + colnames(res.jobs) = c("docker.id", "batch.id") + res.jobs = as.data.table(res.jobs) + res.jobs$batch.id = stri_extract_last_regex(res.jobs$batch.id, "[0-9a-z_-]+") + return(res.jobs) + } + + dfJobsQueued = function(reg) { + if (!requireNamespace("jsonlite", quietly = TRUE)) + stop("Package 'jsonlite' is required") + + # list scheduled but not running + curl.res = runOSCommand("curl", unique(c("-s", curl.args, sprintf("%s/jobs/%s/json", docker.scheduler.url, user)))) + tab = jsonlite::fromJSON(curl.res$output) + if (length(tab) == 0L) { + tab = data.table(numeric(0), character(0)) + } else { + tab = as.data.table(tab[, c("id", "containerName")])[get("containerName") %chin% reg$status$batch.id] + } + colnames(tab) = c("schedule.id", "batch.id") + return(tab) + } + + killJob = function(reg, batch.id) { + assertRegistry(reg, writeable = TRUE) + assertString(batch.id) + this.batch.id = batch.id + df.queued = dfJobsQueued(reg) + if (this.batch.id %in% df.queued$batch.id) { + id = df.queued[batch.id == this.batch.id]$schedule.id + curl.res = runOSCommand("curl", c("-XDELETE", "-k", "-s", curl.args, sprintf("%s/jobs/%i/delete", docker.scheduler.url, id))) + success = stri_startswith_fixed(curl.res$output, "Successfully deleted") + } else { + df.running = dfJobsRunning(reg) + if (this.batch.id %in% df.running$batch.id) { + docker.id = df.running[batch.id == this.batch.id]$docker.id + success = cfKillJob(reg, "docker", c(docker.args, "kill", docker.id)) + } else { + success = FALSE + } + } + return(success) + } + + listJobsRunning = function(reg) { + assertRegistry(reg, writeable = FALSE) + tab = dfJobsRunning(reg) + tab$batch.id + } + + listJobsQueued = function(reg) { + assertRegistry(reg, writeable = FALSE) + + tab = dfJobsQueued(reg) + tab$batch.id + } + + + makeClusterFunctions(name = "DockerQueue", submitJob = submitJob, killJob = killJob, listJobsRunning = listJobsRunning, + listJobsQueued = listJobsQueued, store.job.collection = TRUE, scheduler.latency = scheduler.latency, fs.latency = fs.latency) +} # nocov end diff --git a/man/makeClusterFunctions.Rd b/man/makeClusterFunctions.Rd index 5df5dff2..0c1f7e7b 100644 --- a/man/makeClusterFunctions.Rd +++ b/man/makeClusterFunctions.Rd @@ -81,6 +81,19 @@ Note that some standard implementations for TORQUE, Slurm, LSF, SGE, etc. ship with the package. } \seealso{ +<<<<<<< HEAD +Other ClusterFunctions: \code{\link{makeClusterFunctionsDockerQueue}}, + \code{\link{makeClusterFunctionsDocker}}, + \code{\link{makeClusterFunctionsInteractive}}, + \code{\link{makeClusterFunctionsLSF}}, + \code{\link{makeClusterFunctionsMulticore}}, + \code{\link{makeClusterFunctionsOpenLava}}, + \code{\link{makeClusterFunctionsSGE}}, + \code{\link{makeClusterFunctionsSSH}}, + \code{\link{makeClusterFunctionsSlurm}}, + \code{\link{makeClusterFunctionsSocket}}, + \code{\link{makeClusterFunctionsTORQUE}} +======= Other ClusterFunctions: \code{\link{makeClusterFunctionsDocker}()}, \code{\link{makeClusterFunctionsInteractive}()}, @@ -92,6 +105,7 @@ Other ClusterFunctions: \code{\link{makeClusterFunctionsSlurm}()}, \code{\link{makeClusterFunctionsSocket}()}, \code{\link{makeClusterFunctionsTORQUE}()} +>>>>>>> master Other ClusterFunctionsHelper: \code{\link{cfBrewTemplate}()}, diff --git a/man/makeClusterFunctionsDocker.Rd b/man/makeClusterFunctionsDocker.Rd index 0ae80dbc..194b25e9 100644 --- a/man/makeClusterFunctionsDocker.Rd +++ b/man/makeClusterFunctionsDocker.Rd @@ -59,6 +59,19 @@ Use \code{docker ps -a --filter 'label=batchtools' --filter 'status=exited'} to containers manually (or usa a cron job). } \seealso{ +<<<<<<< HEAD +Other ClusterFunctions: \code{\link{makeClusterFunctionsDockerQueue}}, + \code{\link{makeClusterFunctionsInteractive}}, + \code{\link{makeClusterFunctionsLSF}}, + \code{\link{makeClusterFunctionsMulticore}}, + \code{\link{makeClusterFunctionsOpenLava}}, + \code{\link{makeClusterFunctionsSGE}}, + \code{\link{makeClusterFunctionsSSH}}, + \code{\link{makeClusterFunctionsSlurm}}, + \code{\link{makeClusterFunctionsSocket}}, + \code{\link{makeClusterFunctionsTORQUE}}, + \code{\link{makeClusterFunctions}} +======= Other ClusterFunctions: \code{\link{makeClusterFunctionsInteractive}()}, \code{\link{makeClusterFunctionsLSF}()}, @@ -70,5 +83,6 @@ Other ClusterFunctions: \code{\link{makeClusterFunctionsSocket}()}, \code{\link{makeClusterFunctionsTORQUE}()}, \code{\link{makeClusterFunctions}()} +>>>>>>> master } \concept{ClusterFunctions} diff --git a/man/makeClusterFunctionsDockerQueue.Rd b/man/makeClusterFunctionsDockerQueue.Rd new file mode 100644 index 00000000..886292eb --- /dev/null +++ b/man/makeClusterFunctionsDockerQueue.Rd @@ -0,0 +1,57 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/clusterFunctionsDockerQueue.R +\name{makeClusterFunctionsDockerQueue} +\alias{makeClusterFunctionsDockerQueue} +\title{ClusterFunctions for DockerQueue} +\usage{ +makeClusterFunctionsDockerQueue(image, docker.args = character(0L), + image.args = character(0L), scheduler.latency = 1, fs.latency = 65, + docker.scheduler.url = "https://s876cnsm:2350/v1.30", + curl.args = character(0L)) +} +\arguments{ +\item{image}{[\code{character(1)}]\cr +Name of the docker image to run.} + +\item{docker.args}{[\code{character}]\cr +Additional arguments passed to \dQuote{docker} *before* the command (\dQuote{run}, \dQuote{ps} or \dQuote{kill}) to execute (e.g., the docker host).} + +\item{image.args}{[\code{character}]\cr +Additional arguments passed to \dQuote{docker run} (e.g., to define mounts or environment variables).} + +\item{scheduler.latency}{[\code{numeric(1)}]\cr +Time to sleep after important interactions with the scheduler to ensure a sane state. +Currently only triggered after calling \code{\link{submitJobs}}.} + +\item{fs.latency}{[\code{numeric(1)}]\cr +Expected maximum latency of the file system, in seconds. +Set to a positive number for network file systems like NFS which enables more robust (but also more expensive) mechanisms to +access files and directories. +Usually safe to set to \code{0} to disable the heuristic, e.g. if you are working on a local file system.} + +\item{docker.scheduler.url}{[\code{character}]\cr +URL of the docker scheduler API.} + +\item{curl.args}{[\code{character}]\cr +arguments that should be passed to curl when accessing the DockerQueue-API.} +} +\value{ +[\code{\link{ClusterFunctions}}]. +} +\description{ +Customized cluster functions for the isolated application running on the SFB876 cluster. +} +\seealso{ +Other ClusterFunctions: \code{\link{makeClusterFunctionsDocker}}, + \code{\link{makeClusterFunctionsInteractive}}, + \code{\link{makeClusterFunctionsLSF}}, + \code{\link{makeClusterFunctionsMulticore}}, + \code{\link{makeClusterFunctionsOpenLava}}, + \code{\link{makeClusterFunctionsSGE}}, + \code{\link{makeClusterFunctionsSSH}}, + \code{\link{makeClusterFunctionsSlurm}}, + \code{\link{makeClusterFunctionsSocket}}, + \code{\link{makeClusterFunctionsTORQUE}}, + \code{\link{makeClusterFunctions}} +} +\concept{ClusterFunctions} diff --git a/man/makeClusterFunctionsInteractive.Rd b/man/makeClusterFunctionsInteractive.Rd index 2330134c..f669341c 100644 --- a/man/makeClusterFunctionsInteractive.Rd +++ b/man/makeClusterFunctionsInteractive.Rd @@ -39,6 +39,19 @@ Listing jobs returns an empty vector (as no jobs can be running when you call th and \code{killJob} is not implemented for the same reasons. } \seealso{ +<<<<<<< HEAD +Other ClusterFunctions: \code{\link{makeClusterFunctionsDockerQueue}}, + \code{\link{makeClusterFunctionsDocker}}, + \code{\link{makeClusterFunctionsLSF}}, + \code{\link{makeClusterFunctionsMulticore}}, + \code{\link{makeClusterFunctionsOpenLava}}, + \code{\link{makeClusterFunctionsSGE}}, + \code{\link{makeClusterFunctionsSSH}}, + \code{\link{makeClusterFunctionsSlurm}}, + \code{\link{makeClusterFunctionsSocket}}, + \code{\link{makeClusterFunctionsTORQUE}}, + \code{\link{makeClusterFunctions}} +======= Other ClusterFunctions: \code{\link{makeClusterFunctionsDocker}()}, \code{\link{makeClusterFunctionsLSF}()}, @@ -50,5 +63,6 @@ Other ClusterFunctions: \code{\link{makeClusterFunctionsSocket}()}, \code{\link{makeClusterFunctionsTORQUE}()}, \code{\link{makeClusterFunctions}()} +>>>>>>> master } \concept{ClusterFunctions} diff --git a/man/makeClusterFunctionsLSF.Rd b/man/makeClusterFunctionsLSF.Rd index 682e50f9..b4856275 100644 --- a/man/makeClusterFunctionsLSF.Rd +++ b/man/makeClusterFunctionsLSF.Rd @@ -53,6 +53,19 @@ allocations. Array jobs are currently not supported. } \seealso{ +<<<<<<< HEAD +Other ClusterFunctions: \code{\link{makeClusterFunctionsDockerQueue}}, + \code{\link{makeClusterFunctionsDocker}}, + \code{\link{makeClusterFunctionsInteractive}}, + \code{\link{makeClusterFunctionsMulticore}}, + \code{\link{makeClusterFunctionsOpenLava}}, + \code{\link{makeClusterFunctionsSGE}}, + \code{\link{makeClusterFunctionsSSH}}, + \code{\link{makeClusterFunctionsSlurm}}, + \code{\link{makeClusterFunctionsSocket}}, + \code{\link{makeClusterFunctionsTORQUE}}, + \code{\link{makeClusterFunctions}} +======= Other ClusterFunctions: \code{\link{makeClusterFunctionsDocker}()}, \code{\link{makeClusterFunctionsInteractive}()}, @@ -64,5 +77,6 @@ Other ClusterFunctions: \code{\link{makeClusterFunctionsSocket}()}, \code{\link{makeClusterFunctionsTORQUE}()}, \code{\link{makeClusterFunctions}()} +>>>>>>> master } \concept{ClusterFunctions} diff --git a/man/makeClusterFunctionsMulticore.Rd b/man/makeClusterFunctionsMulticore.Rd index ef766b2c..7bcac589 100644 --- a/man/makeClusterFunctionsMulticore.Rd +++ b/man/makeClusterFunctionsMulticore.Rd @@ -26,6 +26,19 @@ Jobs are spawned asynchronously using the functions \code{mcparallel} and \code{ Does not work on Windows, use \code{\link{makeClusterFunctionsSocket}} instead. } \seealso{ +<<<<<<< HEAD +Other ClusterFunctions: \code{\link{makeClusterFunctionsDockerQueue}}, + \code{\link{makeClusterFunctionsDocker}}, + \code{\link{makeClusterFunctionsInteractive}}, + \code{\link{makeClusterFunctionsLSF}}, + \code{\link{makeClusterFunctionsOpenLava}}, + \code{\link{makeClusterFunctionsSGE}}, + \code{\link{makeClusterFunctionsSSH}}, + \code{\link{makeClusterFunctionsSlurm}}, + \code{\link{makeClusterFunctionsSocket}}, + \code{\link{makeClusterFunctionsTORQUE}}, + \code{\link{makeClusterFunctions}} +======= Other ClusterFunctions: \code{\link{makeClusterFunctionsDocker}()}, \code{\link{makeClusterFunctionsInteractive}()}, @@ -37,5 +50,6 @@ Other ClusterFunctions: \code{\link{makeClusterFunctionsSocket}()}, \code{\link{makeClusterFunctionsTORQUE}()}, \code{\link{makeClusterFunctions}()} +>>>>>>> master } \concept{ClusterFunctions} diff --git a/man/makeClusterFunctionsOpenLava.Rd b/man/makeClusterFunctionsOpenLava.Rd index 88ebc683..94179676 100644 --- a/man/makeClusterFunctionsOpenLava.Rd +++ b/man/makeClusterFunctionsOpenLava.Rd @@ -53,6 +53,19 @@ allocations. Array jobs are currently not supported. } \seealso{ +<<<<<<< HEAD +Other ClusterFunctions: \code{\link{makeClusterFunctionsDockerQueue}}, + \code{\link{makeClusterFunctionsDocker}}, + \code{\link{makeClusterFunctionsInteractive}}, + \code{\link{makeClusterFunctionsLSF}}, + \code{\link{makeClusterFunctionsMulticore}}, + \code{\link{makeClusterFunctionsSGE}}, + \code{\link{makeClusterFunctionsSSH}}, + \code{\link{makeClusterFunctionsSlurm}}, + \code{\link{makeClusterFunctionsSocket}}, + \code{\link{makeClusterFunctionsTORQUE}}, + \code{\link{makeClusterFunctions}} +======= Other ClusterFunctions: \code{\link{makeClusterFunctionsDocker}()}, \code{\link{makeClusterFunctionsInteractive}()}, @@ -64,5 +77,6 @@ Other ClusterFunctions: \code{\link{makeClusterFunctionsSocket}()}, \code{\link{makeClusterFunctionsTORQUE}()}, \code{\link{makeClusterFunctions}()} +>>>>>>> master } \concept{ClusterFunctions} diff --git a/man/makeClusterFunctionsSGE.Rd b/man/makeClusterFunctionsSGE.Rd index d9164a1b..ecdaafed 100644 --- a/man/makeClusterFunctionsSGE.Rd +++ b/man/makeClusterFunctionsSGE.Rd @@ -63,6 +63,19 @@ allocations. Array jobs are currently not supported. } \seealso{ +<<<<<<< HEAD +Other ClusterFunctions: \code{\link{makeClusterFunctionsDockerQueue}}, + \code{\link{makeClusterFunctionsDocker}}, + \code{\link{makeClusterFunctionsInteractive}}, + \code{\link{makeClusterFunctionsLSF}}, + \code{\link{makeClusterFunctionsMulticore}}, + \code{\link{makeClusterFunctionsOpenLava}}, + \code{\link{makeClusterFunctionsSSH}}, + \code{\link{makeClusterFunctionsSlurm}}, + \code{\link{makeClusterFunctionsSocket}}, + \code{\link{makeClusterFunctionsTORQUE}}, + \code{\link{makeClusterFunctions}} +======= Other ClusterFunctions: \code{\link{makeClusterFunctionsDocker}()}, \code{\link{makeClusterFunctionsInteractive}()}, @@ -74,5 +87,6 @@ Other ClusterFunctions: \code{\link{makeClusterFunctionsSocket}()}, \code{\link{makeClusterFunctionsTORQUE}()}, \code{\link{makeClusterFunctions}()} +>>>>>>> master } \concept{ClusterFunctions} diff --git a/man/makeClusterFunctionsSSH.Rd b/man/makeClusterFunctionsSSH.Rd index 77ddd4a1..2c937d2b 100644 --- a/man/makeClusterFunctionsSSH.Rd +++ b/man/makeClusterFunctionsSSH.Rd @@ -37,6 +37,19 @@ makeClusterFunctionsSSH(list(Worker$new("localhost", ncpus = 2))) } } \seealso{ +<<<<<<< HEAD +Other ClusterFunctions: \code{\link{makeClusterFunctionsDockerQueue}}, + \code{\link{makeClusterFunctionsDocker}}, + \code{\link{makeClusterFunctionsInteractive}}, + \code{\link{makeClusterFunctionsLSF}}, + \code{\link{makeClusterFunctionsMulticore}}, + \code{\link{makeClusterFunctionsOpenLava}}, + \code{\link{makeClusterFunctionsSGE}}, + \code{\link{makeClusterFunctionsSlurm}}, + \code{\link{makeClusterFunctionsSocket}}, + \code{\link{makeClusterFunctionsTORQUE}}, + \code{\link{makeClusterFunctions}} +======= Other ClusterFunctions: \code{\link{makeClusterFunctionsDocker}()}, \code{\link{makeClusterFunctionsInteractive}()}, @@ -48,5 +61,6 @@ Other ClusterFunctions: \code{\link{makeClusterFunctionsSocket}()}, \code{\link{makeClusterFunctionsTORQUE}()}, \code{\link{makeClusterFunctions}()} +>>>>>>> master } \concept{ClusterFunctions} diff --git a/man/makeClusterFunctionsSlurm.Rd b/man/makeClusterFunctionsSlurm.Rd index 3e1c0f75..2df3a720 100644 --- a/man/makeClusterFunctionsSlurm.Rd +++ b/man/makeClusterFunctionsSlurm.Rd @@ -66,6 +66,19 @@ Note that you might have to specify the cluster name here if you do not want to otherwise the commands for listing and killing jobs will not work. } \seealso{ +<<<<<<< HEAD +Other ClusterFunctions: \code{\link{makeClusterFunctionsDockerQueue}}, + \code{\link{makeClusterFunctionsDocker}}, + \code{\link{makeClusterFunctionsInteractive}}, + \code{\link{makeClusterFunctionsLSF}}, + \code{\link{makeClusterFunctionsMulticore}}, + \code{\link{makeClusterFunctionsOpenLava}}, + \code{\link{makeClusterFunctionsSGE}}, + \code{\link{makeClusterFunctionsSSH}}, + \code{\link{makeClusterFunctionsSocket}}, + \code{\link{makeClusterFunctionsTORQUE}}, + \code{\link{makeClusterFunctions}} +======= Other ClusterFunctions: \code{\link{makeClusterFunctionsDocker}()}, \code{\link{makeClusterFunctionsInteractive}()}, @@ -77,5 +90,6 @@ Other ClusterFunctions: \code{\link{makeClusterFunctionsSocket}()}, \code{\link{makeClusterFunctionsTORQUE}()}, \code{\link{makeClusterFunctions}()} +>>>>>>> master } \concept{ClusterFunctions} diff --git a/man/makeClusterFunctionsSocket.Rd b/man/makeClusterFunctionsSocket.Rd index 962d1058..87ad2653 100644 --- a/man/makeClusterFunctionsSocket.Rd +++ b/man/makeClusterFunctionsSocket.Rd @@ -25,6 +25,19 @@ Usually safe to set to \code{0} to disable the heuristic, e.g. if you are workin Jobs are spawned asynchronously using the package \pkg{snow}. } \seealso{ +<<<<<<< HEAD +Other ClusterFunctions: \code{\link{makeClusterFunctionsDockerQueue}}, + \code{\link{makeClusterFunctionsDocker}}, + \code{\link{makeClusterFunctionsInteractive}}, + \code{\link{makeClusterFunctionsLSF}}, + \code{\link{makeClusterFunctionsMulticore}}, + \code{\link{makeClusterFunctionsOpenLava}}, + \code{\link{makeClusterFunctionsSGE}}, + \code{\link{makeClusterFunctionsSSH}}, + \code{\link{makeClusterFunctionsSlurm}}, + \code{\link{makeClusterFunctionsTORQUE}}, + \code{\link{makeClusterFunctions}} +======= Other ClusterFunctions: \code{\link{makeClusterFunctionsDocker}()}, \code{\link{makeClusterFunctionsInteractive}()}, @@ -36,5 +49,6 @@ Other ClusterFunctions: \code{\link{makeClusterFunctionsSlurm}()}, \code{\link{makeClusterFunctionsTORQUE}()}, \code{\link{makeClusterFunctions}()} +>>>>>>> master } \concept{ClusterFunctions} diff --git a/man/makeClusterFunctionsTORQUE.Rd b/man/makeClusterFunctionsTORQUE.Rd index c9102ddd..d53f0114 100644 --- a/man/makeClusterFunctionsTORQUE.Rd +++ b/man/makeClusterFunctionsTORQUE.Rd @@ -49,6 +49,19 @@ It is the template file's job to choose a queue for the job and handle the desir allocations. } \seealso{ +<<<<<<< HEAD +Other ClusterFunctions: \code{\link{makeClusterFunctionsDockerQueue}}, + \code{\link{makeClusterFunctionsDocker}}, + \code{\link{makeClusterFunctionsInteractive}}, + \code{\link{makeClusterFunctionsLSF}}, + \code{\link{makeClusterFunctionsMulticore}}, + \code{\link{makeClusterFunctionsOpenLava}}, + \code{\link{makeClusterFunctionsSGE}}, + \code{\link{makeClusterFunctionsSSH}}, + \code{\link{makeClusterFunctionsSlurm}}, + \code{\link{makeClusterFunctionsSocket}}, + \code{\link{makeClusterFunctions}} +======= Other ClusterFunctions: \code{\link{makeClusterFunctionsDocker}()}, \code{\link{makeClusterFunctionsInteractive}()}, @@ -60,5 +73,6 @@ Other ClusterFunctions: \code{\link{makeClusterFunctionsSlurm}()}, \code{\link{makeClusterFunctionsSocket}()}, \code{\link{makeClusterFunctions}()} +>>>>>>> master } \concept{ClusterFunctions} diff --git a/tests/testthat/test_ClusterFunctions.R b/tests/testthat/test_ClusterFunctions.R index 483549ad..36344ee1 100644 --- a/tests/testthat/test_ClusterFunctions.R +++ b/tests/testthat/test_ClusterFunctions.R @@ -20,6 +20,7 @@ test_that("clusterFunctions constructor", { check(makeClusterFunctionsTORQUE("torque-lido")) check(makeClusterFunctionsSlurm("slurm-dortmund")) check(makeClusterFunctionsDocker("image")) + check(makeClusterFunctionsDockerQueue("image")) expect_error(makeClusterFunctionsLSF(), "point to a readable template file") skip_on_os(c("windows", "solaris")) # system2 is broken on solaris