get.pme.sh/pnats@v0.0.0-20240304004023-26bb5a137ed0/server/disk_avail.go (about) 1 // Copyright 2020-2022 The NATS Authors 2 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // you may not use this file except in compliance with the License. 4 // You may obtain a copy of the License at 5 // 6 // http://www.apache.org/licenses/LICENSE-2.0 7 // 8 // Unless required by applicable law or agreed to in writing, software 9 // distributed under the License is distributed on an "AS IS" BASIS, 10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 //go:build !windows && !openbsd && !netbsd && !wasm 15 // +build !windows,!openbsd,!netbsd,!wasm 16 17 package server 18 19 import ( 20 "os" 21 "syscall" 22 ) 23 24 func diskAvailable(storeDir string) int64 { 25 var ba int64 26 if _, err := os.Stat(storeDir); os.IsNotExist(err) { 27 os.MkdirAll(storeDir, defaultDirPerms) 28 } 29 var fs syscall.Statfs_t 30 if err := syscall.Statfs(storeDir, &fs); err == nil { 31 // Estimate 75% of available storage. 32 ba = int64(uint64(fs.Bavail) * uint64(fs.Bsize) / 4 * 3) 33 } else { 34 // Used 1TB default as a guess if all else fails. 35 ba = JetStreamMaxStoreDefault 36 } 37 return ba 38 }