Skip to content

Commit ae191e3

Browse files
tifilipebrDiegoTavaresaoblet
authored
[cuebot/cuegui] Feature add layer dispatchorder control (#2354)
This PR just complement it: #222 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added "Reorder Dispatch..." option to the layer context menu to set dispatch priority for one or multiple layers. * Exposed a layer dispatch-order API so layers can be reordered programmatically. * Added a Python SDK Layer method to update dispatch order from scripts. * **Chores** * Version bumped to 1.26 <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Alexis Oblet <alexis@theyard-vfx.com> Signed-off-by: Alexis Oblet <aoblet@users.noreply.github.com> Signed-off-by: Filipe Lacerda <53842848+tifilipebr@users.noreply.github.com> Co-authored-by: Diego Tavares <dtavares@imageworks.com> Co-authored-by: Alexis Oblet <alexis@theyard-vfx.com> Co-authored-by: Alexis Oblet <aoblet@users.noreply.github.com>
1 parent 66acc9c commit ae191e3

10 files changed

Lines changed: 92 additions & 2 deletions

File tree

VERSION.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.25
1+
1.26

cuebot/src/main/java/com/imageworks/spcue/dao/LayerDao.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,15 @@ public interface LayerDao {
127127
*/
128128
void updateLayerMinCores(LayerInterface layer, int val);
129129

130+
131+
/**
132+
* update the dispatch order of the layer
133+
*
134+
* @param layer
135+
* @param val
136+
*/
137+
void updateLayerDispatchOrder(LayerInterface layer, int val);
138+
130139
/**
131140
* update the number of gpus the layer requires
132141
*

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,15 @@ public void increaseLayerMinGpuMemory(LayerInterface layer, long kb) {
401401
layer.getLayerId(), kb);
402402
}
403403

404+
@Override
405+
public void updateLayerDispatchOrder(LayerInterface layer, int val) {
406+
if (val <= 0) {
407+
throw new IllegalArgumentException("Layer dispatch order must be positive.");
408+
}
409+
getJdbcTemplate().update("UPDATE layer SET int_dispatch_order=? WHERE pk_layer=?", val,
410+
layer.getLayerId());
411+
}
412+
404413
@Override
405414
public void updateLayerMinCores(LayerInterface layer, int val) {
406415
if (val < Dispatcher.CORE_POINTS_RESERVED_MIN) {

cuebot/src/main/java/com/imageworks/spcue/servant/ManageLayer.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@
9090
import com.imageworks.spcue.grpc.job.LayerReorderFramesResponse;
9191
import com.imageworks.spcue.grpc.job.LayerRetryFramesRequest;
9292
import com.imageworks.spcue.grpc.job.LayerRetryFramesResponse;
93+
import com.imageworks.spcue.grpc.job.LayerSetDispatchOrderRequest;
94+
import com.imageworks.spcue.grpc.job.LayerSetDispatchOrderResponse;
9395
import com.imageworks.spcue.grpc.job.LayerSetMaxCoresRequest;
9496
import com.imageworks.spcue.grpc.job.LayerSetMaxCoresResponse;
9597
import com.imageworks.spcue.grpc.job.LayerSetMinCoresRequest;
@@ -235,6 +237,17 @@ public void setTags(LayerSetTagsRequest request,
235237
}
236238
}
237239

240+
@Override
241+
public void setDispatchOrder(LayerSetDispatchOrderRequest request,
242+
StreamObserver<LayerSetDispatchOrderResponse> responseObserver) {
243+
updateLayer(request.getLayer());
244+
if (attemptChange(env, property, jobManager, layer, responseObserver)) {
245+
jobManager.setLayerDispatchOrder(layer, request.getOrder());
246+
responseObserver.onNext(LayerSetDispatchOrderResponse.newBuilder().build());
247+
responseObserver.onCompleted();
248+
}
249+
}
250+
238251
@Override
239252
public void setMinCores(LayerSetMinCoresRequest request,
240253
StreamObserver<LayerSetMinCoresResponse> responseObserver) {

cuebot/src/main/java/com/imageworks/spcue/service/JobManager.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,14 @@ public interface JobManager {
423423
*/
424424
List<ThreadStats> getThreadStats(LayerInterface layer);
425425

426+
/**
427+
* Update the dispatch order for the given layer.
428+
*
429+
* @param layer
430+
* @param order
431+
*/
432+
void setLayerDispatchOrder(LayerInterface layer, int order);
433+
426434
/**
427435
* Update the max core value for the given layer.
428436
*

cuebot/src/main/java/com/imageworks/spcue/service/JobManagerService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,11 @@ public void setLayerTag(LayerInterface layer, String tag) {
441441
layerDao.updateLayerTags(layer, Sets.newHashSet(tag));
442442
}
443443

444+
@Override
445+
public void setLayerDispatchOrder(LayerInterface layer, int order) {
446+
layerDao.updateLayerDispatchOrder(layer, order);
447+
}
448+
444449
@Override
445450
public void setLayerMinCores(LayerInterface layer, int coreUnits) {
446451
layerDao.updateLayerMinCores(layer, coreUnits);

cuegui/cuegui/LayerMonitorTree.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,8 +315,8 @@ def contextMenuEvent(self, e):
315315
self.__menuActions.layers().addAction(depend_menu, "markdone")
316316
menu.addMenu(depend_menu)
317317

318+
menu.addSeparator()
318319
if len(__selectedObjects) == 1:
319-
menu.addSeparator()
320320
try:
321321
if int(self.app.settings.value("DisableDeeding", 0)) == 0:
322322
if len({layer.data.range for layer in __selectedObjects}) == 1:

cuegui/cuegui/MenuActions.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,6 +1077,31 @@ def dependWizard(self, rpcObjects=None):
10771077
if layers:
10781078
cuegui.DependWizard.DependWizard(self._caller, [self._getSource()], layers=layers)
10791079

1080+
1081+
reorder_dispatch_info = ["Reorder Dispatch...", None, "configure"]
1082+
1083+
def reorder_dispatch(self, rpcObjects=None):
1084+
layers = self._getOnlyLayerObjects(rpcObjects)
1085+
if not layers:
1086+
return
1087+
1088+
body = "Which dispatch order to set?"
1089+
if len(layers) > 1:
1090+
title = "Reorder layers"
1091+
for layer in layers:
1092+
body += '\n%s' % layer.data.name
1093+
else:
1094+
title = "Reorder layer %s" % layers[0].data.name
1095+
1096+
(order, choice) = QtWidgets.QInputDialog.getInt(self._caller, title, body, 1, 1, 100000, 1)
1097+
if not choice:
1098+
return
1099+
1100+
for layer in layers:
1101+
self.cuebotCall(layer.setDispatchOrder, "Reorder Dispatch Failed", order)
1102+
1103+
self._update()
1104+
10801105
reorder_info = ["Reorder Frames...", None, "configure"]
10811106

10821107
def reorder(self, rpcObjects=None):

proto/src/job.proto

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,9 @@ service LayerInterface {
358358
// Retry the Frames of this Layer
359359
rpc RetryFrames(LayerRetryFramesRequest) returns (LayerRetryFramesResponse);
360360

361+
// Set the Dispatch Order of this Layer
362+
rpc SetDispatchOrder(LayerSetDispatchOrderRequest) returns (LayerSetDispatchOrderResponse);
363+
361364
// The maximum number of cores to run on a given frame within this layer. Fractional core values are not allowed
362365
// with this setting.
363366
rpc SetMaxCores(LayerSetMaxCoresRequest) returns (LayerSetMaxCoresResponse);
@@ -1701,6 +1704,13 @@ message LayerRetryFramesRequest {
17011704

17021705
message LayerRetryFramesResponse {} // Empty
17031706

1707+
message LayerSetDispatchOrderRequest {
1708+
Layer layer = 1;
1709+
int32 order = 2;
1710+
}
1711+
1712+
message LayerSetDispatchOrderResponse {} // Empty
1713+
17041714
// RegisterOutputPath
17051715
message LayerRegisterOutputPathRequest {
17061716
Layer layer = 1;

pycue/opencue/wrappers/layer.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,17 @@ def setTags(self, tags):
128128
return self.stub.SetTags(job_pb2.LayerSetTagsRequest(layer=self.data, tags=tags),
129129
timeout=Cuebot.Timeout)
130130

131+
def setDispatchOrder(self, order):
132+
"""Sets the dispatch order for this layer.
133+
134+
:type order: int
135+
:param order: layer dipsatch order
136+
"""
137+
return self.stub.SetDispatchOrder(
138+
job_pb2.LayerSetDispatchOrderRequest(layer=self.data, order=order),
139+
timeout=Cuebot.Timeout)
140+
141+
131142
def setMaxCores(self, cores):
132143
"""Sets the maximum number of cores that this layer requires.
133144

0 commit comments

Comments
 (0)