Skip to content

Commit 1d054bb

Browse files
committed
Remove two FIXMEs left during refactoring
1 parent 90d2d4e commit 1d054bb

File tree

3 files changed

+20
-29
lines changed

3 files changed

+20
-29
lines changed

internal/buffer_list.go

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,15 @@
1515
package internal
1616

1717
import (
18+
"errors"
1819
"fmt"
19-
"syscall"
2020

2121
"github.com/tidwall/btree"
2222
)
2323

24+
var ErrBufferIsMissing = errors.New("tried to read from a missing buffer")
25+
var ErrBufferIsLoading = errors.New("tried to read from a loading buffer")
26+
2427
type BufferState int16
2528

2629
var zeroBuf = make([]byte, 1048576)
@@ -663,25 +666,18 @@ func (l *BufferList) GetHoles(offset, size uint64) (holes []Range, loading bool,
663666
return
664667
}
665668

666-
func (l *BufferList) GetData(offset, size uint64, allowHoles bool, returnIds bool) (data [][]byte, ids map[uint64]bool, err error) {
669+
func (l *BufferList) GetData(offset, size uint64, returnIds bool) (data [][]byte, ids map[uint64]bool, err error) {
667670
if returnIds {
668671
ids = make(map[uint64]bool)
669672
}
670673
curOffset := offset
671674
endOffset := offset + size
672675
l.at.Ascend(curOffset+1, func(end uint64, b *FileBuffer) bool {
673676
if b.offset > curOffset {
674-
if allowHoles {
675-
curEnd := min(endOffset, b.offset)
676-
data = appendZero(data, curEnd-curOffset)
677-
curOffset = curEnd
678-
} else {
679-
// hole
680-
data = nil
681-
// FIXME Use own error codes
682-
err = syscall.EIO
683-
return false
684-
}
677+
// hole
678+
data = nil
679+
err = ErrBufferIsMissing
680+
return false
685681
}
686682
if b.offset >= endOffset {
687683
return false
@@ -693,7 +689,7 @@ func (l *BufferList) GetData(offset, size uint64, allowHoles bool, returnIds boo
693689
if b.loading {
694690
// tried to read a loading buffer
695691
data = nil
696-
err = syscall.EAGAIN
692+
err = ErrBufferIsLoading
697693
return false
698694
} else if b.zero {
699695
data = appendZero(data, curEnd-curOffset)
@@ -704,13 +700,9 @@ func (l *BufferList) GetData(offset, size uint64, allowHoles bool, returnIds boo
704700
return curOffset < endOffset
705701
})
706702
if err == nil && curOffset < endOffset {
707-
if allowHoles {
708-
data = appendZero(data, endOffset-curOffset)
709-
} else {
710-
data = nil
711-
err = syscall.EIO
712-
return
713-
}
703+
data = nil
704+
err = ErrBufferIsMissing
705+
return
714706
}
715707
return
716708
}

internal/buffer_list_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func (s *BufferListTest) TestAppend(t *C) {
3636
t.Assert(l.Add(0, filledBuf(1024, 1), BUF_DIRTY, true), Equals, int64(1024))
3737
t.Assert(l.Add(1024, filledBuf(1024, 2), BUF_DIRTY, true), Equals, int64(1024))
3838
t.Assert(l.Add(1536, filledBuf(1024, 3), BUF_DIRTY, true), Equals, int64(1024))
39-
data, _, err := l.GetData(0, 2048, false, true)
39+
data, _, err := l.GetData(0, 2048, true)
4040
t.Assert(err, IsNil)
4141
t.Assert(len(data), Equals, 1)
4242
t.Assert(len(data[0]), Equals, 2048)
@@ -51,7 +51,7 @@ func (s *BufferListTest) TestGetHoles(t *C) {
5151
}
5252
t.Assert(l.Add(0, make([]byte, 1024), BUF_DIRTY, false), Equals, int64(1024))
5353
t.Assert(l.Add(1024, make([]byte, 1024), BUF_DIRTY, false), Equals, int64(1024))
54-
data, ids, err := l.GetData(0, 2048, false, true)
54+
data, ids, err := l.GetData(0, 2048, true)
5555
t.Assert(err, IsNil)
5656
t.Assert(len(data), Equals, 2)
5757
t.Assert(len(data[0]), Equals, 1024)

internal/file.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -349,11 +349,11 @@ func (inode *Inode) LoadRange(offset, size uint64, readAheadSize uint64, ignoreM
349349
// Wait for the data to load
350350
if len(readRanges) > 0 || loading {
351351
for {
352-
_, _, err := inode.buffers.GetData(offset, size, false, false)
353-
if err == syscall.EAGAIN {
352+
_, _, err := inode.buffers.GetData(offset, size, false)
353+
if err == ErrBufferIsLoading {
354354
// still loading
355355
inode.readCond.Wait()
356-
} else if err == syscall.EIO {
356+
} else if err == ErrBufferIsMissing {
357357
// loading buffer disappeared => read error
358358
err = inode.readError
359359
if err == nil {
@@ -607,7 +607,7 @@ func (fh *FileHandle) ReadFile(sOffset int64, sLen int64) (data [][]byte, bytesR
607607
}
608608

609609
// return cached buffers directly without copying
610-
data, _, err = fh.inode.buffers.GetData(offset, size, false, false)
610+
data, _, err = fh.inode.buffers.GetData(offset, size, false)
611611
if err != nil && requestErr != nil {
612612
return nil, 0, requestErr
613613
} else if err != nil {
@@ -643,8 +643,7 @@ func (fh *FileHandle) Release() {
643643
func (inode *Inode) getMultiReader(offset, size uint64) (reader *MultiReader, ids map[uint64]bool, err error) {
644644
inode.buffers.SplitAt(offset)
645645
inode.buffers.SplitAt(offset+size)
646-
// FIXME: Do not allow holes here too
647-
data, ids, err := inode.buffers.GetData(offset, size, true, true)
646+
data, ids, err := inode.buffers.GetData(offset, size, true)
648647
if err != nil {
649648
return nil, nil, err
650649
}

0 commit comments

Comments
 (0)