aboutsummaryrefslogtreecommitdiff
path: root/weed/admin/dash/admin_data.go
diff options
context:
space:
mode:
authorChris Lu <chrislusf@users.noreply.github.com>2025-08-02 02:16:49 -0700
committerGitHub <noreply@github.com>2025-08-02 02:16:49 -0700
commit9d013ea9b8edbd6cf3030730a8a0ab02d00a47da (patch)
treec7a78ef6e2e9ed5784b58568a89d9c86fff8e569 /weed/admin/dash/admin_data.go
parent3d4e8409a53cf8103c9b93e2fde13be8e8652a25 (diff)
downloadseaweedfs-9d013ea9b8edbd6cf3030730a8a0ab02d00a47da.tar.xz
seaweedfs-9d013ea9b8edbd6cf3030730a8a0ab02d00a47da.zip
Admin UI: include ec shard sizes into volume server info (#7071)
* show ec shards on dashboard, show max in its own column * master collect shard size info * master send shard size via VolumeList * change to more efficient shard sizes slice * include ec shard sizes into volume server info * Eliminated Redundant gRPC Calls * much more efficient * Efficient Counting: bits.OnesCount32() uses CPU-optimized instructions to count set bits in O(1) * avoid extra volume list call * simplify * preserve existing shard sizes * avoid hard coded value * Update weed/storage/erasure_coding/ec_volume_info.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update weed/admin/dash/volume_management.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update ec_volume_info.go * address comments * avoid duplicated functions * Update weed/admin/dash/volume_management.go Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> * simplify * refactoring * fix compilation --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Diffstat (limited to 'weed/admin/dash/admin_data.go')
-rw-r--r--weed/admin/dash/admin_data.go28
1 files changed, 27 insertions, 1 deletions
diff --git a/weed/admin/dash/admin_data.go b/weed/admin/dash/admin_data.go
index 7571bdf6a..b474437c4 100644
--- a/weed/admin/dash/admin_data.go
+++ b/weed/admin/dash/admin_data.go
@@ -23,6 +23,10 @@ type AdminData struct {
MessageBrokers []MessageBrokerNode `json:"message_brokers"`
DataCenters []DataCenter `json:"datacenters"`
LastUpdated time.Time `json:"last_updated"`
+
+ // EC shard totals for dashboard
+ TotalEcVolumes int `json:"total_ec_volumes"` // Total number of EC volumes across all servers
+ TotalEcShards int `json:"total_ec_shards"` // Total number of EC shards across all servers
}
// Object Store Users management structures
@@ -98,6 +102,13 @@ func (s *AdminServer) GetAdminData(username string) (AdminData, error) {
return AdminData{}, err
}
+ // Get volume servers data with EC shard information
+ volumeServersData, err := s.GetClusterVolumeServers()
+ if err != nil {
+ glog.Errorf("Failed to get cluster volume servers: %v", err)
+ return AdminData{}, err
+ }
+
// Get master nodes status
masterNodes := s.getMasterNodesStatus()
@@ -122,6 +133,19 @@ func (s *AdminServer) GetAdminData(username string) (AdminData, error) {
// Keep default value on error
}
+ // Calculate EC shard totals
+ var totalEcVolumes, totalEcShards int
+ ecVolumeSet := make(map[uint32]bool) // To avoid counting the same EC volume multiple times
+
+ for _, vs := range volumeServersData.VolumeServers {
+ totalEcShards += vs.EcShards
+ // Count unique EC volumes across all servers
+ for _, ecInfo := range vs.EcShardDetails {
+ ecVolumeSet[ecInfo.VolumeID] = true
+ }
+ }
+ totalEcVolumes = len(ecVolumeSet)
+
// Prepare admin data
adminData := AdminData{
Username: username,
@@ -130,11 +154,13 @@ func (s *AdminServer) GetAdminData(username string) (AdminData, error) {
TotalSize: topology.TotalSize,
VolumeSizeLimitMB: volumeSizeLimitMB,
MasterNodes: masterNodes,
- VolumeServers: topology.VolumeServers,
+ VolumeServers: volumeServersData.VolumeServers,
FilerNodes: filerNodes,
MessageBrokers: messageBrokers,
DataCenters: topology.DataCenters,
LastUpdated: topology.UpdatedAt,
+ TotalEcVolumes: totalEcVolumes,
+ TotalEcShards: totalEcShards,
}
return adminData, nil