diff --git a/MAC/Services/TBB/TBBClient/lib/tbbbuslistener.py b/MAC/Services/TBB/TBBClient/lib/tbbbuslistener.py index 4040b375b29c207034d1c92ee26c3dece7623f9a..b4890189a7bea811575f0e6b2e43fc81fb5a32ac 100644 --- a/MAC/Services/TBB/TBBClient/lib/tbbbuslistener.py +++ b/MAC/Services/TBB/TBBClient/lib/tbbbuslistener.py @@ -55,6 +55,10 @@ class TBBBusListener(AbstractBusListener): self.onDataWritersStarted(msg.content) elif msg.subject == '%sDataWritersFinished' % self.subject_prefix: self.onDataWritersFinished(msg.content) + elif msg.subject == '%sDataWritersStopping' % self.subject_prefix: + self.onDataWritersStopping(msg.content) + elif msg.subject == '%sDataWritersStopped' % self.subject_prefix: + self.onDataWritersStopped(msg.content) else: logger.error("TBBBusListener.handleMessage: unknown subject: %s", msg.subject) except Exception as e: @@ -86,6 +90,16 @@ class TBBBusListener(AbstractBusListener): :param msg_content: dictionary with the info on which datawrited started on which host/port''' pass + def onDataWritersStopping(self, msg_content): + '''onDataWritersStopping is called upon receiving a DataWritersStopping message. + :param msg_content: ''' + pass + + def onDataWritersStopped(self, msg_content): + '''onDataWritersStopped is called upon receiving a DataWritersStopped message. + :param msg_content: dictionary with the info on which datawrited Stopped on which host/port''' + pass + def main(): from lofar.common.util import waitForInterrupt diff --git a/MAC/Services/TBB/TBBClient/lib/tbbservice_rpc.py b/MAC/Services/TBB/TBBClient/lib/tbbservice_rpc.py index 779300ec922443c801a1eeef9869889b3c25c701..fd5fba61ef6917b6f413dbee06ef74e55001ec3e 100644 --- a/MAC/Services/TBB/TBBClient/lib/tbbservice_rpc.py +++ b/MAC/Services/TBB/TBBClient/lib/tbbservice_rpc.py @@ -20,6 +20,12 @@ class TBBRPC(RPCWrapper): logger.info("Received start datawriter request result %s" % result) return result + def stop_datawriters(self): + logger.info("Requesting stop of tbb data writers...") + result = self.rpc('stop_datawriters') + logger.info("Received stop datawriter request result %s" % result) + return result + def switch_firmware(self, stations, mode): logger.info("Requesting switch of tbb firmware on stations '%s' to mode '%s' ..." % (stations, mode)) result = self.rpc('switch_firmware', stations, mode) diff --git a/MAC/Services/TBB/TBBServer/lib/tbbservice.py b/MAC/Services/TBB/TBBServer/lib/tbbservice.py index 34395207cdb63b704407154e525b4d577eb391cc..2e84f5a69681d8f5b8e298e31a9264fd49d45f62 100644 --- a/MAC/Services/TBB/TBBServer/lib/tbbservice.py +++ b/MAC/Services/TBB/TBBServer/lib/tbbservice.py @@ -250,7 +250,6 @@ class TBBControlService: :param timeout: Timeout in seconds until data writers will be forcefully killed. The default is 24 hours. ''' - self._send_event_message('WaitingForDataWriters', {}) start = datetime.utcnow() while self.procs: logger.info('waiting for %d datawriters to finish...', len(self.procs)) @@ -268,7 +267,7 @@ class TBBControlService: if datetime.utcnow() - start >= timeout: logger.warning('timeout while waiting for %d more datawriters...', len(self.procs)) self.stop_datawriters() - self._send_event_message('WaitingForDataWritersFinished', {}) + self._send_event_message('DataWritersFinished', {}) def stop_datawriters(self): '''Stop TBB datawriters running on CEP4 and notify when done''' @@ -279,6 +278,11 @@ class TBBControlService: del self.procs[node] self._send_event_message('DataWritersStopped', {}) + # also call 'normal' wait_for_datawriters method, + # which has no datawriter to wait for anymore... + # but as a result, it sends a 'DataWritersFinished' event. + self.wait_for_datawriters() + def switch_firmware(self, stations, mode): """ Command TBBs to switch to one of two firmwares: sub-band mode or raw voltage mode.