From 7bcbb2ff46f4fede783f885daa1a314ec965e82a Mon Sep 17 00:00:00 2001 From: yzqzss Date: Tue, 8 Jul 2025 00:47:03 +0800 Subject: [PATCH 1/3] implement `CheckDiskUsage()` for Windows --- internal/pkg/controler/watchers/disk.go | 14 ------------ internal/pkg/controler/watchers/disk_unix.go | 22 +++++++++++++++++++ .../pkg/controler/watchers/disk_windows.go | 20 +++++++++++++++++ 3 files changed, 42 insertions(+), 14 deletions(-) create mode 100644 internal/pkg/controler/watchers/disk_unix.go create mode 100644 internal/pkg/controler/watchers/disk_windows.go diff --git a/internal/pkg/controler/watchers/disk.go b/internal/pkg/controler/watchers/disk.go index 25caa5e6..b3d6d68e 100644 --- a/internal/pkg/controler/watchers/disk.go +++ b/internal/pkg/controler/watchers/disk.go @@ -4,10 +4,8 @@ import ( "context" "fmt" "sync" - "syscall" "time" - "github.com/internetarchive/Zeno/internal/pkg/config" "github.com/internetarchive/Zeno/internal/pkg/controler/pause" "github.com/internetarchive/Zeno/internal/pkg/log" ) @@ -42,18 +40,6 @@ func checkThreshold(total, free uint64, minSpaceRequired float64) error { return nil } -func CheckDiskUsage(path string) error { - var stat syscall.Statfs_t - if err := syscall.Statfs(path, &stat); err != nil { - panic(fmt.Sprintf("Error retrieving disk stats: %v\n", err)) - } - - total := stat.Blocks * uint64(stat.Bsize) - free := stat.Bavail * uint64(stat.Bsize) - - return checkThreshold(total, free, config.Get().MinSpaceRequired) -} - // WatchDiskSpace watches the disk space and pauses the pipeline if it's low func WatchDiskSpace(path string, interval time.Duration) { diskWatcherWg.Add(1) diff --git a/internal/pkg/controler/watchers/disk_unix.go b/internal/pkg/controler/watchers/disk_unix.go new file mode 100644 index 00000000..f7a460d2 --- /dev/null +++ b/internal/pkg/controler/watchers/disk_unix.go @@ -0,0 +1,22 @@ +//go:build !windows + +package watchers + +import ( + "fmt" + "syscall" + + "github.com/internetarchive/Zeno/internal/pkg/config" +) + +func CheckDiskUsage(path string) error { + var stat syscall.Statfs_t + if err := syscall.Statfs(path, &stat); err != nil { + panic(fmt.Sprintf("Error retrieving disk stats: %v\n", err)) + } + + total := stat.Blocks * uint64(stat.Bsize) + free := stat.Bavail * uint64(stat.Bsize) + + return checkThreshold(total, free, config.Get().MinSpaceRequired) +} diff --git a/internal/pkg/controler/watchers/disk_windows.go b/internal/pkg/controler/watchers/disk_windows.go new file mode 100644 index 00000000..8f7ffa8e --- /dev/null +++ b/internal/pkg/controler/watchers/disk_windows.go @@ -0,0 +1,20 @@ +//go:build windows + +package watchers + +import ( + "fmt" + + "github.com/internetarchive/Zeno/internal/pkg/config" + "golang.org/x/sys/windows" +) + +func CheckDiskUsage(path string) error { + var freeBytesAvailable uint64 + var totalNumberOfBytes uint64 + var totalNumberOfFreeBytes uint64 + if err := windows.GetDiskFreeSpaceEx(windows.StringToUTF16Ptr(path), &freeBytesAvailable, &totalNumberOfBytes, &totalNumberOfFreeBytes); err != nil { + panic(fmt.Sprintf("Error retrieving disk stats: %v\n", err)) + } + return checkThreshold(totalNumberOfBytes, freeBytesAvailable, config.Get().MinSpaceRequired) +} From 29df1732a9c7829448b4a9386fcb4c69c1e7108f Mon Sep 17 00:00:00 2001 From: yzqzss Date: Tue, 8 Jul 2025 01:24:26 +0800 Subject: [PATCH 2/3] CI: add windows --- .github/workflows/go.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index fcbe6ddd..b8442c2f 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -29,3 +29,6 @@ jobs: - name: Goroutine leak detector run: go test -c -o tests && for test in $(go test -list . | grep -E "^(Test|Example)"); do ./tests -test.run "^$test\$" &>/dev/null && echo -e "$test passed\n" || echo -e "$test failed\n"; done + + - name: Build for Windows + run: GOOS=windows GOARCH=amd64 go build -v ./... From e27e0cd3c41de65a9ec4ead23acfd7bc8fb4989e Mon Sep 17 00:00:00 2001 From: Jake L Date: Mon, 7 Jul 2025 18:59:23 -0600 Subject: [PATCH 3/3] Allow Windows test to fail for now --- .github/workflows/go.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index b8442c2f..840516fe 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -31,4 +31,5 @@ jobs: run: go test -c -o tests && for test in $(go test -list . | grep -E "^(Test|Example)"); do ./tests -test.run "^$test\$" &>/dev/null && echo -e "$test passed\n" || echo -e "$test failed\n"; done - name: Build for Windows + continue-on-error: true run: GOOS=windows GOARCH=amd64 go build -v ./...