taurus-org / taurus

Moved to https://gitlab.com/taurus-org/taurus
http://taurus-scada.org
43 stars 46 forks source link

Taurus GUI blocks on DS errors #1159

Open tiagocoutinho opened 3 years ago

tiagocoutinho commented 3 years ago

If a tango DS is raising errors in its read_attr_hardware(), a taurus gui reading from it will block forever on startup.

tiagocoutinho commented 3 years ago

The problem is, in this case, the client read_attributes_reply() method will throw an error. This is unlike the situation where only a some attributes raise erros. In this case, read_attributes_reply() succeeds and each attribute in error can be retrieved.

IMHO, tango plugin should be protected against read_attributes_async/reply errors

cpascual commented 3 years ago

Hi @tiagocoutinho , can this be reproduced with the TangoTest DS (maybe using the attribute that raises exception)?

If not: would it be possible to build a dummy DS for reproducing it?

tiagocoutinho commented 3 years ago

I don't think you can do it with TangoTest.

Here is a short server:

from tango.server import Device, attribute

class Evil(Device):

    def read_attr_hardware(self, attr_ids):
        raise RuntimeError("don't even make an effort")

    a1 = attribute(lambda x: 1)
    a2 = attribute(lambda x: 2)

Evil.run_server()

I think a simple taurus form will show the problem:

taurus form evil/evil/evil/{a1,a2}
tiagocoutinho commented 3 years ago

To be fair, the above taurus form example shows up but it took a couple of minutes which was more time than I took to write the above message :-)