diff options
| author | Chris Lu <chrislusf@users.noreply.github.com> | 2025-08-02 02:16:49 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-02 02:16:49 -0700 |
| commit | 9d013ea9b8edbd6cf3030730a8a0ab02d00a47da (patch) | |
| tree | c7a78ef6e2e9ed5784b58568a89d9c86fff8e569 /weed/admin/dash/admin_data.go | |
| parent | 3d4e8409a53cf8103c9b93e2fde13be8e8652a25 (diff) | |
| download | seaweedfs-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.go | 28 |
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 |
