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