Job and Worker Restrictions
Restrictions are used to allow or restrict where jobs run, and are applied to both jobs and Workers. Restrictions are based on cluster names. A job has preferential priority on a Worker whose cluster matches the job's cluster, but the job is free to run on any Worker in any other cluster, subject to the restrictions defined here.
Restrictions defined for jobs
When a job has a restriction defined, it means only run on hosts that satisfy the restriction expression. Hosts that don't satisfy the restriction expression won't be considered as dispatch candidates (the job will never be sent to that Worker).
Restrictions defined for Workers
When a Worker has a restriction defined via its worker_restrictions value, it means only run jobs whose cluster value matches one of the clusters in that worker's restriction expression. The worker won't accept jobs whose cluster doesn't match one of the clusters in the worker's restriction expression.
Restrictions Syntax
A restriction is really defined as a "filter" for hosts based upon information in the queuing algorithm; the values are one or more cluster names. In the priority/cluster queuing system, a user specifies the restrictions with a directory structure format:
/[<segment>/][<segment>/][+|*]
- * means only the first level below.
- + means all levels below that level, regardless of depth in the hierarchy.
Examples
Job Restrictions
Syntax | Meaning |
---|---|
qbsub -cl /private -restr /private <cmd> | Submit a job that will have highest priority in /private and run only in /private |
qbsub -cl /private/very -restr '/private or /private/*' <cmd> | Submit a job that will have highest priority in /private/very, but could run in any host in |
qbsub -cl /private/very/deep -restr '/private or /private/+' <cmd> | Submit a job that will have highest priority in /private/very/deep, but could run in any host |
Worker Restrictions
Syntax | Meaning |
---|---|
worker_cluster = "/private/very/deep" | Define a host that will only run jobs in /private/very/deep |
worker_cluster = "/private" | Define a host that will run jobs in any cluster at /private or 1 level below - done with the * |
worker_cluster = "/private/very" | Define a host that will only run jobs in /private/very or any level below - done with the + |