From b669d839fd5d55d86aebfa99dba8dc985aa57481 Mon Sep 17 00:00:00 2001 From: Alexander van Amesfoort <amesfoort@astron.nl> Date: Mon, 28 Aug 2017 12:36:08 +0000 Subject: [PATCH] Task #5441: COBALT RSP raw support: fix data written and data lost code if no seq nrs used. Also move an ASSERTSTR() and correct func names in error msgs --- RTCP/Cobalt/CoInterface/src/StreamableData.h | 5 +++++ RTCP/Cobalt/GPUProc/src/Station/RSPRawSender.cc | 6 +++--- RTCP/Cobalt/OutputProc/src/OutputThread.cc | 8 +++++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/RTCP/Cobalt/CoInterface/src/StreamableData.h b/RTCP/Cobalt/CoInterface/src/StreamableData.h index 567b7d0621e..97e8dc290b5 100644 --- a/RTCP/Cobalt/CoInterface/src/StreamableData.h +++ b/RTCP/Cobalt/CoInterface/src/StreamableData.h @@ -93,6 +93,11 @@ namespace LOFAR rawSequenceNumber = seqno; } + bool doReadWithSequenceNumber() + { + return readWithSequenceNumber; + } + virtual void setDimensions(unsigned, unsigned, unsigned) { } diff --git a/RTCP/Cobalt/GPUProc/src/Station/RSPRawSender.cc b/RTCP/Cobalt/GPUProc/src/Station/RSPRawSender.cc index e57c092a556..5159b2497c0 100644 --- a/RTCP/Cobalt/GPUProc/src/Station/RSPRawSender.cc +++ b/RTCP/Cobalt/GPUProc/src/Station/RSPRawSender.cc @@ -154,7 +154,7 @@ namespace LOFAR { unsigned nrSent = sockStream->sendmmsg(packets, packetSize, itsSentMsgSizes, MSG_CONFIRM); if (nrSent < nrPackets) { // don't check itsSentMsgSizes: resending remainders won't help with UDP (message oriented) itsNrDroppedPackets += nrPackets - nrSent; - LOG_WARN("RSPRawSender::trySend(): fewer sent to avoid blocking"); // not retried, not even in non-RT... + LOG_WARN("RSPRawSender::trySendUdp(): fewer sent to avoid blocking"); // not retried, not even in non-RT... } } @@ -176,7 +176,7 @@ namespace LOFAR { unsigned nrSent = bytesSent / packetSize; unsigned partialPacketSent = bytesSent % packetSize; if (partialPacketSent != 0) { - LOG_WARN("RSPRawSender::trySend(): partial packet sent: will retry remainder later"); + LOG_WARN("RSPRawSender::trySendByteStream(): partial packet sent: will retry remainder later"); const char *data = (char *)iov[nrSent].iov_base + partialPacketSent; size_t size = packetSize - partialPacketSent; itsPendingData.resize(size); @@ -185,7 +185,7 @@ namespace LOFAR { } itsNrDroppedPackets += nrPackets - nrSent; - LOG_WARN("RSPRawSender::trySend(): fewer sent to avoid blocking"); // not retried, not even in non-RT... + LOG_WARN("RSPRawSender::trySendByteStream(): fewer sent to avoid blocking"); // not retried, not even in non-RT... } } diff --git a/RTCP/Cobalt/OutputProc/src/OutputThread.cc b/RTCP/Cobalt/OutputProc/src/OutputThread.cc index 46be2e737ac..088f656348d 100644 --- a/RTCP/Cobalt/OutputProc/src/OutputThread.cc +++ b/RTCP/Cobalt/OutputProc/src/OutputThread.cc @@ -91,10 +91,10 @@ namespace LOFAR { // TODO: check for dropped data at end of observation - size_t droppedBlocks = data->sequenceNumber() - itsNextSequenceNumber; - ASSERTSTR(data->sequenceNumber() >= itsNextSequenceNumber, "Received block nr " << data->sequenceNumber() << " out of order! I expected nothing before " << itsNextSequenceNumber); + size_t droppedBlocks = data->sequenceNumber() - itsNextSequenceNumber; + const string streamNrStr = '[' + lexical_cast<string>(itsStreamNr) + ']'; if (droppedBlocks > 0) { @@ -106,7 +106,9 @@ namespace LOFAR itsBlocksDropped * static_cast<float>(itsBlockDuration)); } - itsNextSequenceNumber = data->sequenceNumber() + 1; + if (data->doReadWithSequenceNumber()) { + itsNextSequenceNumber = data->sequenceNumber() + 1; + } // else, droppedBlocks is useless, but itsBlocksWritten is still useful itsBlocksWritten++; itsMdLogger.log(itsMdKeyPrefix + PN_COP_DROPPING + streamNrStr, -- GitLab