aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominic Pearson <dsp@technoanimal.net>2024-06-03 07:10:28 +0200
committerGitHub <noreply@github.com>2024-06-02 22:10:28 -0700
commitd8bde9b96e1e314534cd76345c61c623c5824132 (patch)
tree6c32bce60220d2d313719d64b608bd414271a6d6
parent579ebbdf602c13c839f6e933163cf16f81d25bfb (diff)
downloadseaweedfs-d8bde9b96e1e314534cd76345c61c623c5824132.tar.xz
seaweedfs-d8bde9b96e1e314534cd76345c61c623c5824132.zip
Solaris disk support (#5638)
-rw-r--r--weed/stats/disk_common.go17
-rw-r--r--weed/stats/disk_notsupported.go4
-rw-r--r--weed/stats/disk_openbsd.go6
-rw-r--r--weed/stats/disk_solaris.go24
-rw-r--r--weed/stats/disk_windows.go4
5 files changed, 47 insertions, 8 deletions
diff --git a/weed/stats/disk_common.go b/weed/stats/disk_common.go
new file mode 100644
index 000000000..936c77e91
--- /dev/null
+++ b/weed/stats/disk_common.go
@@ -0,0 +1,17 @@
+package stats
+
+import "github.com/seaweedfs/seaweedfs/weed/pb/volume_server_pb"
+
+func calculateDiskRemaining(disk *volume_server_pb.DiskStatus) {
+ disk.Used = disk.All - disk.Free
+
+ if disk.All > 0 {
+ disk.PercentFree = float32((float64(disk.Free) / float64(disk.All)) * 100)
+ disk.PercentUsed = float32((float64(disk.Used) / float64(disk.All)) * 100)
+ } else {
+ disk.PercentFree = 0
+ disk.PercentUsed = 0
+ }
+
+ return
+}
diff --git a/weed/stats/disk_notsupported.go b/weed/stats/disk_notsupported.go
index 418164546..956c7bf9f 100644
--- a/weed/stats/disk_notsupported.go
+++ b/weed/stats/disk_notsupported.go
@@ -1,5 +1,5 @@
-//go:build netbsd || plan9 || solaris
-// +build netbsd plan9 solaris
+//go:build netbsd || plan9
+// +build netbsd plan9
package stats
diff --git a/weed/stats/disk_openbsd.go b/weed/stats/disk_openbsd.go
index bb03126bf..1be41e5c7 100644
--- a/weed/stats/disk_openbsd.go
+++ b/weed/stats/disk_openbsd.go
@@ -15,10 +15,10 @@ func fillInDiskStatus(disk *volume_server_pb.DiskStatus) {
if err != nil {
return
}
+
disk.All = fs.F_blocks * uint64(fs.F_bsize)
disk.Free = fs.F_bfree * uint64(fs.F_bsize)
- disk.Used = disk.All - disk.Free
- disk.PercentFree = float32((float64(disk.Free) / float64(disk.All)) * 100)
- disk.PercentUsed = float32((float64(disk.Used) / float64(disk.All)) * 100)
+ calculateDiskRemaining(disk)
+
return
}
diff --git a/weed/stats/disk_solaris.go b/weed/stats/disk_solaris.go
new file mode 100644
index 000000000..cce20e4cc
--- /dev/null
+++ b/weed/stats/disk_solaris.go
@@ -0,0 +1,24 @@
+//go:build solaris
+// +build solaris
+
+package stats
+
+import (
+ "golang.org/x/sys/unix"
+
+ "github.com/seaweedfs/seaweedfs/weed/pb/volume_server_pb"
+)
+
+func fillInDiskStatus(disk *volume_server_pb.DiskStatus) {
+ var stat unix.Statvfs_t
+ err := unix.Statvfs(disk.Dir, &stat)
+ if err != nil {
+ return
+ }
+
+ disk.All = stat.Blocks * uint64(stat.Bsize)
+ disk.Free = stat.Bfree * uint64(stat.Bsize)
+ calculateDiskRemaining(disk)
+
+ return
+}
diff --git a/weed/stats/disk_windows.go b/weed/stats/disk_windows.go
index 16e6d3326..93c703134 100644
--- a/weed/stats/disk_windows.go
+++ b/weed/stats/disk_windows.go
@@ -39,9 +39,7 @@ func fillInDiskStatus(disk *volume_server_pb.DiskStatus) {
return
}
- disk.Used = disk.All - disk.Free
- disk.PercentFree = float32((float64(disk.Free) / float64(disk.All)) * 100)
- disk.PercentUsed = float32((float64(disk.Used) / float64(disk.All)) * 100)
+ calculateDiskRemaining(disk)
return
}