aboutsummaryrefslogtreecommitdiff
path: root/weed/shell/command_volume_list.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/shell/command_volume_list.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/shell/command_volume_list.go')
-rw-r--r--weed/shell/command_volume_list.go24
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