featurebase/dax/storage/util.go
2022-12-14 14:23:12 -06:00

24 lines
536 B
Go

package storage
import "io"
// trackingReader wraps a Reader and calls an custom "update" function
// whenever Read is called. Used by the storage layer to keep track of
// how much of the writelog has been read.
type trackingReader struct {
r io.Reader
update func(int, error)
}
func (tr *trackingReader) Read(p []byte) (n int, err error) {
n, err = tr.r.Read(p)
tr.update(n, err)
return n, err
}
func (tr *trackingReader) Close() error {
if closer, ok := tr.r.(io.Closer); ok {
return closer.Close()
}
return nil
}