diff options
| author | Chris Lu <chris.lu@gmail.com> | 2019-10-29 00:35:16 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2019-10-29 00:35:16 -0700 |
| commit | 19b6a16003325ec93bb0e261d5a9c08cd3e03cad (patch) | |
| tree | bd0c38a7dec60904418173a8f0825e63f965d255 /weed/storage/volume_super_block.go | |
| parent | eb2172f63fcdf7f5455c142daaceb6b1a489f7f4 (diff) | |
| download | seaweedfs-19b6a16003325ec93bb0e261d5a9c08cd3e03cad.tar.xz seaweedfs-19b6a16003325ec93bb0e261d5a9c08cd3e03cad.zip | |
changed from os.file to backend.DataStorageBackend
Diffstat (limited to 'weed/storage/volume_super_block.go')
| -rw-r--r-- | weed/storage/volume_super_block.go | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/weed/storage/volume_super_block.go b/weed/storage/volume_super_block.go index cb34a2347..fe357a988 100644 --- a/weed/storage/volume_super_block.go +++ b/weed/storage/volume_super_block.go @@ -4,6 +4,7 @@ import ( "fmt" "os" + "github.com/chrislusf/seaweedfs/weed/storage/backend" "github.com/chrislusf/seaweedfs/weed/storage/backend/memory_map" "github.com/chrislusf/seaweedfs/weed/glog" @@ -77,7 +78,7 @@ func (s *SuperBlock) Initialized() bool { func (v *Volume) maybeWriteSuperBlock() error { - mMap, exists := memory_map.FileMemoryMap[v.dataFile.Name()] + mMap, exists := memory_map.FileMemoryMap[v.DataBackend.String()] if exists { if mMap.End_of_file == -1 { v.SuperBlock.version = needle.CurrentVersion @@ -85,18 +86,20 @@ func (v *Volume) maybeWriteSuperBlock() error { } return nil } else { - stat, e := v.dataFile.Stat() + datSize, _, e := v.DataBackend.GetStat() if e != nil { - glog.V(0).Infof("failed to stat datafile %s: %v", v.dataFile.Name(), e) + glog.V(0).Infof("failed to stat datafile %s: %v", v.DataBackend.String(), e) return e } - if stat.Size() == 0 { + if datSize == 0 { v.SuperBlock.version = needle.CurrentVersion - _, e = v.dataFile.WriteAt(v.SuperBlock.Bytes(), 0) + _, e = v.DataBackend.WriteAt(v.SuperBlock.Bytes(), 0) if e != nil && os.IsPermission(e) { //read-only, but zero length - recreate it! - if v.dataFile, e = os.Create(v.dataFile.Name()); e == nil { - if _, e = v.dataFile.Write(v.SuperBlock.Bytes()); e == nil { + var dataFile *os.File + if dataFile, e = os.Create(v.DataBackend.String()); e == nil { + v.DataBackend = backend.NewDiskFile(v.DataBackend.String(), dataFile) + if _, e = v.DataBackend.WriteAt(v.SuperBlock.Bytes(), 0); e == nil { v.readOnly = false } } @@ -107,24 +110,24 @@ func (v *Volume) maybeWriteSuperBlock() error { } func (v *Volume) readSuperBlock() (err error) { - v.SuperBlock, err = ReadSuperBlock(v.dataFile) + v.SuperBlock, err = ReadSuperBlock(v.DataBackend) return err } // ReadSuperBlock reads from data file and load it into volume's super block -func ReadSuperBlock(dataFile *os.File) (superBlock SuperBlock, err error) { +func ReadSuperBlock(datBackend backend.DataStorageBackend) (superBlock SuperBlock, err error) { header := make([]byte, _SuperBlockSize) - mMap, exists := memory_map.FileMemoryMap[dataFile.Name()] + mMap, exists := memory_map.FileMemoryMap[datBackend.String()] if exists { header, err = mMap.ReadMemory(0, _SuperBlockSize) if err != nil { - err = fmt.Errorf("cannot read volume %s super block: %v", dataFile.Name(), err) + err = fmt.Errorf("cannot read volume %s super block: %v", datBackend.String(), err) return } } else { - if _, e := dataFile.ReadAt(header, 0); e != nil { - err = fmt.Errorf("cannot read volume %s super block: %v", dataFile.Name(), e) + if _, e := datBackend.ReadAt(header, 0); e != nil { + err = fmt.Errorf("cannot read volume %s super block: %v", datBackend.String(), e) return } } @@ -144,7 +147,7 @@ func ReadSuperBlock(dataFile *os.File) (superBlock SuperBlock, err error) { superBlock.Extra = &master_pb.SuperBlockExtra{} err = proto.Unmarshal(extraData, superBlock.Extra) if err != nil { - err = fmt.Errorf("cannot read volume %s super block extra: %v", dataFile.Name(), err) + err = fmt.Errorf("cannot read volume %s super block extra: %v", datBackend.String(), err) return } } |
