aboutsummaryrefslogtreecommitdiff
path: root/weed/topology/volume_layout.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/topology/volume_layout.go')
-rw-r--r--weed/topology/volume_layout.go29
1 files changed, 29 insertions, 0 deletions
diff --git a/weed/topology/volume_layout.go b/weed/topology/volume_layout.go
index 8c0a75140..b6044e29f 100644
--- a/weed/topology/volume_layout.go
+++ b/weed/topology/volume_layout.go
@@ -5,6 +5,7 @@ import (
"fmt"
"math/rand"
"sync"
+ "time"
"github.com/chrislusf/seaweedfs/weed/glog"
"github.com/chrislusf/seaweedfs/weed/storage"
@@ -22,6 +23,12 @@ type VolumeLayout struct {
accessLock sync.RWMutex
}
+type VolumeLayoutStats struct {
+ TotalSize uint64
+ UsedSize uint64
+ FileCount uint64
+}
+
func NewVolumeLayout(rp *storage.ReplicaPlacement, ttl *storage.TTL, volumeSizeLimit uint64) *VolumeLayout {
return &VolumeLayout{
rp: rp,
@@ -265,3 +272,25 @@ func (vl *VolumeLayout) ToMap() map[string]interface{} {
//m["locations"] = vl.vid2location
return m
}
+
+func (vl *VolumeLayout) Stats() *VolumeLayoutStats {
+ vl.accessLock.RLock()
+ defer vl.accessLock.RUnlock()
+
+ ret := &VolumeLayoutStats{}
+
+ freshThreshold := time.Now().Unix() - 60
+
+ for vid, vll := range vl.vid2location {
+ size, fileCount := vll.Stats(vid, freshThreshold)
+ ret.FileCount += uint64(fileCount)
+ ret.UsedSize += size
+ if vl.readonlyVolumes[vid] {
+ ret.TotalSize += size
+ } else {
+ ret.TotalSize += vl.volumeSizeLimit
+ }
+ }
+
+ return ret
+}