AWS Thinkbox Discussion Forums

Two Questions: "Empty path name is not legal" and Force Slave Plugin Update

We’re toying with the idea of jumping ship from Pixar’s Tractor to Deadline based on its ability to burst to the cloud out of the box. However, I’m running into a few issues getting it to work with our pipeline.

First question:
I took the default Deadline Nuke plugin and created a copy, modified the .param file to fit the Nuke executable version we had installed (10.5v4 instead of v1) and told it to grab the arguments we send rather than having it build for us. However, I get the following error in Deadline Monitor (submitted through python API) (note: asterisked out certain information; the rest of the output is copy-paste):

[code]=======================================================
Error

Error: Error: Empty path name is not legal. (System.ArgumentException)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream…ctor(String path, FileMode mode, FileAccess access, FileShare share)
at Deadline.IO.PathMappingUtils.b(String A_0, String A_1, String A_2, String[] A_3, String[] A_4, MappedOSPath[] A_5, Boolean A_6, DataController A_7, GenericDelegate11 A_8, String A_9) at Deadline.IO.PathMappingUtils.CheckPathMappingInFileAndReplace(String inFileName, String outFileName, String forceSeperator, String[] stringsToReplace, String[] newStrings, DataController dataController, GenericDelegate11 logFunction, String regionID, Boolean readFileAsBytes)
at Deadline.IO.PathMappingUtils.CheckPathMappingInFileAndReplace(String inFileName, String outFileName, String forceSeperator, String[] stringsToReplace, String[] newStrings, DataController dataController, GenericDelegate11 logFunction, String regionID) at Deadline.IO.PathMappingUtils.CheckPathMappingInFileAndReplace(String inFileName, String outFileName, String[] stringsToReplace, String[] newStrings, DataController dataController, GenericDelegate11 logFunction, String regionID)
at Deadline.Scripting.RepositoryUtils.CheckPathMappingInFileAndReplace(String inFileName, String outFileName, String[] stringsToReplace, String[] newStrings)
at Python.Runtime.Dispatcher.TrueDispatch(ArrayList args)
at Python.Runtime.Dispatcher.Dispatch(ArrayList args)
at FranticX.Processes.ManagedProcess.PreRenderTasks()
at FranticX.Processes.ManagedProcess.Execute(Boolean waitForExit)
at Deadline.Plugins.PluginWrapper.StartJob(String& outMessage, AbortLevel& abortLevel)

=======================================================
Type

RenderPluginException

=======================================================
Stack Trace

at Deadline.Plugins.SandboxedPlugin.a(DeadlineMessage A_0)
at Deadline.Plugins.SandboxedPlugin.StartJob(Job job)
at Deadline.Slaves.SlaveRenderThread.a(TaskLogWriter A_0)

=======================================================
Log

2017-07-07 16:00:54: 0: Loading Job’s Plugin timeout is Disabled
2017-07-07 16:00:56: 0: Executing plugin command of type ‘Sync Files for Job’
2017-07-07 16:00:56: 0: All job files are already synchronized
2017-07-07 16:00:56: 0: Synchronizing Plugin mpsNuke from \deadline.ldschurch.org\opt\Thinkbox\DeadlineRepository9\plugins\mpsNuke took: 0 seconds
2017-07-07 16:00:56: 0: Done executing plugin command of type ‘Sync Files for Job’
2017-07-07 16:00:56: 0: Executing plugin command of type ‘Initialize Plugin’
2017-07-07 16:00:56: 0: INFO: Executing plugin script ‘C:\Users*\AppData\Local\Thinkbox\Deadline9\slave*\plugins\59600490c0854163063b9e58\mpsNuke.py’
2017-07-07 16:00:57: 0: INFO: About: Nuke Plugin for Deadline
2017-07-07 16:00:57: 0: INFO: Render Job As User disabled, running as current user '
********’
2017-07-07 16:00:57: 0: INFO: The job’s environment will be merged with the current environment before rendering
2017-07-07 16:00:57: 0: Done executing plugin command of type ‘Initialize Plugin’
2017-07-07 16:00:57: 0: Start Job timeout is disabled.
2017-07-07 16:00:57: 0: Task timeout is disabled.
2017-07-07 16:00:57: 0: Loaded job: *************** (59600490c0854163063b9e58)
2017-07-07 16:00:57: 0: Executing plugin command of type ‘Start Job’
2017-07-07 16:00:57: 0: INFO: Prepping OFX cache
2017-07-07 16:00:57: 0: INFO: Checking Nuke temp path: C:\Users************\AppData\Local\Temp\nuke
2017-07-07 16:00:57: 0: INFO: Path already exists
2017-07-07 16:00:57: 0: INFO: OFX cache prepped
2017-07-07 16:00:57: 0: INFO: Starting monitored managed process Nuke
2017-07-07 16:00:57: 0: INFO: Enable Path Mapping: True
2017-07-07 16:00:57: 0: Done executing plugin command of type ‘Start Job’

=======================================================
Details

Date: 07/07/2017 16:00:59
Frames: 1
Elapsed Time: 00:00:00:05
Job Submit Date: 07/07/2017 16:00:48
Job User: ***********
Average RAM Usage: 5248786432 (25%)
Peak RAM Usage: 5248786432 (25%)
Average CPU Usage: 3%
Peak CPU Usage: 5%
Used CPU Clocks (x10^6 cycles): 694
Total CPU Clocks (x10^6 cycles): 23115

=======================================================
Slave Information

Slave Name: **************
Version: v9.0.4.0 Release (1d07aab9e)
Operating System: Windows 10 Enterprise
Running As Service: No
Machine User: ************
IP Address: 10.88.104.241
MAC Address: 2C:44:FD:1C:78:3D
CPU Architecture: x64
CPUs: 12
CPU Usage: 13%
Memory Usage: 4.9 GB / 19.9 GB (24%)
Free Disk Space: 304.311 GB
Video Card: NVIDIA Quadro K4000
[/code]

Not sure what’s going on. The stack trace is only so helpful, as I can’t dig into Deadline’s actual code to figure out where the error actually is.

So I updated the default Nuke.param to the same Nuke 10.5v4 paths and tried to submit using the built-in Nuke submission script. The error is now that Deadline can’t find the executable, but still in the 10.5v1 path. How can I force the update to happen on the slave to make sure I can troubleshoot?

Thanks for any help!

Hi,

So, there’s a few things here you should know, which I hope will help identify and resolve this issue.

  1. To reverse-engineer any of our app plugins such as…Nuke, the easiest thing to do initially, is to submit manually using either our in-app (in-application submitter in Nuke) or via Deadline Monitor’s “Submit” -> 2D -> Nuke. The subsequent submitted Nuke job can then be right-clicked -> Modify Job Props -> “Submission Params” can then be reviewed for the KVPs (Key=Value Pairs, as we call it). These KVPs are what you will need to make sure you submit with in any custom submission to ensure a job runs correctly in the chosen plugin, such as Nuke.

  2. Many of our app plugins have global or “plugin level” configuration settings, so its always worth bearing those in mind and how they might effect things. In the case of Nuke, that would be these settings here:
    docs.thinkboxsoftware.com/produ … figuration
    So, one specific thing in this Nuke plugin is this setting in the above config: Enable Path Mapping. So, looking at your stack-trace, I would try disabling that setting, assuming you are never going to cross-platform render here? If you do need this setting, then we can continue that conversation some more later.

  3. Something you need to understand with the *.param file. The default exe path values are exactly that. Default values for the very first time, the plugin is displayed/copied into your repo, whether it be our shipping version or when you custom/fork it. So, to actually update an exe path for a particular version of Nuke, you need to go to Monitor -> Configure Plugins… -> Nuke -> update the applicable exe paths, click OK, to commit the changes back to the MongoDB where it is stored. In Nuke, we support the MAJOR and MINOR versions of Nuke in our submitters, but we don’t bother with the SUB-MINOR versions, ie: X.xv1, X.xv2, etc. We leave studios to customise/update as they wish here or even extend our Python plugin as they so wish, as the code is all wide open for extension here.

  4. Finally, something I see quite a bit in big studio pipelines using Deadline, is they actually in some cases, like to skip using our built-in/shipping plugins such as Nuke and instead just use our “CommandLine” or “CommandScript” plugins, where their pipeline/context manager has all the information, including a complete “exe + args” string for say executing Nuke with the precise arguments just the way they like it and they simply use the dispatcher (Deadline in this case) to execute whatever it is told to execute. This allows for a nice “layer of abstraction” between your pipeline code and the dispatcher. However, it could come at the cost of you not taking advantage of a new feature just added to the next version of Deadline or other such features only available in our advanced plugins such as opening a Python socket to keep a specific application open in memory, before we pass it the next task chunk of frames to render (keeping an application open between frames is super render efficient, if you weren’t aware). :slight_smile:

Sorry, if I’ve been overly verbose here or it sounds like I’m explaining how to tie your shoelaces! HTH.

Regards,
Mike

Hey, thanks for jumping in, Mike!

Addressing your points in order:

  1. I will dig into this a little more, thanks!

  2. We’re making the move from an OSX/Unix-based setup to a mostly Windows for users, mixed Windows/OSX/Unix farm setup. It’s definitely provided its own unique challenges getting our pipeline to be cross-platform happy, but we’re 90% of the way there. :slight_smile: This does, unfortunately mean that we will need to run cross-platformedly on our renders.

  3. Awesome, great to know. Made that change and now the default plugin does submit and work, so that will help with point number 1.

  4. We’re actually quite interested in trying to get the python API working as it fits our old paradigm for how our pipeline conversed with Tractor, and would require very little code overhaul to get working. Rather than creating temporary files that we then submit using the command line, we’re used to essentially creating a dictionary of KVP and submitting that to the farm to interpret with Tractor. With After Effects we’ve already got that model working, so figuring out how to keep that paradigm would be awesome. I’ll look into those plugins to see what we can get working that way, and hopefully that will get us figured out. And post back here, of course, to report.

Thanks for your help so far!

I misunderstood your fourth point about the CommandLine/CommandScript plugin, and can see both pros and cons to doing it that way now that I’m more clear on it. I think our preferred would still be to use the plugins available that Thinkbox has already done the hard work on. Reusing executable instances, for example (liked that very much with Tractor).

I think I’m clearer on what needs to be done, so I’ll get to work on tweaking my approach and we’ll see what I come up with.

Thanks!

Just got Nuke rendering through Deadline using the built-in Nuke plugin. Works cross-platformedly, too. Thanks for your help, Mike!

Cool. I’m pleased your all up and running now! Just to call you out on one of your earlier points:

So, Deadline has quite a few API entry points. In fact, one of my colleagues, James wrote a dev blog post on this subject here:
deadline.thinkboxsoftware.com/fe … -code-here

The key thing I want to highlight is our built-in Python based “Scripting API” (which also has .NET capabilities) is not the same as our “Standalone Python API” which is a wrapper around our “HTTP RESTful API”. Using the Standalone Python API, you can create a dict and submit jobs to Deadline without having to create “temp” files. Of course, we need an endpoint to target this submission at, so you will need to run our “WebService” if you want to use this alternative method of job submission. Here’s the details:

docs.thinkboxsoftware.com/produ … rvice.html

docs.thinkboxsoftware.com/produ … index.html

Yeah, I had already found that part and had got that up and running. :slight_smile: That’s been the entry point we used from the beginning. My various hook python files will get a few lines longer, but my farm code is dropping from a couple thousand lines to a couple hundred because we were able to get this working. Thank you again for your help!

Privacy | Site terms | Cookie preferences