Skip to content

Commit adc5610

Browse files
authored
Read correct number of messages from end of file (nsqio#7)
* trivial improvement of some checks * use file instead of bufio.Reader in readNumOfMessages from file end Signed-off-by: Leon Ziyang Zhang <[email protected]>
1 parent 90e0163 commit adc5610

File tree

1 file changed

+5
-11
lines changed

1 file changed

+5
-11
lines changed

diskqueue.go

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,11 @@ func NewWithDiskSpace(name string, dataPath string,
171171

172172
// Get the last known state of DiskQueue from metadata and start ioLoop
173173
func (d *diskQueue) start() error {
174-
// ensure that DiskQueue has enough space to write the metadata file
175-
if d.enableDiskLimitation && d.maxBytesDiskSpace <= maxMetaDataFileSize {
174+
// ensure that DiskQueue has enough space to write the metadata file + at least one data file with max size + message size
175+
if d.enableDiskLimitation && (d.maxBytesDiskSpace <= maxMetaDataFileSize+d.maxBytesPerFile) {
176176
errorMsg := fmt.Sprintf(
177-
"disk size limit too small(%d): not enough space for MetaData file size(%d)",
178-
d.maxBytesDiskSpace, maxMetaDataFileSize)
177+
"disk size limit too small(%d): not enough space for MetaData file (size=%d) and at least one data file with max size (maxBytesPerFile=%d).",
178+
d.maxBytesDiskSpace, maxMetaDataFileSize, d.maxBytesPerFile)
179179
d.logf(ERROR, "DISKQUEUE(%s) - %s", errorMsg)
180180
return errors.New(errorMsg)
181181
}
@@ -463,8 +463,6 @@ func (d *diskQueue) readNumOfMessages(fileName string) (int64, error) {
463463
if err != nil {
464464
return 0, err
465465
}
466-
467-
d.reader = bufio.NewReader(d.readFile)
468466
}
469467

470468
closeReadFile := func() {
@@ -480,7 +478,7 @@ func (d *diskQueue) readNumOfMessages(fileName string) (int64, error) {
480478
}
481479

482480
var totalMessages int64
483-
err = binary.Read(d.reader, binary.BigEndian, &totalMessages)
481+
err = binary.Read(d.readFile, binary.BigEndian, &totalMessages)
484482
if err != nil {
485483
return 0, err
486484
}
@@ -580,10 +578,6 @@ func (d *diskQueue) freeDiskSpace(expectedBytesIncrease int64) error {
580578
d.logf(ERROR, "DISKQUEUE(%s) failed to retrieve all .bad file info - %s", d.name, err)
581579
}
582580

583-
if expectedBytesIncrease > d.maxBytesDiskSpace {
584-
return fmt.Errorf("could not make space for expectedBytesIncrease = %d, with maxBytesDiskSpace = %d ", expectedBytesIncrease, d.maxBytesDiskSpace)
585-
}
586-
587581
// keep freeing up disk space until we have enough space to write this message
588582
for _, badFileInfo := range badFileInfos {
589583
if d.totalDiskSpaceUsed+expectedBytesIncrease <= d.maxBytesDiskSpace {

0 commit comments

Comments
 (0)