FrappyNode: do not rely on cached cfg
on startup and when disconnected, the main value of FrappyNode gets trys to get its value from running processes.
This commit is contained in:
35
devices.py
35
devices.py
@ -148,7 +148,6 @@ class FrappyConfig(Device):
|
|||||||
createThread('frappy change notification', self.handle_notifications)
|
createThread('frappy change notification', self.handle_notifications)
|
||||||
|
|
||||||
def handle_notifications(self):
|
def handle_notifications(self):
|
||||||
try:
|
|
||||||
controller = session.daemon_device._controller
|
controller = session.daemon_device._controller
|
||||||
while True:
|
while True:
|
||||||
self._trigger_change.wait()
|
self._trigger_change.wait()
|
||||||
@ -163,8 +162,6 @@ class FrappyConfig(Device):
|
|||||||
controller.new_request(ScriptRequest(cmd, None, User('guest', USER)))
|
controller.new_request(ScriptRequest(cmd, None, User('guest', USER)))
|
||||||
except RequestError as e:
|
except RequestError as e:
|
||||||
session.log.error(f'can not queue request {e!r}')
|
session.log.error(f'can not queue request {e!r}')
|
||||||
except Exception as e:
|
|
||||||
print(e)
|
|
||||||
|
|
||||||
def check_or_start(self, main=None, stick=None, addons=None):
|
def check_or_start(self, main=None, stick=None, addons=None):
|
||||||
"""start/stop frappy servers
|
"""start/stop frappy servers
|
||||||
@ -412,18 +409,7 @@ class FrappyNode(SecNodeDevice, Moveable):
|
|||||||
super().doInit(mode)
|
super().doInit(mode)
|
||||||
|
|
||||||
def doRead(self, maxage=0):
|
def doRead(self, maxage=0):
|
||||||
try:
|
return self._cfgvalue or ''
|
||||||
if self._secnode.online:
|
|
||||||
return self._secnode.descriptive_data['_frappy_config']
|
|
||||||
except (KeyError, AttributeError):
|
|
||||||
pass
|
|
||||||
if self._cfgvalue is None:
|
|
||||||
sea_cfg = FrappyManager().cfg_from_sea(config.instrument).get(self.service)
|
|
||||||
if sea_cfg:
|
|
||||||
return sea_cfg
|
|
||||||
if self._cache:
|
|
||||||
self._cfgvalue = self._cache.get(self, 'value')
|
|
||||||
return self._cfgvalue
|
|
||||||
|
|
||||||
def createDevices(self):
|
def createDevices(self):
|
||||||
cfg = self.read()
|
cfg = self.read()
|
||||||
@ -441,7 +427,12 @@ class FrappyNode(SecNodeDevice, Moveable):
|
|||||||
|
|
||||||
def nodeStateChange(self, online, state):
|
def nodeStateChange(self, online, state):
|
||||||
super().nodeStateChange(online, state)
|
super().nodeStateChange(online, state)
|
||||||
if not online:
|
if online:
|
||||||
|
if self._cfgvalue is None:
|
||||||
|
self._cfgvalue = FrappyManager().get_cfg(config.instrument, self.service)
|
||||||
|
if not self._cfgvalue:
|
||||||
|
self._cfgvalue = self.uri
|
||||||
|
else:
|
||||||
self._cfgvalue = None
|
self._cfgvalue = None
|
||||||
cfg = self.read()
|
cfg = self.read()
|
||||||
if self._lastcfg != cfg:
|
if self._lastcfg != cfg:
|
||||||
@ -472,10 +463,8 @@ class FrappyNode(SecNodeDevice, Moveable):
|
|||||||
ins = config.instrument
|
ins = config.instrument
|
||||||
fm = FrappyManager()
|
fm = FrappyManager()
|
||||||
info = fm.get_ins_info(ins)
|
info = fm.get_ins_info(ins)
|
||||||
cfginfo = {}
|
running_cfg = fm.get_cfg(ins, self.service) or ''
|
||||||
fm.get_procs(cfginfo=cfginfo)
|
if not forced or cfg is None:
|
||||||
running_cfg = cfginfo.get((ins, self.service), '')
|
|
||||||
if not forced:
|
|
||||||
sea_cfg = fm.cfg_from_sea(ins).get(self.service, '')
|
sea_cfg = fm.cfg_from_sea(ins).get(self.service, '')
|
||||||
if '?' in sea_cfg:
|
if '?' in sea_cfg:
|
||||||
if sea_cfg == '?':
|
if sea_cfg == '?':
|
||||||
@ -486,8 +475,14 @@ class FrappyNode(SecNodeDevice, Moveable):
|
|||||||
elif sea_cfg:
|
elif sea_cfg:
|
||||||
cfg = sea_cfg
|
cfg = sea_cfg
|
||||||
elif running_cfg:
|
elif running_cfg:
|
||||||
|
self._cfgvalue = running_cfg
|
||||||
return
|
return
|
||||||
if cfg == running_cfg:
|
if cfg == running_cfg:
|
||||||
|
self._cfgvalue = running_cfg
|
||||||
|
return
|
||||||
|
if cfg is None:
|
||||||
|
if forced:
|
||||||
|
self.log.error('can not restart - previous cfg unknown')
|
||||||
return
|
return
|
||||||
if cfg != running_cfg:
|
if cfg != running_cfg:
|
||||||
self.disable()
|
self.disable()
|
||||||
|
Reference in New Issue
Block a user