diff --git a/server/disk_avail.go b/server/disk_avail.go new file mode 100644 index 00000000..90157fe7 --- /dev/null +++ b/server/disk_avail.go @@ -0,0 +1,37 @@ +// Copyright 2020 The NATS Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build !windows + +package server + +import ( + "os" + "syscall" +) + +func diskAvailable(storeDir string) int64 { + var ba int64 + if _, err := os.Stat(storeDir); os.IsNotExist(err) { + os.MkdirAll(storeDir, 0755) + } + var fs syscall.Statfs_t + if err := syscall.Statfs(storeDir, &fs); err == nil { + // Estimate 75% of available storage. + ba = int64(fs.Bavail * uint64(fs.Bsize) / 4 * 3) + } else { + // Used 1TB default as a guess if all else fails. + ba = JetStreamMaxStoreDefault + } + return ba +} diff --git a/server/disk_avail_windows.go b/server/disk_avail_windows.go new file mode 100644 index 00000000..0e057087 --- /dev/null +++ b/server/disk_avail_windows.go @@ -0,0 +1,21 @@ +// Copyright 2020 The NATS Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build windows + +package server + +// TODO(dlc) - See if there is a version of this for windows. +func diskAvailable(storeDir string) int64 { + return JetStreamMaxStoreDefault +} diff --git a/server/jetstream.go b/server/jetstream.go index bc0eb12c..10b5dfd7 100644 --- a/server/jetstream.go +++ b/server/jetstream.go @@ -26,7 +26,6 @@ import ( "strconv" "strings" "sync" - "syscall" "github.com/minio/highwayhash" "github.com/nats-io/nats-server/v2/server/sysmem" @@ -944,17 +943,7 @@ func (s *Server) dynJetStreamConfig(storeDir string, maxStore int64) *JetStreamC if maxStore > 0 { jsc.MaxStore = maxStore } else { - if _, err := os.Stat(jsc.StoreDir); os.IsNotExist(err) { - os.MkdirAll(jsc.StoreDir, 0755) - } - var fs syscall.Statfs_t - if err := syscall.Statfs(jsc.StoreDir, &fs); err == nil { - // Estimate 75% of available storage. - jsc.MaxStore = int64(fs.Bavail * uint64(fs.Bsize) / 4 * 3) - } else { - // Used 1TB default as a guess if all else fails. - jsc.MaxStore = JetStreamMaxStoreDefault - } + jsc.MaxStore = diskAvailable(jsc.StoreDir) } // Estimate to 75% of total memory if we can determine system memory. if sysMem := sysmem.Memory(); sysMem > 0 {