Hey Dave,
In qube! this is known as preemption. Jobs of higher priority replace those of lower priority when one of the following events occur:
A new job of higher priority enters the queue
An existing job is modified to be higher priority
By default, preemption is setup to be "passive" which means to replace jobs at the most convenient point. This saves lower priority from having to redo their work. So a low priority job will finish the frame it is currently on, and will then exit gracefully.
qube! can also be setup to do a more "aggressive" preemption, where a job to be replaced is immediately killed and requeueed. While this is more destructive, it is easier for most users to comprehend so some studios prefer to work this way.
In terms of fine grain control, this can be handled in virtually any way using a customized policy. The supervisor allows you to create a simple policy script file, which defines how you would like to handle a preemption. In this file, the supervisor will pass your routines the candidate job to replace and to be replaced. Your policy can then choose to either skip the preemption all together, or to return a passive or aggressive decision. This allows you to create a large range of actions perfectly tuned to the way your studio does things. Examples of this are:
I would like my job to preempt another job only if it's priority is 100 or greater.
If a job has been running for longer than 3 hours, I would like preemption to skip it, even if the modified or new job is higher priority.
Jobs owned by "user name" are not allowed to preempt other jobs.
If the job is 10 or greater, it is allowed to aggressively preempt other jobs.
If you need any examples on how to create a customized policy, we'll be happy to provide some for you.
Thanks,
Anthony