What's new PDG/TOPs in Production Build 18.0.391

   5874   22   4
User Avatar
Member
603 posts
Joined: Sept. 2016
Offline
Here's a list of some of the more significant changes we've made since the last production build.

New Nodes

Overhauled Nodes

Python-based PDG Nodes dynamic reloading
Added support for reloading PDG node and scheduler Python definitions in a live Houdini session.
Currently this can only be done using the PDG Python API by looking up the type object from a node or scheduler instance, and then calling reloading on it. For example:
import pdg
types = pdg.TypeRegistry.types()
rt = types.registeredType(pdg.registeredType.Scheduler, "localscheduler")
rt.reload()
# Or
hou.node('/tasks/topnet1/localscheduler').getPDGNode().type.reload()

When a Python definition is reloaded, all existing instance of the node are dirtied and their underlying PDG node object is reset to use the new class definition created by reloading the Python module.

USD Import TOP [www.sidefx.com] can point at a LOP node and copy USD attributes on to work items.

Send Email [www.sidefx.com] TOP now supports TLS and Authentication.

ROP Fetch can now report result files from ROPs which support a convention using the pdg_logoutput [www.sidefx.com] attribute

HQueue Scheduler [www.sidefx.com]
  • MQ Job can be optionally disabled
  • Customize which Python executable is used
  • Option for jobs to inherit the local environment

Performance Improvement with Services [www.sidefx.com] for HDA Processor

Licence for all PDG python scripts changed from Proprietary to MIT.
Edited by chrism - March 20, 2020 13:45:05
User Avatar
Member
209 posts
Joined: Nov. 2010
Offline
Hi,

Can you please provide an example of how to get scheduler instance (to properly type reload)?
Because probably pdg.types.schedulers.local is not what do you mean.

Thanks
Ostap
User Avatar
Member
603 posts
Joined: Sept. 2016
Offline
You can also reload a scheduler type like this:

import pdg
types = pdg.TypeRegistry.types()
rt = types.registeredType(pdg.registeredType.Scheduler, "localscheduler")
rt.reload()
User Avatar
Member
159 posts
Joined: Feb. 2018
Offline
In-Process Scheduler
Finally, great updates make it more robust for PDG.
Thank you, can't wait to update.
User Avatar
Member
7024 posts
Joined: July 2005
Offline
Thanks for this Chris, please continue these “what's new” summaries, there is so much going on in HOudini these are super helpful!

Cheers,
Peter B
User Avatar
Member
209 posts
Joined: Nov. 2010
Offline
Thank you Chris for an example! But why it doesn't work for custom schedulers? For example (returns None, build 18.0.391):
types.registeredType(pdg.registeredType.Scheduler, "deadlinescheduler")

Should scheduler be in the ‘schedulers’ subdirectory to register properly? Or “$HH/pdg/types” is enough?
User Avatar
Member
603 posts
Joined: Sept. 2016
Offline
You should put your custom scheduler python file into for example: $HOUDINI_PATH/pdg/types/myscheduler.py (no subdirectory). And that file should have the registerTypes function in it:

def registerTypes(type_registry):
    type_registry.registerScheduler(MyScheduler)
User Avatar
Member
209 posts
Joined: Nov. 2010
Offline
Ok, clear! That what I did

When I'm trying to reload myscheduler it says:
RuntimeError: Unable to reload module 'pdg.types.myscheduler'

How about "deadlinescheduler'? Does it work for you Chris?
types.registeredType(pdg.registeredType.Scheduler, "deadlinescheduler")
User Avatar
Staff
585 posts
Joined: May 2014
Offline
If you don't have the Deadline API installed on your machine's Python Path, there won't be a type definition for it. You can see the list of available scheduler definitions using:

import pdg
types = pdg.TypeRegistry.types()
types.typeNames(pdg.registeredType.Scheduler)

I have Tractor installed but not Deadline, so for me the output is:

[u'inprocessscheduler', u'tractorscheduler', u'localscheduler', u'hqueuescheduler', u'pythonscheduler']
User Avatar
Staff
585 posts
Joined: May 2014
Offline
With regard to your issue with reloading your custom MyScheduler type, it looks like there's a bug in the reload functionality when the type is defined in a top-level Python file. $HOUDINI_PATH/pdg/types/myscheduler.py won't work, but if you put your custom types into a directory it'll work as expected, for example $HOUDINI_PATH/pdg/types/custom/myscheduler.py, with a $HOUDINI_PATH/pdg/types/custom/__init__.py. You can see an example of how we use that internally by looking at $HH/pdg/types/schedulers. We're investigating the cause of the issue and will have it fixed in a daily build this week.
Edited by tpetrick - March 2, 2020 16:49:09
User Avatar
Member
209 posts
Joined: Nov. 2010
Offline
Thanks for “deadlinescheduler” explanation but in case of MyScheduler type is still erroring and you did a custom dir for MyScheduler but its interference with the previous message from Chris:
You should put your custom scheduler python file into for example: $HOUDINI_PATH/pdg/types/myscheduler.py (no subdirectory).
User Avatar
Staff
585 posts
Joined: May 2014
Offline
Chris and I just discovered the problem I mentioned moments before I posted my comment, while trying to reproduce the issue you reported. The subdirectory should not be necessary, but it currently is because of an issue with the way Python's module reloading works. We'll have the underlying issue fixed shortly (most likely Wednesday's daily build of 18.0).


What does work from our testing is the following:

$HOUDINI_PATH/pdg/types/custom/myscheduler.py contains your custom scheduler defintion.
$HOUDINI_PATH/pdg/types/custom/__init__.py contains something like the following:

from . import myscheduler

def registerTypes(type_registry):
    type_registry.registerScheduler(myscheduler.MyScheduler)

Then, to reload:

>>> import pdg
>>> types = pdg.TypeRegistry.types()
>>> t = types.registeredType(pdg.registeredType.Scheduler, "myscheduler")
>>> t.reload()

If you're still experience errors can you attach your files? Either here or as an issue with support?
Edited by tpetrick - March 2, 2020 18:40:10
User Avatar
Staff
585 posts
Joined: May 2014
Offline
The type reloading issue with for Python files placed directly in the ${HOUDINI_PATH}/pdg/types folder is fixed in tomorrow's 18.0 daily build (18.0.399).
Edited by tpetrick - March 3, 2020 14:36:31
User Avatar
Member
209 posts
Joined: Nov. 2010
Offline
Thank you!
User Avatar
Member
57 posts
Joined: April 2018
Offline
Hi!

I don't know if this is related to same but since 398 (also in 399) every time when I start Houdini (Indie) I get these errors in console:
PDG Type Registry: Failed to import duplicate module ‘houdini’ which was previously imported from ‘C:/PROGRA~1/SIDEEF~1/HOUDIN~1.399/houdini/pdg/types\houdini’
PDG Type Registry: Failed to import duplicate module ‘partitioners’ which was previously imported from ‘C:/PROGRA~1/SIDEEF~1/HOUDIN~1.399/houdini/pdg/types\partitioners’
PDG Type Registry: Failed to import duplicate module ‘schedulers’ which was previously imported from ‘C:/PROGRA~1/SIDEEF~1/HOUDIN~1.399/houdini/pdg/types\schedulers’
PDG Type Registry: Failed to import duplicate module ‘utils’ which was previously imported from ‘C:/PROGRA~1/SIDEEF~1/HOUDIN~1.399/houdini/pdg/types\utils’

Everything still works but that shows there is something wrong, how to fix it?

Thanks

Antti
Edited by atnreg - March 5, 2020 05:02:04
My system:
AMD Ryzen Threadripper 2990 (32-core),64GB RAM,NVIDIA RTX 3090,Win10
UE5.1,Houdini 19.5 Indie(always latest daily),Blender,Clarisse,Onyx,ZBrush...
Clarisse 2016-09, Houdini 2018-05 (seriously 2019-10)
I do all 3D for fun, no business
User Avatar
Member
603 posts
Joined: Sept. 2016
Offline
This error is likely due to having duplicate Houdini paths. Please check your houdini.env file to see if you have any path entries ending with &. If so, comment them out or remove them and try it. This could be caused by having the Labs Toolset path entry in this file.
User Avatar
Member
57 posts
Joined: April 2018
Offline
chrisgreb
This error is likely due to having duplicate Houdini paths. Please check your houdini.env file to see if you have any path entries ending with &. If so, comment them out or remove them and try it. This could be caused by having the Labs Toolset path entry in this file.

I have this in my houdini.env:
—–
HOUDINI_NVIDIA_OPTIX_DSO_PATH = C:/Users/anuoreva/Documents/houdini18.0\optix

PATH = E:/_LIB/HOUDINI/octaneplugin/bin;$PATH
HOUDINI_PATH = $HOUDINI_PATH;E:/_LIB/HOUDINI/octaneplugin;&
—–

The only part that has & is the latter path to octaneplugin path and if I comment it out, the error goes away.

I have not used Octane for a while (since beginning of Jan) but before 398 I got no errors. So how the Octane path should be changed so that it works with 398+?

Thanks

Antti
My system:
AMD Ryzen Threadripper 2990 (32-core),64GB RAM,NVIDIA RTX 3090,Win10
UE5.1,Houdini 19.5 Indie(always latest daily),Blender,Clarisse,Onyx,ZBrush...
Clarisse 2016-09, Houdini 2018-05 (seriously 2019-10)
I do all 3D for fun, no business
User Avatar
Staff
585 posts
Joined: May 2014
Offline
The & token means to append the regular Houdini path onto the end. So you're effectively doing that twice when you have HOUDINI_PATH = $HOUDINI_PATH;E:/_LIB/HOUDINI/octaneplugin;& That's like setting the variable to HOUDINI_PATH = $HOUDINI_PATH;E:/_LIB/HOUDINI/octaneplugin;$HOUDINI_PATH. You probably want to remove the leading $HOUDINI_PATH, something like HOUDINI_PATH = E:/_LIB/HOUDINI/octaneplugin;&.
Edited by tpetrick - March 5, 2020 12:31:44
User Avatar
Member
57 posts
Joined: April 2018
Offline
Oh, great! Yes now it works without errors
Then I actually wonder, why it did work before 398 at all

Anyway, now it's fine, thank you very much!

Antti
My system:
AMD Ryzen Threadripper 2990 (32-core),64GB RAM,NVIDIA RTX 3090,Win10
UE5.1,Houdini 19.5 Indie(always latest daily),Blender,Clarisse,Onyx,ZBrush...
Clarisse 2016-09, Houdini 2018-05 (seriously 2019-10)
I do all 3D for fun, no business
User Avatar
Staff
585 posts
Joined: May 2014
Offline
Those warning messages themselves are new, to help debug problems with adding custom PDG node types onto your path that conflict with our built-in ones. They don't change any functionality though - they're just reporting information that wasn't reported before.

We can add a note to that message that suggests checking the $HOUDINI_PATH variable.
  • Quick Links