From 56287bd07d22e140a051bd788a8f6e2fe78b82a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Knecht?= Date: Mon, 29 Jan 2024 19:36:37 +0100 Subject: [PATCH] weed/shell: Cluster check other disk types (#5245) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * week/shell: Cluster check other disk types The `cluster.check` command only took the empty (`""`) and `hdd` disk types into consideration, but a cluster with only `ssd` or `nvme` disk types would be equally valid. This commit simply checks that _any_ disk type is defined, and that some volumes are available for it. Signed-off-by: Benoît Knecht * weed/shell: Replace loop that copies slice Use the following construct instead of a `for` loop: ```golang x = append(x, y...) ``` See https://staticcheck.dev/docs/checks#S1011. Signed-off-by: Benoît Knecht * weed/shell: Check disk types when filer is in use Filer stores its metadata logs in generic (i.e. `""`) or HDD disk type volumes, so make sure those disk types exist and have volumes associated with them when Filer is deployed in the cluster. Signed-off-by: Benoît Knecht --------- Signed-off-by: Benoît Knecht --- weed/shell/command_cluster_check.go | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/weed/shell/command_cluster_check.go b/weed/shell/command_cluster_check.go index 3fb72940f..03acca5b2 100644 --- a/weed/shell/command_cluster_check.go +++ b/weed/shell/command_cluster_check.go @@ -46,13 +46,13 @@ func (c *commandClusterCheck) Do(args []string, commandEnv *CommandEnv, writer i } fmt.Fprintf(writer, "Topology volumeSizeLimit:%d MB%s\n", volumeSizeLimitMb, diskInfosToString(topologyInfo.DiskInfos)) - emptyDiskTypeDiskInfo, emptyDiskTypeFound := topologyInfo.DiskInfos[""] - hddDiskTypeDiskInfo, hddDiskTypeFound := topologyInfo.DiskInfos["hdd"] - if !emptyDiskTypeFound && !hddDiskTypeFound { - return fmt.Errorf("Need to a hdd disk type!") + if len(topologyInfo.DiskInfos) == 0 { + return fmt.Errorf("no disk type defined") } - if emptyDiskTypeFound && emptyDiskTypeDiskInfo.MaxVolumeCount == 0 || hddDiskTypeFound && hddDiskTypeDiskInfo.MaxVolumeCount == 0 { - return fmt.Errorf("Need to a hdd disk type!") + for diskType, diskInfo := range topologyInfo.DiskInfos { + if diskInfo.MaxVolumeCount == 0 { + return fmt.Errorf("no volume available for \"%s\" disk type", diskType) + } } // collect filers @@ -73,6 +73,19 @@ func (c *commandClusterCheck) Do(args []string, commandEnv *CommandEnv, writer i } fmt.Fprintf(writer, "the cluster has %d filers: %+v\n", len(filers), filers) + if len(filers) > 0 { + genericDiskInfo, genericDiskInfoOk := topologyInfo.DiskInfos[""] + hddDiskInfo, hddDiskInfoOk := topologyInfo.DiskInfos["hdd"] + + if !genericDiskInfoOk && !hddDiskInfoOk { + return fmt.Errorf("filer metadata logs need generic or hdd disk type to be defined") + } + + if (genericDiskInfoOk && genericDiskInfo.MaxVolumeCount == 0) || (hddDiskInfoOk && hddDiskInfo.MaxVolumeCount == 0) { + return fmt.Errorf("filer metadata logs need generic or hdd volumes to be available") + } + } + // collect volume servers var volumeServers []pb.ServerAddress t, _, err := collectTopologyInfo(commandEnv, 0) @@ -90,9 +103,7 @@ func (c *commandClusterCheck) Do(args []string, commandEnv *CommandEnv, writer i // collect all masters var masters []pb.ServerAddress - for _, master := range commandEnv.MasterClient.GetMasters() { - masters = append(masters, master) - } + masters = append(masters, commandEnv.MasterClient.GetMasters()...) // check from master to volume servers for _, master := range masters {