Skip to content
Snippets Groups Projects
Commit b669d839 authored by Alexander van Amesfoort's avatar Alexander van Amesfoort
Browse files

Task #5441: COBALT RSP raw support: fix data written and data lost code if no...

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
parent 9bd6768c
No related branches found
No related tags found
No related merge requests found
...@@ -93,6 +93,11 @@ namespace LOFAR ...@@ -93,6 +93,11 @@ namespace LOFAR
rawSequenceNumber = seqno; rawSequenceNumber = seqno;
} }
bool doReadWithSequenceNumber()
{
return readWithSequenceNumber;
}
virtual void setDimensions(unsigned, unsigned, unsigned) virtual void setDimensions(unsigned, unsigned, unsigned)
{ {
} }
......
...@@ -154,7 +154,7 @@ namespace LOFAR { ...@@ -154,7 +154,7 @@ namespace LOFAR {
unsigned nrSent = sockStream->sendmmsg(packets, packetSize, itsSentMsgSizes, MSG_CONFIRM); 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) if (nrSent < nrPackets) { // don't check itsSentMsgSizes: resending remainders won't help with UDP (message oriented)
itsNrDroppedPackets += nrPackets - nrSent; 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 { ...@@ -176,7 +176,7 @@ namespace LOFAR {
unsigned nrSent = bytesSent / packetSize; unsigned nrSent = bytesSent / packetSize;
unsigned partialPacketSent = bytesSent % packetSize; unsigned partialPacketSent = bytesSent % packetSize;
if (partialPacketSent != 0) { 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; const char *data = (char *)iov[nrSent].iov_base + partialPacketSent;
size_t size = packetSize - partialPacketSent; size_t size = packetSize - partialPacketSent;
itsPendingData.resize(size); itsPendingData.resize(size);
...@@ -185,7 +185,7 @@ namespace LOFAR { ...@@ -185,7 +185,7 @@ namespace LOFAR {
} }
itsNrDroppedPackets += nrPackets - nrSent; 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...
} }
} }
......
...@@ -91,10 +91,10 @@ namespace LOFAR ...@@ -91,10 +91,10 @@ namespace LOFAR
{ {
// TODO: check for dropped data at end of observation // 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); 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) + ']'; const string streamNrStr = '[' + lexical_cast<string>(itsStreamNr) + ']';
if (droppedBlocks > 0) { if (droppedBlocks > 0) {
...@@ -106,7 +106,9 @@ namespace LOFAR ...@@ -106,7 +106,9 @@ namespace LOFAR
itsBlocksDropped * static_cast<float>(itsBlockDuration)); 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++; itsBlocksWritten++;
itsMdLogger.log(itsMdKeyPrefix + PN_COP_DROPPING + streamNrStr, itsMdLogger.log(itsMdKeyPrefix + PN_COP_DROPPING + streamNrStr,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment