You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Pushing a record means appending it to the data file. The file
* position is always at the end.
* If there is no record in the file then the file should be empty so we
* have to write the data file ID string before appending the first
* record to the file. We're also going to need the file position where
* we append the record.
*/
off_t pos = this.data.seek(0, SEEK_CUR, "Unable to seek to tell the file size");
if (this.records)
{
this.data.enforce(pos >= Constants.datafile_id.length, "File size less than length of ID string");
}
else
{
this.data.enforce(!pos, "File expected to be empty");
this.data.write(Constants.datafile_id, "Unable to write the data file ID");
pos = Constants.datafile_id.length;
}
The records field is an unsigned 32-bit integer, it can happen that it overflows back to zero if the overflow.dat file exceeds 4 billion records. This causes the DMQ to go into a stuck state (the logs are flooded with File expected to be empty messages), which has a knock-on effect of halting all connected clients, not just those that have overflowed.
The text was updated successfully, but these errors were encountered:
dmqnode/src/dmqnode/storage/engine/DiskOverflow.d
Lines 606 to 625 in cf7060c
The
records
field is an unsigned 32-bit integer, it can happen that it overflows back to zero if the overflow.dat file exceeds 4 billion records. This causes the DMQ to go into a stuck state (the logs are flooded withFile expected to be empty
messages), which has a knock-on effect of halting all connected clients, not just those that have overflowed.The text was updated successfully, but these errors were encountered: