aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Hartig <fastest963@gmail.com>2020-07-22 11:38:48 -0400
committerJames Hartig <fastest963@gmail.com>2020-07-22 15:01:16 -0400
commit0be3bb4a87a511bc7d46af67ab82d8ec07481b4b (patch)
treef0f078eea260027f920636afc0949326fda249e9
parent7a7e70b6cc2bbcd729bd58824dd16981cacedacb (diff)
downloadseaweedfs-0be3bb4a87a511bc7d46af67ab82d8ec07481b4b.tar.xz
seaweedfs-0be3bb4a87a511bc7d46af67ab82d8ec07481b4b.zip
idx: Switch WalkIndexFile to accept generic io.ReaderAt
This is necessary to use it with in-memory idx files.
-rw-r--r--weed/storage/idx/walk.go12
1 files changed, 9 insertions, 3 deletions
diff --git a/weed/storage/idx/walk.go b/weed/storage/idx/walk.go
index 90efb75e6..f785ec706 100644
--- a/weed/storage/idx/walk.go
+++ b/weed/storage/idx/walk.go
@@ -11,11 +11,17 @@ import (
// walks through the index file, calls fn function with each key, offset, size
// stops with the error returned by the fn function
-func WalkIndexFile(r *os.File, fn func(key types.NeedleId, offset types.Offset, size uint32) error) error {
+func WalkIndexFile(r io.ReaderAt, fn func(key types.NeedleId, offset types.Offset, size uint32) error) error {
var readerOffset int64
bytes := make([]byte, types.NeedleMapEntrySize*RowsToRead)
count, e := r.ReadAt(bytes, readerOffset)
- glog.V(3).Infoln("file", r.Name(), "readerOffset", readerOffset, "count", count, "e", e)
+ var name string
+ if f, ok := r.(*os.File); ok {
+ name = f.Name()
+ } else {
+ name = "memory"
+ }
+ glog.V(3).Infoln("file", name, "readerOffset", readerOffset, "count", count, "e", e)
readerOffset += int64(count)
var (
key types.NeedleId
@@ -35,7 +41,7 @@ func WalkIndexFile(r *os.File, fn func(key types.NeedleId, offset types.Offset,
return nil
}
count, e = r.ReadAt(bytes, readerOffset)
- glog.V(3).Infoln("file", r.Name(), "readerOffset", readerOffset, "count", count, "e", e)
+ glog.V(3).Infoln("file", name, "readerOffset", readerOffset, "count", count, "e", e)
readerOffset += int64(count)
}
return e