aboutsummaryrefslogtreecommitdiff
path: root/go
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2014-05-31 17:10:51 -0700
committerChris Lu <chris.lu@gmail.com>2014-05-31 17:10:51 -0700
commit4b7b439be92b4e0f944ce59b63c7d03f53b965ea (patch)
tree10481bf0469e5dcb2ba45766f1ddb79c58511dae /go
parent08cbb2c3457010b3278dd3cf6767de930baace3c (diff)
downloadseaweedfs-4b7b439be92b4e0f944ce59b63c7d03f53b965ea.tar.xz
seaweedfs-4b7b439be92b4e0f944ce59b63c7d03f53b965ea.zip
Reduce memory usage for "weed fix"
Diffstat (limited to 'go')
-rw-r--r--go/storage/volume.go9
-rw-r--r--go/storage/volume_vacuum.go2
-rw-r--r--go/weed/export.go2
-rw-r--r--go/weed/fix.go2
4 files changed, 9 insertions, 6 deletions
diff --git a/go/storage/volume.go b/go/storage/volume.go
index 937798649..7bd8e7467 100644
--- a/go/storage/volume.go
+++ b/go/storage/volume.go
@@ -309,6 +309,7 @@ func (v *Volume) freeze() error {
func ScanVolumeFile(dirname string, collection string, id VolumeId,
visitSuperBlock func(SuperBlock) error,
+ readNeedleBody bool,
visitNeedle func(n *Needle, offset int64) error) (err error) {
var v *Volume
if v, err = loadVolumeWithoutIndex(dirname, collection, id); err != nil {
@@ -327,9 +328,11 @@ func ScanVolumeFile(dirname string, collection string, id VolumeId,
return
}
for n != nil {
- if err = n.ReadNeedleBody(v.dataFile, version, offset+int64(NeedleHeaderSize), rest); err != nil {
- err = fmt.Errorf("cannot read needle body: %s", err)
- return
+ if readNeedleBody {
+ if err = n.ReadNeedleBody(v.dataFile, version, offset+int64(NeedleHeaderSize), rest); err != nil {
+ err = fmt.Errorf("cannot read needle body: %s", err)
+ return
+ }
}
if err = visitNeedle(n, offset); err != nil {
return
diff --git a/go/storage/volume_vacuum.go b/go/storage/volume_vacuum.go
index 9ccf9f588..7d2a38cb8 100644
--- a/go/storage/volume_vacuum.go
+++ b/go/storage/volume_vacuum.go
@@ -62,7 +62,7 @@ func (v *Volume) copyDataAndGenerateIndexFile(dstName, idxName string) (err erro
err = ScanVolumeFile(v.dir, v.Collection, v.Id, func(superBlock SuperBlock) error {
_, err = dst.Write(superBlock.Bytes())
return err
- }, func(n *Needle, offset int64) error {
+ }, true, func(n *Needle, offset int64) error {
nv, ok := v.nm.Get(n.Id)
glog.V(4).Infoln("needle expected offset ", offset, "ok", ok, "nv", nv)
if ok && int64(nv.Offset)*NeedlePaddingSize == offset && nv.Size > 0 {
diff --git a/go/weed/export.go b/go/weed/export.go
index dae6053c7..3f8ff85bb 100644
--- a/go/weed/export.go
+++ b/go/weed/export.go
@@ -102,7 +102,7 @@ func runExport(cmd *Command, args []string) bool {
err = storage.ScanVolumeFile(*exportVolumePath, *exportCollection, vid, func(superBlock storage.SuperBlock) error {
version = superBlock.Version
return nil
- }, func(n *storage.Needle, offset int64) error {
+ }, true, func(n *storage.Needle, offset int64) error {
nv, ok := nm.Get(n.Id)
glog.V(3).Infoln("key", n.Id, "offset", offset, "size", n.Size, "disk_size", n.DiskSize(), "gzip", n.IsGzipped(), "ok", ok, "nv", nv)
if ok && nv.Size > 0 {
diff --git a/go/weed/fix.go b/go/weed/fix.go
index 3c09727c1..02147d796 100644
--- a/go/weed/fix.go
+++ b/go/weed/fix.go
@@ -49,7 +49,7 @@ func runFix(cmd *Command, args []string) bool {
vid := storage.VolumeId(*fixVolumeId)
err = storage.ScanVolumeFile(*fixVolumePath, *fixVolumeCollection, vid, func(superBlock storage.SuperBlock) error {
return nil
- }, func(n *storage.Needle, offset int64) error {
+ }, false, func(n *storage.Needle, offset int64) error {
debug("key", n.Id, "offset", offset, "size", n.Size, "disk_size", n.DiskSize(), "gzip", n.IsGzipped())
if n.Size > 0 {
count, pe := nm.Put(n.Id, uint32(offset/storage.NeedlePaddingSize), n.Size)