mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-06-28 15:41:13 +08:00
adding file count and deletion count
This commit is contained in:
parent
8e25cc74d1
commit
6b1e60582c
@ -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()
|
||||||
|
@ -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)
|
||||||
|
@ -21,7 +21,7 @@ type Volume struct {
|
|||||||
replicaType ReplicationType
|
replicaType ReplicationType
|
||||||
|
|
||||||
accessLock sync.Mutex
|
accessLock sync.Mutex
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewVolume(dirname string, id VolumeId, replicationType ReplicationType) (v *Volume) {
|
func NewVolume(dirname string, id VolumeId, replicationType ReplicationType) (v *Volume) {
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
@ -25,8 +26,8 @@ type Node interface {
|
|||||||
IsDataNode() bool
|
IsDataNode() bool
|
||||||
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{}{
|
func (n *NodeImpl) GetValue() interface{} {
|
||||||
return n.value
|
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{
|
func (n *NodeImpl) GetTopology() *Topology {
|
||||||
var p Node
|
var p Node
|
||||||
p = n
|
p = n
|
||||||
for p.Parent() != nil {
|
for p.Parent() != nil {
|
||||||
p = p.Parent()
|
p = p.Parent()
|
||||||
}
|
}
|
||||||
return p.GetValue().(*Topology)
|
return p.GetValue().(*Topology)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user