Skip to content

Commit a821855

Browse files
committed
Iterate through each file rather than relying on the totalDiskSpaceUsed variable.
1 parent a4f9d67 commit a821855

File tree

1 file changed

+27
-19
lines changed

1 file changed

+27
-19
lines changed

diskqueue.go

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -580,28 +580,36 @@ func (d *diskQueue) freeDiskSpace(expectedBytesIncrease int64) error {
580580
d.logf(ERROR, "DISKQUEUE(%s) failed to retrieve all .bad file info - %s", d.name, err)
581581
}
582582

583+
if expectedBytesIncrease > d.maxBytesDiskSpace {
584+
return fmt.Errorf("could not make space for expectedBytesIncrease = %d, with maxBytesDiskSpace = %d ", expectedBytesIncrease, d.maxBytesDiskSpace)
585+
}
586+
583587
// keep freeing up disk space until we have enough space to write this message
584-
for d.totalDiskSpaceUsed+expectedBytesIncrease > d.maxBytesDiskSpace {
585-
if len(badFileInfos) > 0 {
586-
// check if a .bad file exists. If it does, delete that first
587-
err = d.removeBadFile(badFileInfos[0])
588-
if err != nil {
589-
return err
590-
}
591-
badFileInfos = badFileInfos[1:]
588+
for _, badFileInfo := range badFileInfos {
589+
if d.totalDiskSpaceUsed+expectedBytesIncrease <= d.maxBytesDiskSpace {
590+
return nil
591+
}
592+
d.removeBadFile(badFileInfo)
593+
}
594+
for d.readFileNum <= d.writeFileNum {
595+
if d.totalDiskSpaceUsed+expectedBytesIncrease <= d.maxBytesDiskSpace {
596+
return nil
597+
}
598+
// delete the read file (make space)
599+
readFileToDeleteNum := d.readFileNum
600+
err = d.removeReadFile()
601+
if err != nil {
602+
d.logf(ERROR, "DISKQUEUE(%s) failed to remove file(%s) - %s", d.name, d.fileName(readFileToDeleteNum), err)
603+
d.handleReadError()
604+
return err
592605
} else {
593-
// delete the read file (make space)
594-
readFileToDeleteNum := d.readFileNum
595-
err = d.removeReadFile()
596-
if err != nil {
597-
d.logf(ERROR, "DISKQUEUE(%s) failed to remove file(%s) - %s", d.name, d.fileName(readFileToDeleteNum), err)
598-
d.handleReadError()
599-
return err
600-
} else {
601-
d.logf(INFO, "DISKQUEUE(%s) removed file(%s) to free up disk space", d.name, d.fileName(readFileToDeleteNum))
602-
}
603-
d.updateTotalDiskSpaceUsed()
606+
d.logf(INFO, "DISKQUEUE(%s) removed file(%s) to free up disk space", d.name, d.fileName(readFileToDeleteNum))
604607
}
608+
d.updateTotalDiskSpaceUsed()
609+
}
610+
611+
if d.totalDiskSpaceUsed+expectedBytesIncrease > d.maxBytesDiskSpace {
612+
return fmt.Errorf("could not make space for totalDiskSpaceUsed = %d, expectedBytesIncrease = %d, with maxBytesDiskSpace = %d ", d.totalDiskSpaceUsed, expectedBytesIncrease, d.maxBytesDiskSpace)
605613
}
606614

607615
return nil

0 commit comments

Comments
 (0)