mirror of
https://github.com/ipfs/kubo.git
synced 2025-07-02 03:28:25 +08:00
filestore: use the same codes in ListRes and CorruptReferenceError.
License: MIT Signed-off-by: Kevin Atkinson <k@kevina.org>
This commit is contained in:
@ -27,17 +27,8 @@ type FileManager struct {
|
|||||||
root string
|
root string
|
||||||
}
|
}
|
||||||
|
|
||||||
type CorruptReferenceCode int
|
|
||||||
|
|
||||||
const (
|
|
||||||
OtherErr CorruptReferenceCode = 0
|
|
||||||
FileError CorruptReferenceCode = 1
|
|
||||||
FileMissing CorruptReferenceCode = 2
|
|
||||||
FileChanged CorruptReferenceCode = 3
|
|
||||||
)
|
|
||||||
|
|
||||||
type CorruptReferenceError struct {
|
type CorruptReferenceError struct {
|
||||||
Code CorruptReferenceCode
|
Code Status
|
||||||
Err error
|
Err error
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,23 +129,23 @@ func (f *FileManager) readDataObj(c *cid.Cid, d *pb.DataObj) ([]byte, error) {
|
|||||||
|
|
||||||
fi, err := os.Open(abspath)
|
fi, err := os.Open(abspath)
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
return nil, &CorruptReferenceError{FileMissing, err}
|
return nil, &CorruptReferenceError{StatusFileNotFound, err}
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
return nil, &CorruptReferenceError{FileError, err}
|
return nil, &CorruptReferenceError{StatusFileError, err}
|
||||||
}
|
}
|
||||||
defer fi.Close()
|
defer fi.Close()
|
||||||
|
|
||||||
_, err = fi.Seek(int64(d.GetOffset()), os.SEEK_SET)
|
_, err = fi.Seek(int64(d.GetOffset()), os.SEEK_SET)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, &CorruptReferenceError{FileError, err}
|
return nil, &CorruptReferenceError{StatusFileError, err}
|
||||||
}
|
}
|
||||||
|
|
||||||
outbuf := make([]byte, d.GetSize_())
|
outbuf := make([]byte, d.GetSize_())
|
||||||
_, err = io.ReadFull(fi, outbuf)
|
_, err = io.ReadFull(fi, outbuf)
|
||||||
if err == io.EOF || err == io.ErrUnexpectedEOF {
|
if err == io.EOF || err == io.ErrUnexpectedEOF {
|
||||||
return nil, &CorruptReferenceError{FileChanged, err}
|
return nil, &CorruptReferenceError{StatusFileChanged, err}
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
return nil, &CorruptReferenceError{FileError, err}
|
return nil, &CorruptReferenceError{StatusFileError, err}
|
||||||
}
|
}
|
||||||
|
|
||||||
outcid, err := c.Prefix().Sum(outbuf)
|
outcid, err := c.Prefix().Sum(outbuf)
|
||||||
@ -163,7 +154,7 @@ func (f *FileManager) readDataObj(c *cid.Cid, d *pb.DataObj) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !c.Equals(outcid) {
|
if !c.Equals(outcid) {
|
||||||
return nil, &CorruptReferenceError{FileChanged,
|
return nil, &CorruptReferenceError{StatusFileChanged,
|
||||||
fmt.Errorf("data in file did not match. %s offset %d", d.GetFilePath(), d.GetOffset())}
|
fmt.Errorf("data in file did not match. %s offset %d", d.GetFilePath(), d.GetOffset())}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,16 +144,7 @@ func mkListRes(c *cid.Cid, d *pb.DataObj, err error) *ListRes {
|
|||||||
if err == ds.ErrNotFound || err == blockstore.ErrNotFound {
|
if err == ds.ErrNotFound || err == blockstore.ErrNotFound {
|
||||||
status = StatusKeyNotFound
|
status = StatusKeyNotFound
|
||||||
} else if err, ok := err.(*CorruptReferenceError); ok {
|
} else if err, ok := err.(*CorruptReferenceError); ok {
|
||||||
switch err.Code {
|
status = err.Code
|
||||||
case FileError:
|
|
||||||
status = StatusFileError
|
|
||||||
case FileMissing:
|
|
||||||
status = StatusFileNotFound
|
|
||||||
case FileChanged:
|
|
||||||
status = StatusFileChanged
|
|
||||||
default:
|
|
||||||
status = StatusOtherError
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
status = StatusOtherError
|
status = StatusOtherError
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user