Skip to content

Commit

Permalink
Make UID optional in frame submission (AcademySoftwareFoundation#618)
Browse files Browse the repository at this point in the history
  • Loading branch information
Porges authored Feb 24, 2020
1 parent 5856897 commit 3877834
Show file tree
Hide file tree
Showing 20 changed files with 178 additions and 37 deletions.
3 changes: 2 additions & 1 deletion cuebot/src/main/java/com/imageworks/spcue/DispatchFrame.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

package com.imageworks.spcue;

import java.util.Optional;
import com.imageworks.spcue.grpc.job.FrameState;

public class DispatchFrame extends FrameEntity implements FrameInterface {
Expand All @@ -29,7 +30,7 @@ public class DispatchFrame extends FrameEntity implements FrameInterface {
public String show;
public String shot;
public String owner;
public int uid;
public Optional<Integer> uid;
public String logDir;
public String command;
public String range;
Expand Down
6 changes: 3 additions & 3 deletions cuebot/src/main/java/com/imageworks/spcue/JobDetail.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
* limitations under the License.
*/



package com.imageworks.spcue;

import java.util.Optional;

import com.imageworks.spcue.grpc.job.JobState;

public class JobDetail extends JobEntity implements JobInterface, DepartmentInterface {
Expand All @@ -28,7 +28,7 @@ public class JobDetail extends JobEntity implements JobInterface, DepartmentInte
public String shot;
public String user;
public String email;
public int uid;
public Optional<Integer> uid;
public String logDir;
public boolean isPaused;
public boolean isAutoEat;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Optional;

import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
Expand Down Expand Up @@ -265,7 +266,8 @@ public DispatchFrame mapRow(ResultSet rs, int rowNum) throws SQLException {
frame.shot = rs.getString("str_shot");
frame.show = rs.getString("show_name");
frame.owner = rs.getString("str_user");
frame.uid = rs.getInt("int_uid");
int uid = rs.getInt("int_uid");
frame.uid = rs.wasNull() ? Optional.empty() : Optional.of(uid);
frame.state = FrameState.valueOf(rs.getString("frame_state"));
frame.minCores = rs.getInt("int_cores_min");
frame.maxCores = rs.getInt("int_cores_max");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
Expand Down Expand Up @@ -119,7 +120,8 @@ public JobDetail mapRow(ResultSet rs, int rowNum) throws SQLException {
job.priority = rs.getInt("int_priority");
job.shot = rs.getString("str_shot");
job.state = JobState.valueOf(rs.getString("str_state"));
job.uid = rs.getInt("int_uid");
int uid = rs.getInt("int_uid");
job.uid = rs.wasNull() ? Optional.empty() : Optional.of(uid);
job.user = rs.getString("str_user");
job.email = rs.getString("str_email");
job.totalFrames = rs.getInt("int_frame_count");
Expand Down Expand Up @@ -449,7 +451,7 @@ public void insertJob(JobDetail j, JobLogUtil jobLogUtil) {
getJdbcTemplate().update(INSERT_JOB,
j.id, j.showId, j.groupId, j.facilityId, j.deptId,
j.name, j.name, j.showName, j.shot, j.user, j.email, j.state.toString(),
j.logDir, j.os, j.uid, j.isPaused, j.isAutoEat, j.maxRetries);
j.logDir, j.os, j.uid.orElse(null), j.isPaused, j.isAutoEat, j.maxRetries);
}

private static final String JOB_EXISTS =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -261,13 +261,18 @@ private static final NestedJob mapResultSetToJob(ResultSet rs) throws SQLExcepti
.setFacility(rs.getString("facility_name"))
.setGroup(rs.getString("group_name"))
.setState(JobState.valueOf(rs.getString("str_state")))
.setUid(rs.getInt("int_uid"))
.setUser(rs.getString("str_user"))
.setIsPaused(rs.getBoolean("b_paused"))
.setHasComment(rs.getBoolean("b_comment"))
.setAutoEat(rs.getBoolean("b_autoeat"))
.setStartTime((int) (rs.getTimestamp("ts_started").getTime() / 1000))
.setStats(WhiteboardDaoJdbc.mapJobStats(rs));

int uid = rs.getInt("int_uid");
if (!rs.wasNull()) {
jobBuilder.setUid(uid);
}

Timestamp ts = rs.getTimestamp("ts_stopped");
if (ts != null) {
jobBuilder.setStopTime((int) (ts.getTime() / 1000));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1163,14 +1163,18 @@ public Job mapRow(ResultSet rs, int rowNum) throws SQLException {
.setFacility(SqlUtil.getString(rs, "facility_name"))
.setGroup(SqlUtil.getString(rs, "group_name"))
.setState(JobState.valueOf(SqlUtil.getString(rs, "str_state")))
.setUid(rs.getInt("int_uid"))
.setUser(SqlUtil.getString(rs, "str_user"))
.setIsPaused(rs.getBoolean("b_paused"))
.setHasComment(rs.getBoolean("b_comment"))
.setAutoEat(rs.getBoolean("b_autoeat"))
.setStartTime((int) (rs.getTimestamp("ts_started").getTime() / 1000))
.setOs(SqlUtil.getString(rs, "str_os"));

int uid = rs.getInt("int_uid");
if (!rs.wasNull()) {
jobBuilder.setUid(uid);
}

Timestamp ts = rs.getTimestamp("ts_stopped");
if (ts != null) {
jobBuilder.setStopTime((int) (ts.getTime() / 1000));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Optional;

import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
Expand Down Expand Up @@ -267,7 +268,8 @@ public DispatchFrame mapRow(ResultSet rs, int rowNum) throws SQLException {
frame.shot = rs.getString("str_shot");
frame.show = rs.getString("show_name");
frame.owner = rs.getString("str_user");
frame.uid = rs.getInt("int_uid");
int uid = rs.getInt("int_uid");
frame.uid = rs.wasNull() ? Optional.empty() : Optional.of(uid);
frame.state = FrameState.valueOf(rs.getString("frame_state"));
frame.minCores = rs.getInt("int_cores_min");
frame.maxCores = rs.getInt("int_cores_max");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
Expand Down Expand Up @@ -118,7 +119,8 @@ public JobDetail mapRow(ResultSet rs, int rowNum) throws SQLException {
job.priority = rs.getInt("int_priority");
job.shot = rs.getString("str_shot");
job.state = JobState.valueOf(rs.getString("str_state"));
job.uid = rs.getInt("int_uid");
int uid = rs.getInt("int_uid");
job.uid = rs.wasNull() ? Optional.empty() : Optional.of(uid);
job.user = rs.getString("str_user");
job.email = rs.getString("str_email");
job.totalFrames = rs.getInt("int_frame_count");
Expand Down Expand Up @@ -447,7 +449,7 @@ public void insertJob(JobDetail j, JobLogUtil jobLogUtil) {
getJdbcTemplate().update(INSERT_JOB,
j.id, j.showId, j.groupId, j.facilityId, j.deptId,
j.name, j.name, j.showName, j.shot, j.user, j.email, j.state.toString(),
j.logDir, j.os, j.uid, j.isPaused, j.isAutoEat, j.maxRetries);
j.logDir, j.os, j.uid.orElse(null), j.isPaused, j.isAutoEat, j.maxRetries);
}

private static final String JOB_EXISTS =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -262,13 +262,18 @@ private static final NestedJob mapResultSetToJob(ResultSet rs) throws SQLExcepti
.setFacility(rs.getString("facility_name"))
.setGroup(rs.getString("group_name"))
.setState(JobState.valueOf(rs.getString("str_state")))
.setUid(rs.getInt("int_uid"))
.setUser(rs.getString("str_user"))
.setIsPaused(rs.getBoolean("b_paused"))
.setHasComment(rs.getBoolean("b_comment"))
.setAutoEat(rs.getBoolean("b_autoeat"))
.setStartTime((int) (rs.getTimestamp("ts_started").getTime() / 1000))
.setStats(WhiteboardDaoJdbc.mapJobStats(rs));

int uid = rs.getInt("int_uid");
if (!rs.wasNull()) {
jobBuilder.setUid(uid);
}

Timestamp ts = rs.getTimestamp("ts_stopped");
if (ts != null) {
jobBuilder.setStopTime((int) (ts.getTime() / 1000));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1163,14 +1163,18 @@ public Job mapRow(ResultSet rs, int rowNum) throws SQLException {
.setFacility(SqlUtil.getString(rs,"facility_name"))
.setGroup(SqlUtil.getString(rs,"group_name"))
.setState(JobState.valueOf(SqlUtil.getString(rs,"str_state")))
.setUid(rs.getInt("int_uid"))
.setUser(SqlUtil.getString(rs,"str_user"))
.setIsPaused(rs.getBoolean("b_paused"))
.setHasComment(rs.getBoolean("b_comment"))
.setAutoEat(rs.getBoolean("b_autoeat"))
.setStartTime((int) (rs.getTimestamp("ts_started").getTime() / 1000))
.setOs(SqlUtil.getString(rs,"str_os"));

int uid = rs.getInt("int_uid");
if (!rs.wasNull()) {
jobBuilder.setUid(uid);
}

Timestamp ts = rs.getTimestamp("ts_stopped");
if (ts != null) {
jobBuilder.setStopTime((int) (ts.getTime() / 1000));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -351,11 +351,10 @@ public RunFrame prepareRqdRunFrame(VirtualProc proc, DispatchFrame frame) {
int startFrameIndex = fs.index(frameNumber);
String frameSpec = fs.getChunk(startFrameIndex, frame.chunkSize);

return RunFrame.newBuilder()
RunFrame.Builder builder = RunFrame.newBuilder()
.setShot(frame.shot)
.setShow(frame.show)
.setUserName(frame.owner)
.setUid(frame.uid)
.setLogDir(frame.logDir)
.setJobId(frame.jobId)
.setJobName(frame.jobName)
Expand Down Expand Up @@ -395,8 +394,11 @@ public RunFrame prepareRqdRunFrame(VirtualProc proc, DispatchFrame frame) {
.replaceAll("#LAYER#", frame.layerName)
.replaceAll("#JOB#", frame.jobName)
.replaceAll("#FRAMESPEC#", frameSpec)
.replaceAll("#FRAME#", frame.name))
.build();
.replaceAll("#FRAME#", frame.name));

frame.uid.ifPresent(builder::setUid);

return builder.build();
}


Expand Down
11 changes: 7 additions & 4 deletions cuebot/src/main/java/com/imageworks/spcue/service/JobSpec.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
Expand Down Expand Up @@ -63,7 +64,7 @@ public class JobSpec {

private String email;

private int uid;
private Optional<Integer> uid;

private int totalFrames = 0;

Expand Down Expand Up @@ -194,13 +195,14 @@ private void handleSpecTag() {
if (facility != null) {
facility = facility.toLowerCase();
}

show = rootElement.getChildTextTrim("show");
shot = rootElement.getChildTextTrim("shot");
user = rootElement.getChildTextTrim("user");
uid = Integer.parseInt(rootElement.getChildTextTrim("uid"));
uid = Optional.ofNullable(rootElement.getChildTextTrim("uid")).map(Integer::parseInt);
email = rootElement.getChildTextTrim("email");

if (user == "root" || uid == 0) {
if (user == "root" || uid.equals(Optional.of(0))) {
throw new SpecBuilderException("Cannot launch jobs as root.");
}
}
Expand All @@ -214,6 +216,7 @@ private void handleJobsTag() {
if (elements == null) {
return;
}

for (Object tmpElement : elements) {
Element jobElement = (Element) tmpElement;
jobs.add(handleJobTag(jobElement));
Expand Down Expand Up @@ -880,7 +883,7 @@ public String getShow() {
return show;
}

public int getUid() {
public Optional<Integer> getUid() {
return uid;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
-- Allow a NULL UID field, meaning 'RQD current user'.

ALTER TABLE "job" ALTER COLUMN "int_uid" DROP NOT NULL;
ALTER TABLE "job" ALTER COLUMN "int_uid" DROP DEFAULT;

92 changes: 92 additions & 0 deletions cuebot/src/main/resources/public/dtd/cjsl-1.9.dtd
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
<!-- ================================================================= -->
<!-- SpiCue Job Spec DTD ver 1.9 -->
<!-- [email protected] -->
<!-- ================================================================= -->

<!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?,maxretries?,autoeat?,localbook?,os?,env*,layers?)>
<!ATTLIST job
name NMTOKEN #REQUIRED
>
<!ELEMENT paused (#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?,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 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)*>
Loading

0 comments on commit 3877834

Please sign in to comment.