@@ -580,28 +580,36 @@ func (d *diskQueue) freeDiskSpace(expectedBytesIncrease int64) error {
580
580
d .logf (ERROR , "DISKQUEUE(%s) failed to retrieve all .bad file info - %s" , d .name , err )
581
581
}
582
582
583
+ if expectedBytesIncrease > d .maxBytesDiskSpace {
584
+ return fmt .Errorf ("could not make space for expectedBytesIncrease = %d, with maxBytesDiskSpace = %d " , expectedBytesIncrease , d .maxBytesDiskSpace )
585
+ }
586
+
583
587
// 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
592
605
} 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 ))
604
607
}
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 )
605
613
}
606
614
607
615
return nil
0 commit comments