Browse Source

go imports

`Needle.ReadNeedleBody` add CRC check and warning
pull/283/head
tnextday 10 years ago
parent
commit
a74e2bed2c
  1. 2
      go/filer/flat_namespace/flat_namespace_store.go
  2. 2
      go/storage/needle.go
  3. 8
      go/storage/needle_read_write.go
  4. 3
      go/storage/volume_info.go
  5. 3
      go/storage/volume_sync.go

2
go/filer/flat_namespace/flat_namespace_store.go

@ -1,7 +1,5 @@
package flat_namespace package flat_namespace
import ()
type FlatNamespaceStore interface { type FlatNamespaceStore interface {
Put(fullFileName string, fid string) (err error) Put(fullFileName string, fid string) (err error)
Get(fullFileName string) (fid string, err error) Get(fullFileName string) (fid string, err error)

2
go/storage/needle.go

@ -14,8 +14,8 @@ import (
"github.com/chrislusf/seaweedfs/go/glog" "github.com/chrislusf/seaweedfs/go/glog"
"github.com/chrislusf/seaweedfs/go/images" "github.com/chrislusf/seaweedfs/go/images"
"github.com/chrislusf/seaweedfs/go/util"
"github.com/chrislusf/seaweedfs/go/operation" "github.com/chrislusf/seaweedfs/go/operation"
"github.com/chrislusf/seaweedfs/go/util"
) )
const ( const (

8
go/storage/needle_read_write.go

@ -238,6 +238,10 @@ func (n *Needle) ReadNeedleBody(r *os.File, version Version, offset int64, bodyL
} }
n.Data = bytes[:n.Size] n.Data = bytes[:n.Size]
n.Checksum = NewCRC(n.Data) n.Checksum = NewCRC(n.Data)
checksum := util.BytesToUint32(bytes[n.Size : n.Size+NeedleChecksumSize])
if n.Checksum.Value() != checksum {
glog.V(0).Infof("CRC error! Data On Disk Corrupted, needle id = %x", n.Id)
}
case Version2: case Version2:
bytes := make([]byte, bodyLength) bytes := make([]byte, bodyLength)
if _, err = r.ReadAt(bytes, offset); err != nil { if _, err = r.ReadAt(bytes, offset); err != nil {
@ -245,6 +249,10 @@ func (n *Needle) ReadNeedleBody(r *os.File, version Version, offset int64, bodyL
} }
n.readNeedleDataVersion2(bytes[0:n.Size]) n.readNeedleDataVersion2(bytes[0:n.Size])
n.Checksum = NewCRC(n.Data) n.Checksum = NewCRC(n.Data)
checksum := util.BytesToUint32(bytes[n.Size : n.Size+NeedleChecksumSize])
if n.Checksum.Value() != checksum {
glog.V(0).Infof("CRC error! Data On Disk Corrupted, needle id = %x", n.Id)
}
default: default:
err = fmt.Errorf("Unsupported Version! (%d)", version) err = fmt.Errorf("Unsupported Version! (%d)", version)
} }

3
go/storage/volume_info.go

@ -2,8 +2,9 @@ package storage
import ( import (
"fmt" "fmt"
"github.com/chrislusf/seaweedfs/go/operation"
"sort" "sort"
"github.com/chrislusf/seaweedfs/go/operation"
) )
type VolumeInfo struct { type VolumeInfo struct {

3
go/storage/volume_sync.go

@ -202,6 +202,9 @@ func (v *Volume) fetchNeedle(volumeDataContentHandlerUrl string,
if err != nil { if err != nil {
return fmt.Errorf("Reading from %s error: %v", volumeDataContentHandlerUrl, err) return fmt.Errorf("Reading from %s error: %v", volumeDataContentHandlerUrl, err)
} }
if needleValue.Size != uint32(len(b)) {
return fmt.Errorf("Reading from %s error: size incorrect", volumeDataContentHandlerUrl)
}
offset, err := v.AppendBlob(b) offset, err := v.AppendBlob(b)
if err != nil { if err != nil {
return fmt.Errorf("Appending volume %d error: %v", v.Id, err) return fmt.Errorf("Appending volume %d error: %v", v.Id, err)

Loading…
Cancel
Save