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/shell/command_volume_list.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/shell/command_volume_list.go')
| -rw-r--r-- | weed/shell/command_volume_list.go | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/weed/shell/command_volume_list.go b/weed/shell/command_volume_list.go index 9872736a4..f57c7f5be 100644 --- a/weed/shell/command_volume_list.go +++ b/weed/shell/command_volume_list.go @@ -13,6 +13,7 @@ import ( "github.com/seaweedfs/seaweedfs/weed/pb/master_pb" "github.com/seaweedfs/seaweedfs/weed/storage/erasure_coding" "github.com/seaweedfs/seaweedfs/weed/storage/types" + "github.com/seaweedfs/seaweedfs/weed/util" "io" ) @@ -248,8 +249,27 @@ func (c *commandVolumeList) writeDiskInfo(writer io.Writer, t *master_pb.DiskInf if destroyTime > 0 { expireAtString = fmt.Sprintf("expireAt:%s", time.Unix(int64(destroyTime), 0).Format("2006-01-02 15:04:05")) } - output(verbosityLevel >= 5, writer, " ec volume id:%v collection:%v shards:%v %s\n", - ecShardInfo.Id, ecShardInfo.Collection, erasure_coding.ShardBits(ecShardInfo.EcIndexBits).ShardIds(), expireAtString) + + // Build shard size information + shardIds := erasure_coding.ShardBits(ecShardInfo.EcIndexBits).ShardIds() + var totalSize int64 + var shardSizeInfo string + + if len(ecShardInfo.ShardSizes) > 0 { + var shardDetails []string + for _, shardId := range shardIds { + if size, found := erasure_coding.GetShardSize(ecShardInfo, erasure_coding.ShardId(shardId)); found { + shardDetails = append(shardDetails, fmt.Sprintf("%d:%s", shardId, util.BytesToHumanReadable(uint64(size)))) + totalSize += size + } else { + shardDetails = append(shardDetails, fmt.Sprintf("%d:?", shardId)) + } + } + shardSizeInfo = fmt.Sprintf(" sizes:[%s] total:%s", strings.Join(shardDetails, " "), util.BytesToHumanReadable(uint64(totalSize))) + } + + output(verbosityLevel >= 5, writer, " ec volume id:%v collection:%v shards:%v%s %s\n", + ecShardInfo.Id, ecShardInfo.Collection, shardIds, shardSizeInfo, expireAtString) } output((volumeInfosFound || ecShardInfoFound) && verbosityLevel >= 4, writer, " Disk %s %+v \n", diskType, s) return s |
