Browse Source

adding file count and deletion count

pull/2/head
Chris Lu 12 years ago
parent
commit
6b1e60582c
  1. 10
      weed-fs/src/pkg/storage/needle_map.go
  2. 4
      weed-fs/src/pkg/storage/store.go
  3. 2
      weed-fs/src/pkg/storage/volume_info.go
  4. 26
      weed-fs/src/pkg/topology/node.go

10
weed-fs/src/pkg/storage/needle_map.go

@ -9,7 +9,11 @@ import (
type NeedleMap struct { type NeedleMap struct {
indexFile *os.File indexFile *os.File
m CompactMap m CompactMap
bytes []byte
//transient
bytes []byte
deletionCounter int
fileCounter int
} }
func NewNeedleMap(file *os.File) *NeedleMap { func NewNeedleMap(file *os.File) *NeedleMap {
@ -40,8 +44,10 @@ func LoadNeedleMap(file *os.File) *NeedleMap {
size := util.BytesToUint32(bytes[i+12 : i+16]) size := util.BytesToUint32(bytes[i+12 : i+16])
if offset > 0 { if offset > 0 {
nm.m.Set(Key(key), offset, size) nm.m.Set(Key(key), offset, size)
nm.fileCounter++
} else { } else {
nm.m.Delete(Key(key)) nm.m.Delete(Key(key))
nm.deletionCounter++
} }
} }
@ -55,6 +61,7 @@ func (nm *NeedleMap) Put(key uint64, offset uint32, size uint32) (int, error) {
util.Uint64toBytes(nm.bytes[0:8], key) util.Uint64toBytes(nm.bytes[0:8], key)
util.Uint32toBytes(nm.bytes[8:12], offset) util.Uint32toBytes(nm.bytes[8:12], offset)
util.Uint32toBytes(nm.bytes[12:16], size) util.Uint32toBytes(nm.bytes[12:16], size)
nm.fileCounter++
return nm.indexFile.Write(nm.bytes) 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) {
@ -67,6 +74,7 @@ func (nm *NeedleMap) Delete(key uint64) {
util.Uint32toBytes(nm.bytes[8:12], 0) util.Uint32toBytes(nm.bytes[8:12], 0)
util.Uint32toBytes(nm.bytes[12:16], 0) util.Uint32toBytes(nm.bytes[12:16], 0)
nm.indexFile.Write(nm.bytes) nm.indexFile.Write(nm.bytes)
nm.deletionCounter++
} }
func (nm *NeedleMap) Close() { func (nm *NeedleMap) Close() {
nm.indexFile.Close() nm.indexFile.Close()

4
weed-fs/src/pkg/storage/store.go

@ -89,7 +89,7 @@ func (s *Store) Status() []*VolumeInfo {
var stats []*VolumeInfo var stats []*VolumeInfo
for k, v := range s.volumes { for k, v := range s.volumes {
s := new(VolumeInfo) s := new(VolumeInfo)
s.Id, s.Size, s.RepType = VolumeId(k), v.Size(), v.replicaType
s.Id, s.Size, s.RepType, s.FileCount, s.DeleteCount = VolumeId(k), v.Size(), v.replicaType, v.nm.fileCounter, v.nm.deletionCounter
stats = append(stats, s) stats = append(stats, s)
} }
return stats return stats
@ -98,7 +98,7 @@ func (s *Store) Join(mserver string) error {
stats := new([]*VolumeInfo) stats := new([]*VolumeInfo)
for k, v := range s.volumes { for k, v := range s.volumes {
s := new(VolumeInfo) s := new(VolumeInfo)
s.Id, s.Size, s.RepType = VolumeId(k), v.Size(), v.replicaType
s.Id, s.Size, s.RepType, s.FileCount, s.DeleteCount = VolumeId(k), v.Size(), v.replicaType, v.nm.fileCounter, v.nm.deletionCounter
*stats = append(*stats, s) *stats = append(*stats, s)
} }
bytes, _ := json.Marshal(stats) bytes, _ := json.Marshal(stats)

2
weed-fs/src/pkg/storage/volume_info.go

@ -8,6 +8,8 @@ type VolumeInfo struct {
Id VolumeId Id VolumeId
Size int64 Size int64
RepType ReplicationType RepType ReplicationType
FileCount int
DeleteCount int
} }
type ReplicationType string type ReplicationType string

26
weed-fs/src/pkg/topology/node.go

@ -14,6 +14,7 @@ type Node interface {
UpAdjustMaxVolumeCountDelta(maxVolumeCountDelta int) UpAdjustMaxVolumeCountDelta(maxVolumeCountDelta int)
UpAdjustActiveVolumeCountDelta(activeVolumeCountDelta int) UpAdjustActiveVolumeCountDelta(activeVolumeCountDelta int)
UpAdjustMaxVolumeId(vid storage.VolumeId) UpAdjustMaxVolumeId(vid storage.VolumeId)
GetActiveVolumeCount() int GetActiveVolumeCount() int
GetMaxVolumeCount() int GetMaxVolumeCount() int
GetMaxVolumeId() storage.VolumeId GetMaxVolumeId() storage.VolumeId
@ -26,7 +27,7 @@ type Node interface {
Children() map[NodeId]Node Children() map[NodeId]Node
Parent() Node Parent() Node
GetValue()interface{} //get reference to the topology,dc,rack,datanode
GetValue() interface{} //get reference to the topology,dc,rack,datanode
} }
type NodeImpl struct { type NodeImpl struct {
id NodeId id NodeId
@ -38,7 +39,7 @@ type NodeImpl struct {
//for rack, data center, topology //for rack, data center, topology
nodeType string nodeType string
value interface{}
value interface{}
} }
func (n *NodeImpl) IsDataNode() bool { func (n *NodeImpl) IsDataNode() bool {
@ -71,8 +72,8 @@ func (n *NodeImpl) Children() map[NodeId]Node {
func (n *NodeImpl) Parent() Node { func (n *NodeImpl) Parent() Node {
return n.parent return n.parent
} }
func (n *NodeImpl) GetValue()interface{}{
return n.value
func (n *NodeImpl) GetValue() interface{} {
return n.value
} }
func (n *NodeImpl) ReserveOneVolume(r int, vid storage.VolumeId) (bool, *DataNode) { func (n *NodeImpl) ReserveOneVolume(r int, vid storage.VolumeId) (bool, *DataNode) {
ret := false ret := false
@ -119,7 +120,6 @@ func (n *NodeImpl) UpAdjustMaxVolumeId(vid storage.VolumeId) { //can be negative
} }
} }
} }
func (n *NodeImpl) GetMaxVolumeId() storage.VolumeId { func (n *NodeImpl) GetMaxVolumeId() storage.VolumeId {
return n.maxVolumeId return n.maxVolumeId
} }
@ -164,7 +164,7 @@ func (n *NodeImpl) CollectDeadNodeAndFullVolumes(freshThreshHold int64, volumeSi
} }
for _, v := range dn.volumes { for _, v := range dn.volumes {
if uint64(v.Size) >= volumeSizeLimit { if uint64(v.Size) >= volumeSizeLimit {
n.GetTopology().chanFullVolumes <- &v
n.GetTopology().chanFullVolumes <- &v
} }
} }
} }
@ -175,11 +175,11 @@ func (n *NodeImpl) CollectDeadNodeAndFullVolumes(freshThreshHold int64, volumeSi
} }
} }
func (n *NodeImpl) GetTopology() *Topology{
var p Node
p = n
for p.Parent() != nil {
p = p.Parent()
}
return p.GetValue().(*Topology)
func (n *NodeImpl) GetTopology() *Topology {
var p Node
p = n
for p.Parent() != nil {
p = p.Parent()
}
return p.GetValue().(*Topology)
} }
Loading…
Cancel
Save