Skip to content

Commit 6b7605a

Browse files
Merge branch 'master' into feature/render-monitoring-system
# Conflicts: # docs/_docs/concepts/spi-case-study.md # docs/_docs/developer-guide/contributing.md # docs/_docs/developer-guide/cuecmd-development.md # docs/_docs/developer-guide/cuecommander-technical-reference.md # docs/_docs/developer-guide/cuenimby-development.md # docs/_docs/developer-guide/cuetopia-technical-reference.md # docs/_docs/developer-guide/cueweb-development.md # docs/_docs/developer-guide/filter-development.md # docs/_docs/developer-guide/hybrid-rqd-setup.md # docs/_docs/developer-guide/index.md # docs/_docs/developer-guide/rest-gateway-development.md # docs/_docs/developer-guide/sandbox-testing.md # docs/_docs/getting-started/checking-out-the-source-code.md # docs/_docs/getting-started/deploying-cuebot.md # docs/_docs/getting-started/deploying-cueweb.md # docs/_docs/getting-started/deploying-rest-gateway.md # docs/_docs/getting-started/deploying-rqd.md # docs/_docs/getting-started/index.md # docs/_docs/getting-started/installing-cueadmin.md # docs/_docs/getting-started/installing-cuegui.md # docs/_docs/getting-started/installing-cuesubmit.md # docs/_docs/getting-started/installing-pycue-and-pyoutline.md # docs/_docs/getting-started/setting-up-the-database.md # docs/_docs/other-guides/applying-database-migrations.md # docs/_docs/other-guides/configuring-limits.md # docs/_docs/other-guides/configuring-opencue.md # docs/_docs/other-guides/containerized_frames.md # docs/_docs/other-guides/cueweb.md # docs/_docs/other-guides/customizing-rqd.md # docs/_docs/other-guides/deploying-rest-gateway.md # docs/_docs/other-guides/desktop-rendering-control.md # docs/_docs/other-guides/framelogging-with-loki.md # docs/_docs/other-guides/index.md # docs/_docs/other-guides/monitoring-with-prometheus-loki-and-grafana.md # docs/_docs/other-guides/troubleshooting-deployment.md # docs/_docs/other-guides/troubleshooting-rendering.md # docs/_docs/reference/CueGUI-app.md # docs/_docs/reference/commands/cueadmin.md # docs/_docs/reference/commands/pycuerun.md # docs/_docs/reference/cuecommander-technical-reference.md # docs/_docs/reference/filter-actions-reference.md # docs/_docs/reference/index.md # docs/_docs/reference/rest-api-reference.md # docs/_docs/reference/rust-rqd.md # docs/_docs/reference/tools/cueadmin.md # docs/_docs/reference/tools/cuecmd.md # docs/_docs/reference/tools/cueman.md # docs/_docs/reference/tools/cuenimby.md # docs/_docs/reference/tools/index.md # docs/_docs/tutorials/cueadmin-tutorial.md # docs/_docs/tutorials/cuecmd-tutorial.md # docs/_docs/tutorials/cueman-tutorial.md # docs/_docs/tutorials/cuenimby-tutorial.md # docs/_docs/tutorials/cueweb-tutorial.md # docs/_docs/tutorials/dcc-integration.md # docs/_docs/tutorials/filter-tutorial.md # docs/_docs/tutorials/getting-started-tutorial.md # docs/_docs/tutorials/index.md # docs/_docs/tutorials/managing-jobs-frames.md # docs/_docs/tutorials/multi-layer-jobs.md # docs/_docs/tutorials/rest-api-tutorial.md # docs/_docs/tutorials/submitting-first-job.md # docs/_docs/tutorials/using-cuegui.md # docs/_docs/user-guides/adding-removing-limits.md # docs/_docs/user-guides/cuecommander-administration-guide.md # docs/_docs/user-guides/cuenimby-user-guide.md # docs/_docs/user-guides/cuetopia-monitoring-guide.md # docs/_docs/user-guides/cueweb-user-guide.md # docs/_docs/user-guides/index.md # docs/_docs/user-guides/monitoring-jobs.md # docs/_docs/user-guides/submitting-jobs.md # docs/_docs/user-guides/using-cuecmd.md # docs/_docs/user-guides/using-filters.md # docs/_docs/user-guides/using-rest-api.md # docs/nav_order_index.txt # sandbox/README.md
2 parents 111efac + e143627 commit 6b7605a

File tree

116 files changed

+3712
-698
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

116 files changed

+3712
-698
lines changed

.github/workflows/packaging-pipeline.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ jobs:
5656
- target: x86_64-unknown-linux-musl
5757
os: ubuntu-22.04
5858
- target: x86_64-apple-darwin
59-
os: macos-13
59+
os: macos-14
6060
- target: aarch64-apple-darwin
61-
os: macos-13
61+
os: macos-14
6262
runs-on: ${{ matrix.os }}
6363
outputs:
6464
rust_binaries_artifact: rust-binaries-${{ github.sha }}
@@ -86,7 +86,7 @@ jobs:
8686
fi
8787
8888
- name: Install dependencies (macOS)
89-
if: matrix.os == 'macos-13'
89+
if: matrix.os == 'macos-14'
9090
run: |
9191
brew install protobuf
9292
@@ -108,7 +108,7 @@ jobs:
108108
cp rust/target/${{ matrix.target }}/release/openrqd release/openrqd-${{ env.BUILD_ID }}-${{ matrix.target }}
109109
110110
- name: Copy binaries (macOS)
111-
if: matrix.os == 'macos-13'
111+
if: matrix.os == 'macos-14'
112112
run: |
113113
cp rust/target/${{ matrix.target }}/release/openrqd release/openrqd-${{ env.BUILD_ID }}-${{ matrix.target }}
114114

.github/workflows/release-pipeline.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,9 @@ jobs:
8181
- target: x86_64-unknown-linux-musl
8282
os: ubuntu-22.04
8383
- target: x86_64-apple-darwin
84-
os: macos-13
84+
os: macos-14
8585
- target: aarch64-apple-darwin
86-
os: macos-13
86+
os: macos-14
8787
runs-on: ${{ matrix.os }}
8888
steps:
8989
- uses: actions/checkout@v4
@@ -121,7 +121,7 @@ jobs:
121121
fi
122122
123123
- name: Install dependencies (macOS)
124-
if: matrix.os == 'macos-13'
124+
if: matrix.os == 'macos-14'
125125
run: |
126126
brew install protobuf
127127
@@ -143,7 +143,7 @@ jobs:
143143
cp rust/target/${{ matrix.target }}/release/openrqd release/openrqd-${{ env.BUILD_ID }}-${{ matrix.target }}
144144
145145
- name: Copy binaries (macOS)
146-
if: matrix.os == 'macos-13'
146+
if: matrix.os == 'macos-14'
147147
run: |
148148
cp rust/target/${{ matrix.target }}/release/openrqd release/openrqd-${{ env.BUILD_ID }}-${{ matrix.target }}
149149

.github/workflows/testing-pipeline.yml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,3 +391,46 @@ jobs:
391391
with:
392392
name: rest-gateway-coverage
393393
path: rest_gateway/opencue_gateway/coverage.out
394+
395+
build_cueweb:
396+
name: Build CueWeb Docker Image
397+
runs-on: ubuntu-22.04
398+
steps:
399+
- name: Checkout
400+
uses: actions/checkout@v4
401+
with:
402+
fetch-depth: 0
403+
fetch-tags: true
404+
405+
- name: Mark repository as safe
406+
run: git config --global --add safe.directory $GITHUB_WORKSPACE
407+
408+
- name: Set up Docker Buildx
409+
uses: docker/setup-buildx-action@v3
410+
411+
- name: Build CueWeb Docker image
412+
working-directory: cueweb
413+
run: |
414+
docker buildx build . -f Dockerfile -t opencue/cueweb:test --load
415+
echo "CueWeb Docker image built successfully"
416+
417+
build_rest_gateway:
418+
name: Build REST Gateway Docker Image
419+
runs-on: ubuntu-22.04
420+
steps:
421+
- name: Checkout
422+
uses: actions/checkout@v4
423+
with:
424+
fetch-depth: 0
425+
fetch-tags: true
426+
427+
- name: Mark repository as safe
428+
run: git config --global --add safe.directory $GITHUB_WORKSPACE
429+
430+
- name: Set up Docker Buildx
431+
uses: docker/setup-buildx-action@v3
432+
433+
- name: Build REST Gateway Docker image
434+
run: |
435+
docker buildx build . -f rest_gateway/Dockerfile -t opencue/rest-gateway:test --load
436+
echo "REST Gateway Docker image built successfully"

cuebot/src/main/java/com/imageworks/spcue/DispatchFrame.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,13 @@ public class DispatchFrame extends FrameEntity implements FrameInterface {
5050
// The Operational System this frame is expected to run in
5151
public String os;
5252

53-
// Memory requirement for this frame in bytes
53+
// Memory requirement for this frame in Kb
5454
private long minMemory;
5555

56-
// Soft limit to be enforced for this frame in bytes
56+
// Soft limit to be enforced for this frame in Kb
5757
public long softMemoryLimit;
5858

59-
// Hard limit to be enforced for this frame in bytes
59+
// Hard limit to be enforced for this frame in Kb
6060
public long hardMemoryLimit;
6161

6262
public void setMinMemory(long minMemory) {

cuebot/src/main/java/com/imageworks/spcue/DispatchHost.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public class DispatchHost extends Entity
3030

3131
public String facilityId;
3232
public String allocationId;
33+
public String allocationName;
3334
public LockState lockState;
3435
public HardwareState hardwareState;
3536

cuebot/src/main/java/com/imageworks/spcue/SortableShow.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,25 @@ public class SortableShow implements Comparable<SortableShow> {
2727

2828
private static final Logger logger = LogManager.getLogger(SortableShow.class);
2929

30-
private String show;
30+
private String show_id;
31+
private String show_name;
3132
private float tier;
3233

3334
private Map<String, long[]> failed = new ConcurrentHashMap<String, long[]>();
3435
private Set<AllocationInterface> failedAllocs = new HashSet<AllocationInterface>();
3536

36-
public SortableShow(String show, float value) {
37-
this.show = show;
37+
public SortableShow(String show_id, String show_name, float value) {
38+
this.show_id = show_id;
39+
this.show_name = show_name;
3840
this.tier = value;
3941
}
4042

43+
public String getShowName() {
44+
return show_name;
45+
}
46+
4147
public String getShowId() {
42-
return show;
48+
return show_id;
4349
}
4450

4551
public float getValue() {
@@ -96,7 +102,7 @@ public int compareTo(SortableShow o) {
96102

97103
@Override
98104
public int hashCode() {
99-
return show.hashCode();
105+
return show_id.hashCode();
100106
};
101107

102108
@Override

cuebot/src/main/java/com/imageworks/spcue/dao/postgres/DispatchQuery.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1244,12 +1244,16 @@ private static final String replaceQueryForFifo(String query) {
12441244
"SELECT " +
12451245
"vs_waiting.pk_show, " +
12461246
"s.float_tier, " +
1247-
"s.int_burst " +
1247+
"s.int_burst, " +
1248+
"show.str_name as str_show_name " +
12481249
"FROM " +
12491250
"subscription s, " +
1250-
"vs_waiting " +
1251+
"vs_waiting, " +
1252+
"show " +
12511253
"WHERE " +
12521254
"vs_waiting.pk_show = s.pk_show " +
1255+
"AND " +
1256+
"s.pk_show = show.pk_show " +
12531257
"AND " +
12541258
"s.pk_alloc = ? " +
12551259
"AND " +

cuebot/src/main/java/com/imageworks/spcue/dao/postgres/DispatcherDaoJdbc.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ public String mapRow(ResultSet rs, int rowNum) throws SQLException {
7272

7373
private static final RowMapper<SortableShow> SHOW_MAPPER = new RowMapper<SortableShow>() {
7474
public SortableShow mapRow(ResultSet rs, int rowNum) throws SQLException {
75-
return new SortableShow(rs.getString("pk_show"), rs.getFloat("float_tier"));
75+
return new SortableShow(rs.getString("pk_show"), rs.getString("str_show_name"),
76+
rs.getFloat("float_tier"));
7677
}
7778
};
7879

@@ -120,11 +121,25 @@ public List<SortableShow> getShows() {
120121
* Choose between different scheduling strategies
121122
*/
122123
private SchedulingMode schedulingMode;
124+
private Set<String> exclusionList;
123125

124126
@Autowired
125127
public DispatcherDaoJdbc(Environment env) {
126128
this.schedulingMode = SchedulingMode.valueOf(
127129
env.getProperty("dispatcher.scheduling_mode", String.class, "PRIORITY_ONLY"));
130+
131+
// Parse the exclusion list from environment variable
132+
// Expected format: "show1:allocation1,show2:allocation2"
133+
String exclusionListStr = env.getProperty("dispatcher.exclusion_list", String.class, "");
134+
this.exclusionList = new LinkedHashSet<String>();
135+
if (!exclusionListStr.isEmpty()) {
136+
for (String item : exclusionListStr.split(",")) {
137+
String trimmedItem = item.trim();
138+
if (!trimmedItem.isEmpty()) {
139+
this.exclusionList.add(trimmedItem);
140+
}
141+
}
142+
}
128143
}
129144

130145
@Override
@@ -178,8 +193,23 @@ private Set<String> findDispatchJobs(DispatchHost host, int numJobs, boolean shu
178193
}
179194

180195
long loopTime = System.currentTimeMillis();
196+
// Filter out shows/allocs that are being dispatched by the new scheduler
197+
// A list of show_name:alloc_name is read from the env to define which jobs
198+
// should not be dispatched by Cuebot's dispatcher
181199
for (SortableShow s : shows) {
182200
long lastTime = System.currentTimeMillis();
201+
202+
// Check if this show:allocation combination is in the exclusion list
203+
if (!exclusionList.isEmpty()) {
204+
String showName = s.getShowName();
205+
String exclusionKey = showName + ":" + host.allocationName;
206+
if (exclusionList.contains(exclusionKey)) {
207+
logger.info("skipping show " + showName + " on allocation "
208+
+ host.allocationName + " due to exclusion list");
209+
continue;
210+
}
211+
}
212+
183213
if (s.isSkipped(host.tags, (long) host.cores, host.memory)) {
184214
logger.info("skipping show " + s.getShowId());
185215
continue;

0 commit comments

Comments
 (0)