| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| package raft |
| |
| import ( |
| "context" |
| "os" |
| |
| "github.com/shirou/gopsutil/v3/mem" |
| "golang.org/x/sys/unix" |
| ) |
| |
| func init() { |
| getMmapFlags = getMmapFlagsLinux |
| } |
| |
| func getMmapFlagsLinux(dbPath string) int { |
| if os.Getenv("VAULT_RAFT_DISABLE_MAP_POPULATE") != "" { |
| return 0 |
| } |
| stat, err := os.Stat(dbPath) |
| if err != nil { |
| return 0 |
| } |
| size := stat.Size() |
| |
| v, err := mem.VirtualMemoryWithContext(context.Background()) |
| if err != nil { |
| return 0 |
| } |
| |
| // We won't worry about swap, since we already tell people not to use it. |
| if v.Total > uint64(size) { |
| return unix.MAP_POPULATE |
| } |
| |
| return 0 |
| } |