aboutsummaryrefslogtreecommitdiff
path: root/weed/shell/command_cluster_check.go
diff options
context:
space:
mode:
authorBenoît Knecht <bknecht@protonmail.ch>2024-01-29 19:36:37 +0100
committerGitHub <noreply@github.com>2024-01-29 10:36:37 -0800
commit56287bd07d22e140a051bd788a8f6e2fe78b82a5 (patch)
tree778a646675be43de79a5cd70b31608dffa00a764 /weed/shell/command_cluster_check.go
parent0775d05a23b61a23f9a7f3fb180ec6d96fa94430 (diff)
downloadseaweedfs-56287bd07d22e140a051bd788a8f6e2fe78b82a5.tar.xz
seaweedfs-56287bd07d22e140a051bd788a8f6e2fe78b82a5.zip
weed/shell: Cluster check other disk types (#5245)
* 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 <bknecht@protonmail.ch> * 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 <bknecht@protonmail.ch> * 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 <bknecht@protonmail.ch> --------- Signed-off-by: Benoît Knecht <bknecht@protonmail.ch>
Diffstat (limited to 'weed/shell/command_cluster_check.go')
-rw-r--r--weed/shell/command_cluster_check.go29
1 files 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 {