router bug fix
- errors in cache are stored as Exception, not as tuple Change-Id: I391c74a4bef1dc10a1783b98b1ad06fec90365df Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/23044 Tested-by: JenkinsCodeReview <bjoern_pedersen@frm2.tum.de> Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
parent
4411707f6a
commit
7d987b3e42
@ -1,7 +1,8 @@
|
||||
[node router]
|
||||
type = router
|
||||
description = router node
|
||||
[NODE]
|
||||
class = protocol.router.Router
|
||||
id = multiplexer
|
||||
description = multiplexer node
|
||||
nodes = ['localhost:5000', 'localhost:10769']
|
||||
|
||||
[interface tcp]
|
||||
bindto = 0.0.0.0:5001
|
||||
[INTERFACE]
|
||||
uri = tcp://5000
|
||||
|
@ -1,7 +1,8 @@
|
||||
[node router]
|
||||
type = router
|
||||
[NODE]
|
||||
id = router
|
||||
class = protocol.router.Router
|
||||
description = router node
|
||||
node = localhost:5000
|
||||
|
||||
[interface tcp]
|
||||
bindto = 0.0.0.0:5001
|
||||
[INTERFACE]
|
||||
uri=tcp://5002
|
||||
|
@ -43,7 +43,8 @@ from secop.lib.multievent import MultiEvent
|
||||
|
||||
|
||||
class SecopClient(secop.client.SecopClient):
|
||||
DISCONNECTED = ('Communication failed', 'remote SEC node disconnected')
|
||||
disconnectedExc = secop.errors.CommunicationFailedError('remote SEC node disconnected')
|
||||
disconnectedError = (disconnectedExc.name, str(disconnectedExc))
|
||||
|
||||
def __init__(self, uri, log, dispatcher):
|
||||
self.dispatcher = dispatcher
|
||||
@ -66,13 +67,14 @@ class SecopClient(secop.client.SecopClient):
|
||||
if not online:
|
||||
for key, (value, _, readerror) in self.cache.items():
|
||||
if not readerror:
|
||||
self.cache[key] = value, t, self.DISCONNECTED
|
||||
self.cache[key] = value, t, self.disconnectedExc
|
||||
self.updateEvent(*key, *self.cache[key])
|
||||
|
||||
def descriptiveDataChange(self, module, data):
|
||||
if module is None:
|
||||
self.log.error('descriptive data for node %r has changed', self.nodename)
|
||||
self.dispatcher.restart()
|
||||
self.dispatcher.restart()
|
||||
self._shutdown = True
|
||||
raise secop.errors.SECoPError('descriptive data for node %r has changed' % self.nodename)
|
||||
|
||||
|
||||
class Router(secop.protocol.dispatcher.Dispatcher):
|
||||
@ -99,6 +101,8 @@ class Router(secop.protocol.dispatcher.Dispatcher):
|
||||
# register callbacks
|
||||
for node in self.nodes:
|
||||
node.register_callback(None, node.updateEvent, node.descriptiveDataChange, node.nodeStateChange)
|
||||
|
||||
self.restart = srv.restart
|
||||
self.node_by_module = {}
|
||||
multievent = MultiEvent()
|
||||
for node in self.nodes:
|
||||
@ -171,7 +175,7 @@ class Router(secop.protocol.dispatcher.Dispatcher):
|
||||
node = self.node_by_module[module]
|
||||
if node.online:
|
||||
return node.request(READREQUEST, specifier, data)
|
||||
return ERRORPREFIX + READREQUEST, specifier, SecopClient.DISCONNECTED + (dict(t=node.disconnect_time),)
|
||||
return ERRORPREFIX + READREQUEST, specifier, SecopClient.disconnectedError + (dict(t=node.disconnect_time),)
|
||||
|
||||
def handle_change(self, conn, specifier, data):
|
||||
module = specifier.split(':')[0]
|
||||
|
Loading…
x
Reference in New Issue
Block a user