I am getting an error when trying to make a system.util.sendRequest call to a message handler on my gateway.
the sendRequest call is in a custom method called refreshData defined on a power table. The relevant parts of the function are bellow
def refreshData(self):
...
resultData = None
print 'Make Request'
try:
resultData = system.util.sendRequest('SPC_Config', 'GetSampleDataReportData', payload) #, timeoutSec = 600)
except:
print 'Request Failure'
print 'Request Done'
...
I am calling this function using an invokeAsynchronous call. See an example of the call bellow
system.util.invokeAsynchronous(event.source.parent.parent.getComponent('Sample Data Table').refreshData)
The message handler on the gateway calls a function in a script file that queries the database and does some tranforms on the data. It is returning a python dict containing pyDataSets. Bellow is the relevant code from the script.
def getReportData():
chartData = system.db.runPrepQuery(chartQuery, parameterList, "db_name")
tableData = system.db.runPrepQuery(tableQuery, parameterList, "db_name")
returnData = {
'chartData': chartData,
'tableData': tableData
}
return returnData
The code in the gateway message handler that calls the function above and returns the results is bellow
reportData = project.sampleDataReport.getReportData()
return reportData
I can see when viewing log data from my scripts and the debug/trace messages from the MassageHandlerRunnable log that everything is working correctly on the gateway. Bellow are relevant log entries for MessageHandlerRunnable. You can see where it gets the results from the getReportData function which are exopected to be empty. It then converts the data to a java object and appears to attempt to send back the result.
|MessageHandlerRunnable|11Oct2021 11:36:36|Send message to Result Handler with: {'tableData': [ ], 'chartData': [ ]}|
|MessageHandlerRunnable|11Oct2021 11:36:36|Converting python result to java object|
|MessageHandlerRunnable|11Oct2021 11:36:36|Python function ran. Result: {'tableData': [ ], 'chartData': [ ]}|
|MessageHandlerRunnable|11Oct2021 11:36:34|Valid runnable Python function found|
However on the client nothing seems to be returned. The client waits for some time and eventually an exception is thrown. The exception is bellow. It appears to show that the call failed and no result was ever reveived.
11:37:34.287 [Thread-73] ERROR client.scripting.SystemUtilities - Error invoking sendRequest from client.
com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Results for asynchronous rpc call were not received within the specified amount of time [60000 ms] for task '355707ef-d109-4a0f-bd88-42d7ed64aa01'
at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.newGatewayException(GatewayInterface.java:351)
at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.sendMessage(GatewayInterface.java:321)
at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.sendMessage(GatewayInterface.java:278)
at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.invoke(GatewayInterface.java:945)
at com.inductiveautomation.ignition.client.script.DesignerSystemUtilities$SendRequestManager.invokeRequest(DesignerSystemUtilities.java:339)
at com.inductiveautomation.ignition.client.script.DesignerSystemUtilities.sendRequestInternal(DesignerSystemUtilities.java:215)
at com.inductiveautomation.ignition.common.script.builtin.SystemUtilities.sendRequestInternal(SystemUtilities.java:931)
at com.inductiveautomation.ignition.common.script.builtin.SystemUtilities.sendRequest(SystemUtilities.java:852)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.python.core.PyReflectedFunction.call(PyReflectedFunction.java:188)
at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction.call(ScriptManager.java:539)
at org.python.core.PyObject.call(PyObject.java:515)
at org.python.core.PyObject.call(PyObject.java:519)
at org.python.pycode.pyx86.refreshData$1(:96)
at org.python.pycode.pyx86.call_function()
at org.python.core.PyTableCode.call(PyTableCode.java:171)
at org.python.core.PyBaseCode.call(PyBaseCode.java:308)
at org.python.core.PyBaseCode.call(PyBaseCode.java:199)
at org.python.core.PyFunction.call(PyFunction.java:482)
at org.python.core.PyMethod.instancemethod___call(PyMethod.java:237)
at org.python.core.PyMethod.call(PyMethod.java:228)
at org.python.core.PyMethod.call(PyMethod.java:223)
at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:842)
at com.inductiveautomation.ignition.client.script.DesignerSystemUtilities.lambda$_invokeAsyncImpl$1(DesignerSystemUtilities.java:138)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.util.concurrent.TimeoutException: Results for asynchronous rpc call were not received within the specified amount of time [60000 ms] for task '355707ef-d109-4a0f-bd88-42d7ed64aa01'
at com.inductiveautomation.ignition.client.util.gui.progress.ClientProgressManager$RunningTask.waitForResult(ClientProgressManager.java:453)
at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.sendMessage(GatewayInterface.java:305)
... 26 common frames omitted
I am wondering if anyone else has seen things like this. Also I see nothing in the docs but are there limitations as to what data can be returned to sendRequest calls?