Skip to content

Commit

Permalink
Add priority to pyoutline cue backend. (#625)
Browse files Browse the repository at this point in the history
* Add priority to pyoutline cue backend.

Support new parameter in xml spec.
Set priority on job resource after insertion into jobs table

Closes #493

* bump version

* Use priority only from launcher

* build the version number in the header

Co-authored-by: Lars van der Bijl <lars@electrictheatre.tv>
  • Loading branch information
larsbijl and Lars van der Bijl authored Feb 7, 2021
1 parent a2a3642 commit d9c7fd9
Show file tree
Hide file tree
Showing 7 changed files with 204 additions and 2 deletions.
2 changes: 1 addition & 1 deletion VERSION.in
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.6
0.7
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,10 @@ public JobDetail createJob(BuildableJob buildableJob) {
frameDao.insertFrames(layer, frames);
}

// The priority of a job is set on it's resource entry.
// To update it we set the priority after it's been inserted.
jobDao.updatePriority(job, job.priority);

/*
* Finally, run any filters on the job which may set the job's
* priority.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,11 @@ private BuildableJob handleJobTag(Element jobTag) {
job.maxRetries = FRAME_RETRIES_MIN;
}
}

if (jobTag.getChildTextTrim("priority") != null) {
job.priority = Integer.valueOf(jobTag.getChildTextTrim("priority"));
}

handleLayerTags(buildableJob, jobTag);

if (buildableJob.getBuildableLayers().size() > MAX_LAYERS) {
Expand Down
95 changes: 95 additions & 0 deletions cuebot/src/main/resources/public/dtd/cjsl-1.11.dtd
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
<!-- ================================================================= -->
<!-- SpiCue Job Spec DTD ver 1.11 -->
<!-- middle-tier@imageworks.com -->
<!-- ================================================================= -->

<!ELEMENT spec (facility?,dept?,show,shot,user,email?,uid?,job*,depends*)>
<!ELEMENT facility (#PCDATA)*>
<!ELEMENT dept (#PCDATA)*>
<!ELEMENT show (#PCDATA)*>
<!ELEMENT shot (#PCDATA)*>
<!ELEMENT user (#PCDATA)*>
<!ELEMENT email (#PCDATA)*>
<!ELEMENT uid (#PCDATA)*>

<!-- ================================================================= -->
<!-- Jobs -->
<!-- ================================================================= -->
<!ELEMENT job (paused?,priority?,maxretries?,autoeat?,localbook?,os?,env*,layers?)>
<!ATTLIST job
name NMTOKEN #REQUIRED
>
<!ELEMENT paused (#PCDATA)*>
<!ELEMENT priority (#PCDATA)*>
<!ELEMENT maxretries (#PCDATA)*>
<!ELEMENT autoeat (#PCDATA)*>
<!ELEMENT os (#PCDATA)*>
<!ELEMENT localbook (#PCDATA)*>
<!ATTLIST localbook
host NMTOKEN #REQUIRED
cores NMTOKEN #REQUIRED
memory NMTOKEN #REQUIRED
threads NMTOKEN #REQUIRED
gpu NMTOKEN #REQUIRED
>

<!-- ================================================================= -->
<!-- Layers -->
<!-- ================================================================= -->

<!ELEMENT layers (layer+)>
<!ELEMENT layer (cmd,range,chunk,cores?,threadable?,memory?,gpu?,timeout?,timeout_llu?,tags?,limits?,env*,services?)>
<!ATTLIST layer
name NMTOKEN #REQUIRED
type (Render | Util | Post) #REQUIRED
>
<!ELEMENT cmd (#PCDATA)*>
<!ELEMENT range (#PCDATA)*>
<!ELEMENT chunk (#PCDATA)*>
<!ELEMENT cores (#PCDATA)*>
<!ELEMENT threadable (#PCDATA)*>
<!ELEMENT memory (#PCDATA)*>
<!ELEMENT gpu (#PCDATA)*>
<!ELEMENT timeout (#PCDATA)*>
<!ELEMENT timeout_llu (#PCDATA)*>
<!ELEMENT tags (#PCDATA)*>
<!ELEMENT limits (limit+)>
<!ELEMENT services (service+)>
<!ELEMENT env (key*)>


<!-- ================================================================= -->
<!-- Layer Services -->
<!-- ================================================================= -->
<!ELEMENT service (#PCDATA)*>

<!-- ================================================================= -->
<!-- Layer Limits -->
<!-- ================================================================= -->
<!ELEMENT limit (#PCDATA)*>

<!-- ================================================================= -->
<!-- Environment Variables -->
<!-- ================================================================= -->

<!ELEMENT key (#PCDATA)*>
<!ATTLIST key
name NMTOKEN #REQUIRED
>

<!-- ================================================================= -->
<!-- Dependencies -->
<!-- ================================================================= -->

<!ELEMENT depends (depend*)>
<!ELEMENT depend (depjob,deplayer?,depframe?,onjob,onlayer?,onframe?)>
<!ATTLIST depend
anyframe NMTOKEN #IMPLIED
type (LAYER_ON_SIM_FRAME|PREVIOUS_FRAME|JOB_ON_JOB|JOB_ON_LAYER|JOB_ON_FRAME|LAYER_ON_JOB|LAYER_ON_FRAME|LAYER_ON_LAYER|FRAME_ON_JOB|FRAME_ON_LAYER|FRAME_ON_FRAME|FRAME_BY_FRAME) #REQUIRED
>
<!ELEMENT depjob (#PCDATA)*>
<!ELEMENT onjob (#PCDATA)*>
<!ELEMENT deplayer (#PCDATA)*>
<!ELEMENT onlayer (#PCDATA)*>
<!ELEMENT depframe (#PCDATA)*>
<!ELEMENT onframe (#PCDATA)*>
95 changes: 95 additions & 0 deletions cuebot/src/test/resources/conf/dtd/cjsl-1.11.dtd
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
<!-- ================================================================= -->
<!-- SpiCue Job Spec DTD ver 1.11 -->
<!-- middle-tier@imageworks.com -->
<!-- ================================================================= -->

<!ELEMENT spec (facility?,dept?,show,shot,user,email?,uid?,job*,depends*)>
<!ELEMENT facility (#PCDATA)*>
<!ELEMENT dept (#PCDATA)*>
<!ELEMENT show (#PCDATA)*>
<!ELEMENT shot (#PCDATA)*>
<!ELEMENT user (#PCDATA)*>
<!ELEMENT email (#PCDATA)*>
<!ELEMENT uid (#PCDATA)*>

<!-- ================================================================= -->
<!-- Jobs -->
<!-- ================================================================= -->
<!ELEMENT job (paused?,priority?,maxretries?,autoeat?,localbook?,os?,env*,layers?)>
<!ATTLIST job
name NMTOKEN #REQUIRED
>
<!ELEMENT paused (#PCDATA)*>
<!ELEMENT priority (#PCDATA)*>
<!ELEMENT maxretries (#PCDATA)*>
<!ELEMENT autoeat (#PCDATA)*>
<!ELEMENT os (#PCDATA)*>
<!ELEMENT localbook (#PCDATA)*>
<!ATTLIST localbook
host NMTOKEN #REQUIRED
cores NMTOKEN #REQUIRED
memory NMTOKEN #REQUIRED
threads NMTOKEN #REQUIRED
gpu NMTOKEN #REQUIRED
>

<!-- ================================================================= -->
<!-- Layers -->
<!-- ================================================================= -->

<!ELEMENT layers (layer+)>
<!ELEMENT layer (cmd,range,chunk,cores?,threadable?,memory?,gpu?,timeout?,timeout_llu?,tags?,limits?,env*,services?)>
<!ATTLIST layer
name NMTOKEN #REQUIRED
type (RENDER | UTIL | POST) #REQUIRED
>
<!ELEMENT cmd (#PCDATA)*>
<!ELEMENT range (#PCDATA)*>
<!ELEMENT chunk (#PCDATA)*>
<!ELEMENT cores (#PCDATA)*>
<!ELEMENT threadable (#PCDATA)*>
<!ELEMENT memory (#PCDATA)*>
<!ELEMENT gpu (#PCDATA)*>
<!ELEMENT timeout (#PCDATA)*>
<!ELEMENT timeout_llu (#PCDATA)*>
<!ELEMENT tags (#PCDATA)*>
<!ELEMENT limits (limit+)>
<!ELEMENT services (service+)>
<!ELEMENT env (key*)>


<!-- ================================================================= -->
<!-- Layer Services -->
<!-- ================================================================= -->
<!ELEMENT service (#PCDATA)*>

<!-- ================================================================= -->
<!-- Layer Limits -->
<!-- ================================================================= -->
<!ELEMENT limit (#PCDATA)*>

<!-- ================================================================= -->
<!-- Environment Variables -->
<!-- ================================================================= -->

<!ELEMENT key (#PCDATA)*>
<!ATTLIST key
name NMTOKEN #REQUIRED
>

<!-- ================================================================= -->
<!-- Dependencies -->
<!-- ================================================================= -->

<!ELEMENT depends (depend*)>
<!ELEMENT depend (depjob,deplayer?,depframe?,onjob,onlayer?,onframe?)>
<!ATTLIST depend
anyframe NMTOKEN #IMPLIED
type (LAYER_ON_SIM_FRAME|PREVIOUS_FRAME|JOB_ON_JOB|JOB_ON_LAYER|JOB_ON_FRAME|LAYER_ON_JOB|LAYER_ON_FRAME|LAYER_ON_LAYER|FRAME_ON_JOB|FRAME_ON_LAYER|FRAME_ON_FRAME|FRAME_BY_FRAME) #REQUIRED
>
<!ELEMENT depjob (#PCDATA)*>
<!ELEMENT onjob (#PCDATA)*>
<!ELEMENT deplayer (#PCDATA)*>
<!ELEMENT onlayer (#PCDATA)*>
<!ELEMENT depframe (#PCDATA)*>
<!ELEMENT onframe (#PCDATA)*>
3 changes: 2 additions & 1 deletion pyoutline/outline/backend/cue.py
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,7 @@ def _serialize(launcher, use_pycuerun):

j = Et.SubElement(root, "job", {"name": ol.get_name()})
sub_element(j, "paused", str(launcher.get("pause")))
sub_element(j, "priority", str(launcher.get("priority")))
sub_element(j, "maxretries", str(launcher.get("maxretries")))
sub_element(j, "autoeat", str(launcher.get("autoeat")))

Expand Down Expand Up @@ -351,7 +352,7 @@ def _serialize(launcher, use_pycuerun):
xml = [
'<?xml version="1.0"?>',
'<!DOCTYPE spec PUBLIC "SPI Cue Specification Language" '
'"http://localhost:8080/spcue/dtd/cjsl-1.10.dtd">',
'"http://localhost:8080/spcue/dtd/cjsl-1.11.dtd">',
Et.tostring(root).decode()
]

Expand Down
2 changes: 2 additions & 0 deletions pyoutline/outline/cuerun.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ class OutlineLauncher(object):
def __init__(self, outline, **args):
self.__outline = outline
self.__flags = {"pause": False,
"priority": 1,
"wait": False,
"test": False,
"server": False,
Expand Down Expand Up @@ -355,6 +356,7 @@ def options_to_args(options):
"basename": options.basename,
"server": options.server,
"pause": options.pause,
"priority": options.priority,
"wait": options.wait,
"test": options.test,
"range": options.range,
Expand Down

0 comments on commit d9c7fd9

Please sign in to comment.
  翻译: