Command_Execution_TimeOut

Hello all

I am encountering following errors while executing the command:

org.omg.CORBA.TIMEOUT: client timeout reached vmcid: 0x0 minor code: 0 completed: No
Severity - ERROR
Origin - GMRT/LMC/C01.class fr.esrf.TangoApi.ConnectionDAODefaultImpl.command_inout)
Description - Device (GMRT/LMC/C01) timed out (>3000 ms)!
Reason - org.omg.CORBA.TIMEOUT: client timeout reached vmcid: 0x0 minor code: 0 completed: No



I have attached the screenshot of the above errors and its trace.
Any Help will be appreciated.


Thanks and Regards
TCS-GMRT TEAM
Regards,
TCS_GMRT
Hi,

this message mans exactly what it says. The application did a synchronous call on a device and it took more than the default timeout (3 seconds) to reply. You can change the default timeout to wait even longer. See section 6.1.2.5 page 91 of the documentation :

void DeviceProxy::set_timeout_millis(int timeout)
Set client side timeout for device in milliseconds. Any method which takes longer than this time to execute
will throw an exception.
Exception: none

But I strongly recommend you not to do this and instead to make your command return immediately after have acknowledged the command. Then execute the work in a separate thread and reflect this in the state (using the state machine). Once the work has been done you can read the result if need by via an attribute or different command or using an event. If you want to block the server for the time to execute the command then only do this if there are no other clients of this server. In this case you can use the asynch_command_inout() to not block the client. Again you need to increment the timeout to ensure the client does not time out.

More info on the different communications patterns in TANGO in this presentation:

http://ftp.esrf.fr/pub/cs/tango/conferences/pcapac2014/tango_communication.pdf

Andy
Hello Andy

this message mans exactly what it says. The application did a synchronous call on a device and it took more than the default timeout (3 seconds) to reply. You can change the default timeout to wait even longer.

I am launching new device server 'b' from my device server 'a'. The new device server gets launched. The problem here I am facing is:
Whenever I am trying to send command from my device server 'a' to the launched device server 'b', I get the timeout error.

I have increased the timeout as said in the previous reply, now its showing timeout after the set timeout period.

But if I launch device server 'a' and 'b' separately and now I am sending command from device server 'a' to device server 'b', then I don't get the timeout error.
Any Suggestions ?

Thanks and Regards
TCS-GMRT TEAM
Regards,
TCS_GMRT
Hi!
TCS_GMRT
I am launching new device server 'b' from my device server 'a'.
What do you mean with this sentence?
How do you launch your new device server 'b' from the device server 'a'?
What programming language are you using?

Cheers,
Reynald
Rosenberg's Law: Software is easy to make, except when you want it to do something new.
Corollary: The only software that's worth making is software that does something new.
Hi Reynald

What do you mean with this sentence?
How do you launch your new device server 'b' from the device server 'a'?
What programming language are you using?

I am using Java language for device server 'a' and Cpp language for device server 'b'.
Launching device server 'b' from device server 'a' means I am starting the device server 'b' from 'a'. I am executing the cpp executable file of 'b' device server from device server 'a' by specifying instance in the JAVA code.

I am able to start server 'b' successfully from device server 'a'.

But while sending command from device server 'a' to device server 'b', Its showing timeout error. If I launch device server 'a' and 'b' separately, Then I don't get timeout error.
I have increased the timeout period but its giving timeout error after the said period.

Following is the error

org.omg.CORBA.TIMEOUT: client timeout reached vmcid: 0x0 minor code: 0 completed: No
Severity - ERROR
Origin - GMRT/LMC/C01.class fr.esrf.TangoApi.ConnectionDAODefaultImpl.command_inout)
Description - Device (GMRT/LMC/C01) timed out (>3000 ms)!
Reason - org.omg.CORBA.TIMEOUT: client timeout reached vmcid: 0x0 minor code: 0 completed: No


Any Suggestions ??

Thanks and Regards
TCS-GMRT TEAM

Regards,
TCS_GMRT
Hi,

What I would do if I were you would be to use the Starter device server to start the server 'b'.
You can send a command to a Starter device and ask it to start your device server 'b'.
The Starter device server was designed for this purpose and will help you to administrate your system easily with astor as well.

Would this fit your requirements?

Hoping this helps.

Reynald
Rosenberg's Law: Software is easy to make, except when you want it to do something new.
Corollary: The only software that's worth making is software that does something new.
It sounds like your device server b is blocked after it has been started. This could b because of output it is sending to he command line, or not being detached properly from the process of the device server a.

I would follow Reynald's suggestion of using the Starter and Astor. Alternatively starting the two device server by hand separately is also a solution. The TANGP api is considered stateless i.e. you can create a DeviceProxy even if the device is not available. It will conenct as soon as it is. This means you can start device servers in any order and your code shold work. Of course in your code you need to avoid a deadlock situation - device server a waiting for device server b and vice versa.

Andy

TCS_GMRT
I am using Java language for device server 'a' and Cpp language for device server 'b'.
Launching device server 'b' from device server 'a' means I am starting the device server 'b' from 'a'. I am executing the cpp executable file of 'b' device server from device server 'a' by specifying instance in the JAVA code.

I am able to start server 'b' successfully from device server 'a'.

But while sending command from device server 'a' to device server 'b', Its showing timeout error. If I launch device server 'a' and 'b' separately, Then I don't get timeout error.
I have increased the timeout period but its giving timeout error after the said period.

Following is the error

org.omg.CORBA.TIMEOUT: client timeout reached vmcid: 0x0 minor code: 0 completed: No
Severity - ERROR
Origin - GMRT/LMC/C01.class fr.esrf.TangoApi.ConnectionDAODefaultImpl.command_inout)
Description - Device (GMRT/LMC/C01) timed out (>3000 ms)!
Reason - org.omg.CORBA.TIMEOUT: client timeout reached vmcid: 0x0 minor code: 0 completed: No


Any Suggestions ??

Thanks and Regards
TCS-GMRT TEAM
 
Register or login to create to post a reply.