From 98022f2b3d7dec146d3b5c058e94ac82e4aa6530 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 27 Sep 2012 21:46:32 -0700 Subject: [PATCH] use NeedleValue directly instead of additional pointer, to reduce memory usage --- weed-fs/src/pkg/storage/needle_map.go | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/weed-fs/src/pkg/storage/needle_map.go b/weed-fs/src/pkg/storage/needle_map.go index b92da7de1..4e6406d6a 100644 --- a/weed-fs/src/pkg/storage/needle_map.go +++ b/weed-fs/src/pkg/storage/needle_map.go @@ -13,13 +13,13 @@ type NeedleValue struct { type NeedleMap struct { indexFile *os.File - m map[uint64]*NeedleValue //mapping needle key(uint64) to NeedleValue + m map[uint64]NeedleValue //mapping needle key(uint64) to NeedleValue bytes []byte } func NewNeedleMap(file *os.File) *NeedleMap { nm := &NeedleMap{ - m: make(map[uint64]*NeedleValue), + m: make(map[uint64]NeedleValue), bytes: make([]byte, 16), indexFile: file, } @@ -44,25 +44,25 @@ func LoadNeedleMap(file *os.File) *NeedleMap { offset := util.BytesToUint32(bytes[i+8 : i+12]) size := util.BytesToUint32(bytes[i+12 : i+16]) if offset>0 { - nm.m[key] = &NeedleValue{util.Offset: offset, Size: size} + nm.m[key] = NeedleValue{util.Offset: offset, Size: size} }else{ delete(nm.m, key) } } count, e = nm.indexFile.Read(bytes) - } + } return nm } func (nm *NeedleMap) Put(key uint64, offset uint32, size uint32) (int, error) { - nm.m[key] = &NeedleValue{Offset: offset, Size: size} + nm.m[key] = NeedleValue{Offset: offset, Size: size} util.Uint64toBytes(nm.bytes[0:8], key) util.Uint32toBytes(nm.bytes[8:12], offset) util.Uint32toBytes(nm.bytes[12:16], size) return nm.indexFile.Write(nm.bytes) } -func (nm *NeedleMap) Get(key uint64) (element *NeedleValue, ok bool) { +func (nm *NeedleMap) Get(key uint64) (element NeedleValue, ok bool) { element, ok = nm.m[key] return } @@ -76,3 +76,6 @@ func (nm *NeedleMap) Delete(key uint64) { func (nm *NeedleMap) Close() { nm.indexFile.Close() } +func (nm *NeedleMap) Length() int{ + return len(nm.m) +}