Skip to content

Commit 48c7a85

Browse files
committed
Update totalBytes and writePos when writing number of messages, and resolve the writeMessages off by 1 error.
1 parent 293a774 commit 48c7a85

File tree

2 files changed

+9
-12
lines changed

2 files changed

+9
-12
lines changed

diskqueue.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -435,12 +435,14 @@ func (d *diskQueue) writeOne(data []byte) error {
435435
totalBytes := int64(4 + dataLen)
436436

437437
// check if we reached the file size limit with this message
438-
if d.diskLimitFeatIsOn && d.writePos+totalBytes+8 >= d.maxBytesPerFile {
438+
if d.diskLimitFeatIsOn && d.writePos+totalBytes >= d.maxBytesPerFile {
439439
// write number of messages in binary to file
440-
err = binary.Write(&d.writeBuf, binary.BigEndian, d.writeMessages)
440+
err = binary.Write(&d.writeBuf, binary.BigEndian, d.writeMessages+1)
441441
if err != nil {
442442
return err
443443
}
444+
445+
totalBytes += 8
444446
}
445447

446448
// only write to the file once
@@ -454,14 +456,11 @@ func (d *diskQueue) writeOne(data []byte) error {
454456
d.writePos += totalBytes
455457
d.depth += 1
456458

457-
fileSize := d.writePos
458-
459459
if d.diskLimitFeatIsOn {
460-
// save space for the number of messages in this file
461-
fileSize += 8
460+
d.writeMessages += 1
462461
}
463462

464-
if fileSize >= d.maxBytesPerFile {
463+
if d.writePos >= d.maxBytesPerFile {
465464
if d.readFileNum == d.writeFileNum {
466465
d.maxBytesPerFileRead = d.writePos
467466
}
@@ -480,8 +479,6 @@ func (d *diskQueue) writeOne(data []byte) error {
480479
d.writeFile.Close()
481480
d.writeFile = nil
482481
}
483-
} else {
484-
d.writeMessages += 1
485482
}
486483

487484
return err

diskqueue_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -259,22 +259,22 @@ type md struct {
259259
writePos int64
260260
}
261261

262-
func readMetaDataFile(fileName string, retried int, withDiskSpaceFeat bool) md {
262+
func readMetaDataFile(fileName string, retried int, diskLimitFeatIsOn bool) md {
263263
f, err := os.OpenFile(fileName, os.O_RDONLY, 0600)
264264
if err != nil {
265265
// provide a simple retry that results in up to
266266
// another 500ms for the file to be written.
267267
if retried < 9 {
268268
retried++
269269
time.Sleep(50 * time.Millisecond)
270-
return readMetaDataFile(fileName, retried, withDiskSpaceFeat)
270+
return readMetaDataFile(fileName, retried, diskLimitFeatIsOn)
271271
}
272272
panic(err)
273273
}
274274
defer f.Close()
275275

276276
var ret md
277-
if withDiskSpaceFeat {
277+
if diskLimitFeatIsOn {
278278
_, err = fmt.Fscanf(f, "%d\n%d,%d,%d\n%d,%d,%d\n",
279279
&ret.depth,
280280
&ret.readFileNum, &ret.readMessages, &ret.readPos,

0 commit comments

Comments
 (0)