Below is the list of the application plugins which has the HandleStdoutError() function which we will leverage to ignore an error from the corresponding application at render time:
- 3dsCmd
- After Effects
- Altus
- Arnold Standalone
- Blender
- Cinema 4D
- Cinema 4D Batch
- Clarisse
- Corona
- Draft
- Episode
- FFmpeg
- Houdini
- Katana
- Mantra
- Mental Ray
- Natron
- Nuke Frame Server
- Real Flow
- Redshift Standalone
- Sketchup
- Softimage
- Softimage Batch
- VDenoise
- V-Ray
- V-Ray Benchmark
- Vue
If jobs are failing due to an error message that you know can be ignored, you can isolate the submission from Deadline. In these failure scenarios, you can modify the STDOUT Handler function to ignore the error.
To modify the STDOUT Handler function to ignore the error, start by finding the plugin script under "/[repo]/plugins/[plugin]/[plugin].py", Make a backup copy of the plugin python script for the smooth rollback if anything goes wrong. Look for "def HandleStdoutError(self)" function in the python script. Make sure to you pick the part of the error which will not change in the regression and store it in a variable. Deadline will use this variable to compare it with the Regex Deadline catches and ignore it with the if else statement.
Using the following Arnold geometry error as an example. We will edit the "def HandleStdoutError(self):" function in "/[repo]/plugins/Arnold/Arnold.py" to ignore the error while rendering.
=======================================================
Error
=======================================================
FailRenderException : 00:00:07 1343MB ERROR | [polymesh] /obj/Helix/polygons: out-of-range shader index (11/11)
at Deadline.Plugins.DeadlinePlugin.FailRender(String message) (Python.Runtime.PythonException)
File "C:\ProgramData\Thinkbox\Deadline10\workers\Username\plugins\60bed759af1e9d374ceb8d13\Arnold.py", line 272, in HandleStdoutError
self.FailRender(self.GetRegexMatch(0))
at Python.Runtime.Dispatcher.Dispatch(ArrayList args)
at __FranticX_Processes_ManagedProcess_StdoutHandlerDelegateDispatcher.Invoke()
at FranticX.Processes.ManagedProcess.RegexHandlerCallback.CallFunction()
at FranticX.Processes.ManagedProcess.e(String di, Boolean dj)
at FranticX.Processes.ManagedProcess.Execute(Boolean waitForExit)
at Deadline.Plugins.DeadlinePlugin.DoRenderTasks()
at Deadline.Plugins.PluginWrapper.RenderTasks(Task task, String& outMessage, AbortLevel& abortLevel)
at Deadline.Plugins.PluginWrapper.RenderTasks(Task task, String& outMessage, AbortLevel& abortLevel)
=======================================================
Below is the patched code added in Arnold.py on line # 271 for the HandleStdoutError() function:
def HandleStdoutError(self):
geometry_error= "out-of-range shader index"
if geometry_error in self.GetRegexMatch(0):
self.LogInfo( "Ignoring the Geometry Error" )
else
self.FailRender(self.GetRegexMatch(0))
In the above code example, we used “geometry_error” variable to store the error message as a string. The "out-of-range shader index" error message will not change in the regression and Deadline will catch it in Regex Match. In the HandleStdoutError() function, the stored error message will be compared with the Regex and if matched, the error then gets ignored and a log line gets printed.
Comments
0 comments
Article is closed for comments.