diff --git a/weed/server/volume_grpc_erasure_coding.go b/weed/server/volume_grpc_erasure_coding.go index 5981c5efe..88e94115d 100644 --- a/weed/server/volume_grpc_erasure_coding.go +++ b/weed/server/volume_grpc_erasure_coding.go @@ -492,7 +492,7 @@ func (vs *VolumeServer) VolumeEcShardsInfo(ctx context.Context, req *volume_serv for _, shardDetail := range shardDetails { ecShardInfo := &volume_server_pb.EcShardInfo{ ShardId: uint32(shardDetail.ShardId), - Size: shardDetail.Size, + Size: int64(shardDetail.Size), Collection: v.Collection, } ecShardInfos = append(ecShardInfos, ecShardInfo) diff --git a/weed/server/volume_server_handlers_ui.go b/weed/server/volume_server_handlers_ui.go index b1ff0317f..5679eb483 100644 --- a/weed/server/volume_server_handlers_ui.go +++ b/weed/server/volume_server_handlers_ui.go @@ -1,12 +1,14 @@ package weed_server import ( - "github.com/seaweedfs/seaweedfs/weed/pb" - "github.com/seaweedfs/seaweedfs/weed/util/version" "net/http" "path/filepath" "time" + "github.com/seaweedfs/seaweedfs/weed/glog" + "github.com/seaweedfs/seaweedfs/weed/pb" + "github.com/seaweedfs/seaweedfs/weed/util/version" + "github.com/seaweedfs/seaweedfs/weed/pb/volume_server_pb" ui "github.com/seaweedfs/seaweedfs/weed/server/volume_server_ui" "github.com/seaweedfs/seaweedfs/weed/stats" @@ -53,5 +55,8 @@ func (vs *VolumeServer) uiStatusHandler(w http.ResponseWriter, r *http.Request) infos, serverStats, } - ui.StatusTpl.Execute(w, args) + if err := ui.StatusTpl.Execute(w, args); err != nil { + glog.Errorf("template execution error: %v", err) + http.Error(w, "Internal server error", http.StatusInternalServerError) + } } diff --git a/weed/storage/erasure_coding/ec_volume.go b/weed/storage/erasure_coding/ec_volume.go index 61057674f..839428e7b 100644 --- a/weed/storage/erasure_coding/ec_volume.go +++ b/weed/storage/erasure_coding/ec_volume.go @@ -178,9 +178,11 @@ func (ev *EcVolume) ShardSize() uint64 { return 0 } -func (ev *EcVolume) Size() (size int64) { +func (ev *EcVolume) Size() (size uint64) { for _, shard := range ev.Shards { - size += shard.Size() + if shardSize := shard.Size(); shardSize > 0 { + size += uint64(shardSize) + } } return } @@ -198,15 +200,18 @@ func (ev *EcVolume) ShardIdList() (shardIds []ShardId) { type ShardInfo struct { ShardId ShardId - Size int64 + Size uint64 } func (ev *EcVolume) ShardDetails() (shards []ShardInfo) { for _, s := range ev.Shards { - shards = append(shards, ShardInfo{ - ShardId: s.ShardId, - Size: s.Size(), - }) + shardSize := s.Size() + if shardSize >= 0 { + shards = append(shards, ShardInfo{ + ShardId: s.ShardId, + Size: uint64(shardSize), + }) + } } return }