diff options
| author | bingoohuang <bingoo.huang@gmail.com> | 2019-01-16 17:48:59 +0800 |
|---|---|---|
| committer | bingoohuang <bingoo.huang@gmail.com> | 2019-01-16 17:48:59 +0800 |
| commit | 6ddfaf33cba953b92a5e3383a15bf26ab1845dbc (patch) | |
| tree | 5e98a7f62939582459b52c0ff02b956bddbd9587 /weed/storage/volume_read_write.go | |
| parent | 27093bc2e5cf3d61149e5eda14b98b1e527e5a28 (diff) | |
| download | seaweedfs-6ddfaf33cba953b92a5e3383a15bf26ab1845dbc.tar.xz seaweedfs-6ddfaf33cba953b92a5e3383a15bf26ab1845dbc.zip | |
extract VolumeFileScanner for ScanVolumeFile
Diffstat (limited to 'weed/storage/volume_read_write.go')
| -rw-r--r-- | weed/storage/volume_read_write.go | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/weed/storage/volume_read_write.go b/weed/storage/volume_read_write.go index 66f90634f..ed9729c84 100644 --- a/weed/storage/volume_read_write.go +++ b/weed/storage/volume_read_write.go @@ -169,16 +169,20 @@ func (v *Volume) readNeedle(n *Needle) (int, error) { return -1, ErrorNotFound } +type VolumeFileScanner interface { + VisitSuperBlock(SuperBlock) error + ReadNeedleBody() bool + VisitNeedle(n *Needle, offset int64) error +} + func ScanVolumeFile(dirname string, collection string, id VolumeId, needleMapKind NeedleMapType, - visitSuperBlock func(SuperBlock) error, - readNeedleBody bool, - visitNeedle func(n *Needle, offset int64) error) (err error) { + volumeFileScanner VolumeFileScanner) (err error) { var v *Volume if v, err = loadVolumeWithoutIndex(dirname, collection, id, needleMapKind); err != nil { return fmt.Errorf("Failed to load volume %d: %v", id, err) } - if err = visitSuperBlock(v.SuperBlock); err != nil { + if err = volumeFileScanner.VisitSuperBlock(v.SuperBlock); err != nil { return fmt.Errorf("Failed to process volume %d super block: %v", id, err) } defer v.Close() @@ -192,14 +196,14 @@ func ScanVolumeFile(dirname string, collection string, id VolumeId, return } for n != nil { - if readNeedleBody { + if volumeFileScanner.ReadNeedleBody() { if err = n.ReadNeedleBody(v.dataFile, version, offset+NeedleEntrySize, rest); err != nil { glog.V(0).Infof("cannot read needle body: %v", err) //err = fmt.Errorf("cannot read needle body: %v", err) //return } } - err = visitNeedle(n, offset) + err = volumeFileScanner.VisitNeedle(n, offset) if err == io.EOF { return nil } |
