-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support LimitGroups
and MachineLimit
Houdini Deadline
#38
Support LimitGroups
and MachineLimit
Houdini Deadline
#38
Conversation
one question:
|
We should really make these |
Also, we should really not be doing this PER submitter plug-in because it'll just be maintenance hell across all plug-ins because we'll need to duplicate all of this across all plug-ins. |
How do you imagine it? |
Yes - we should bring it down to the basics preferably where it all shares code. So either we do something so this is just part of a parent plug-in being inherited from, and hence they share the logic regardless. Or we need to do some other type of filtering to define what is the default value and what is the settings, etc. which may require e.g. profiles filtering. But we could also just have the "base" implementation for render jobs - and another separate of export jobs. But those then still share across ALL hosts, instead of making this feature Houdini-only currently. |
I'll try again and report back. |
Ignore enumsAlso, ignore my Enum statement - I mean, it'd be nice for the "Limit Groups" but not crucial I think. I thought the "machine limit" originally was the "Allow/Deny list" of machines instead max. machines allowed to render the job simultaneously. For context, I've explained more on how we've exposed that here: https://community.ynput.io/t/deadline-pools-and-groups-dropdown-menu/1770/2?u=bigroy It also has a link to a code comparison which may help to just 'copy' some of that logic if needed. Change wording on "Machine Limit" (because this is not it)I'd change the wording on that because Machine Limit inside deadline is much more than that - it is also the allow/deny list of workers (which is what we use a lot, but I've never ever used the limit you're setting here). For context this seems to be the setting you're setting: But it's part of a machine limit tab that offers much more: Hence I'd try and stay closer to the Deadline wording that the setting you've exposed now is the amount of workers that can this job simultaneously - and not necessarily "machine limits" overall. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've also discovered that the AYON publish job doesn't get the Currently, I'm discussing with @BigRoy different approaches. |
Just copy-pasting some of the stuff that came up in the discussion as potential approaches: Mustafa: Global Collect Plugin
Hmm yes - I've thought about that too. Roy: Inheritable base class
Roy: Attributes per instance (new functionality)
Anyway, the best thing we can find is where we can find ONE way where we just define the logic once - and distribute it to the different plug-ins/instances/integrations. So preferably we have something separate: class ConfigurableDeadlineOptions:
"""Inherit pyblish plug-in from this to support customizable Deadline Job Options
Attribute definitions will be created for each job label in the `jobs` class
attribute so that one plug-in could for example support multiple job configurations.
Then, for the plug-in also expose settings on the server using the
`ConfigurableDeadlineOptionsModel`. That will allow a studio admin to completely
configure all the default values and also which attributes are 'user-editable'
as publisher attributes.
"""
jobs: List[str] = ["render"]
settings: Dict[str, Any] = {}
def get_configured_job_info_attrs(self, data: Dict[str, Any], job: str) -> Dict[str, Any]:
"""Return the Job Info configuration for the named job."""
attr_values = self.get_attr_values(data)
# pseudcode: poor man's filtering for attribute def values for the job
# this should also end up using the 'defaults' from `settings` that were
# set to be non-user overridable (and hence may have no attribute defs?)
return {key: value for key, value in attr_values.items() if key.startswith(job)}
def get_instance_attr_defs(self):
attr_defs = []
for job in self.jobs:
attr_defs.extend(self._get_attr_defs_for_job(job))
return attr_defs Here's e.g. a quick pseudocode thing we could inherit from. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Merging this PR and I'll be creating an issue to track BigRoy's suggestions. |
Changelog Description
Support
LimitGroups
andMachineLimit
Houdini DeadlineSnippets
Submitted Job info
MachineLimit
LimitGroups
Testing notes: