diff --git a/cmd/event_handler/main.go b/cmd/event_handler/main.go index d0e23af6..7e395ae2 100644 --- a/cmd/event_handler/main.go +++ b/cmd/event_handler/main.go @@ -34,7 +34,7 @@ func processEvent(ctx context.Context) error { if err != nil { return fmt.Errorf("failed to open event log: %s", err) } - defer logFile.Close() + defer func() { _ = logFile.Close() }() log.SetOutput(logFile) log.Printf("event: %s, node: %d, success: %s, details: %s\n", *event, *nodeID, *success, *details) @@ -68,7 +68,7 @@ func processEvent(ctx context.Context) error { } } - return nil + return logFile.Sync() } func evaluateClusterState(ctx context.Context, conn *pgx.Conn, node *flypg.Node) error { diff --git a/internal/flycheck/vm.go b/internal/flycheck/vm.go index 94372a07..9a5a271a 100644 --- a/internal/flycheck/vm.go +++ b/internal/flycheck/vm.go @@ -20,9 +20,7 @@ func CheckVM(checks *check.CheckSuite) *check.CheckSuite { return checkDisk("/data/") }) - checks.AddCheck("checkLoad", func() (string, error) { - return checkLoad() - }) + checks.AddCheck("checkLoad", checkLoad) pressureNames := []string{"memory", "cpu", "io"} for _, n := range pressureNames { diff --git a/internal/flypg/config.go b/internal/flypg/config.go index a0cb75b4..b698cae6 100644 --- a/internal/flypg/config.go +++ b/internal/flypg/config.go @@ -119,7 +119,7 @@ func ReadFromFile(path string) (ConfigMap, error) { if err != nil { return nil, err } - defer file.Close() + defer func() { _ = file.Close() }() conf := ConfigMap{} scanner := bufio.NewScanner(file) @@ -138,7 +138,7 @@ func writeInternalConfigFile(c Config) error { if err != nil { return err } - defer file.Close() + defer func() { _ = file.Close() }() internal := c.InternalConfig() @@ -147,11 +147,17 @@ func writeInternalConfigFile(c Config) error { file.Write([]byte(entry)) } + if err := file.Sync(); err != nil { + return fmt.Errorf("failed to sync file: %s", err) + } else if err := file.Close(); err != nil { + return fmt.Errorf("failed to close file: %s", err) + } + if err := utils.SetFileOwnership(c.InternalConfigFile(), "postgres"); err != nil { return fmt.Errorf("failed to set file ownership on %s: %s", c.InternalConfigFile(), err) } - return file.Sync() + return nil } func writeUserConfigFile(c Config) error { @@ -159,7 +165,7 @@ func writeUserConfigFile(c Config) error { if err != nil { return err } - defer file.Close() + defer func() { _ = file.Close() }() internal := c.InternalConfig() @@ -169,9 +175,15 @@ func writeUserConfigFile(c Config) error { file.Write([]byte(entry)) } + if err := file.Sync(); err != nil { + return fmt.Errorf("failed to sync file: %s", err) + } else if err := file.Close(); err != nil { + return fmt.Errorf("failed to close file: %s", err) + } + if err := utils.SetFileOwnership(c.UserConfigFile(), "postgres"); err != nil { return fmt.Errorf("failed to set file ownership on %s: %s", c.UserConfigFile(), err) } - return file.Sync() + return nil } diff --git a/internal/flypg/flypg.go b/internal/flypg/flypg.go index 3f06111d..1ba6931c 100644 --- a/internal/flypg/flypg.go +++ b/internal/flypg/flypg.go @@ -80,25 +80,29 @@ func (c *FlyPGConfig) CurrentConfig() (ConfigMap, error) { func (c *FlyPGConfig) initialize() error { c.SetDefaults() - internal, err := os.Create(c.internalConfigFilePath) + file, err := os.Create(c.internalConfigFilePath) if err != nil { return err } - defer func() { - if err := internal.Close(); err != nil { - fmt.Printf("failed to close file: %s\n", err) - } - }() + defer func() { _ = file.Close() }() - user, err := os.Create(c.userConfigFilePath) + if err := file.Sync(); err != nil { + return fmt.Errorf("failed to sync file: %s", err) + } else if err := file.Close(); err != nil { + return fmt.Errorf("failed to close file: %s", err) + } + + file, err = os.Create(c.userConfigFilePath) if err != nil { return err } - defer func() { - if err := user.Close(); err != nil { - fmt.Printf("failed to close file: %s\n", err) - } - }() + defer func() { _ = file.Close() }() + + if err := file.Sync(); err != nil { + return fmt.Errorf("failed to sync file: %s", err) + } else if err := file.Close(); err != nil { + return fmt.Errorf("failed to close file: %s", err) + } return nil } diff --git a/internal/flypg/node.go b/internal/flypg/node.go index 23022fd5..a65bce5e 100644 --- a/internal/flypg/node.go +++ b/internal/flypg/node.go @@ -522,7 +522,7 @@ func (n *Node) setDefaultHBA() error { if err != nil { return err } - defer file.Close() + defer func() { _ = file.Close() }() for _, entry := range entries { str := fmt.Sprintf("%s %s %s %s %s\n", entry.Type, entry.Database, entry.User, entry.Address, entry.Method) diff --git a/internal/flypg/pg.go b/internal/flypg/pg.go index 8de38ed2..90557324 100644 --- a/internal/flypg/pg.go +++ b/internal/flypg/pg.go @@ -249,19 +249,19 @@ func (c *PGConfig) initialize() error { } func (c *PGConfig) writePGConfigEntries(entries []string) error { - f, err := os.OpenFile(c.configFilePath, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600) + file, err := os.Create(c.configFilePath) if err != nil { return err } - defer f.Close() + defer func() { _ = file.Close() }() for _, entry := range entries { - if _, err := f.WriteString(entry); err != nil { + if _, err := file.WriteString(entry); err != nil { return fmt.Errorf("failed append configuration entry: %s", err) } } - return f.Sync() + return file.Sync() } func memTotalInBytes() (int64, error) { diff --git a/internal/flypg/repmgr.go b/internal/flypg/repmgr.go index 92cdb536..6fa152a2 100644 --- a/internal/flypg/repmgr.go +++ b/internal/flypg/repmgr.go @@ -101,16 +101,21 @@ func (r *RepMgr) initialize() error { if err != nil { return nil } - defer file.Close() + defer func() { _ = file.Close() }() entries := []string{"include 'repmgr.internal.conf'\n", "include 'repmgr.user.conf'\n"} - for _, entry := range entries { if _, err := file.WriteString(entry); err != nil { return fmt.Errorf("failed append configuration entry: %s", err) } } + if err := file.Sync(); err != nil { + return fmt.Errorf("failed to sync file: %s", err) + } else if err := file.Close(); err != nil { + return fmt.Errorf("failed to close file: %s", err) + } + if err := r.writePasswdConf(); err != nil { return fmt.Errorf("failed creating pgpass file: %s", err) } @@ -231,11 +236,11 @@ func (r *RepMgr) clonePrimary(ipStr string) error { func (r *RepMgr) writePasswdConf() error { path := "/data/.pgpass" - file, err := os.OpenFile(path, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0600) + file, err := os.Create(path) if err != nil { return fmt.Errorf("failed to open repmgr password file: %s", err) } - defer file.Close() + defer func() { _ = file.Close() }() if err := utils.SetFileOwnership(path, "postgres"); err != nil { return fmt.Errorf("failed to set file ownership: %s", err) diff --git a/internal/flypg/restore.go b/internal/flypg/restore.go index 6e76ef06..8f3f4a0e 100644 --- a/internal/flypg/restore.go +++ b/internal/flypg/restore.go @@ -120,7 +120,7 @@ func grantLocalAccess() error { if err != nil { return err } - defer file.Close() + defer func() { _ = file.Close() }() perm := []byte("host all postgres ::0/0 trust") _, err = file.Write(perm) @@ -143,7 +143,7 @@ func restoreHBAFile() error { if err != nil { return err } - defer file.Close() + defer func() { _ = file.Close() }() // revert back to our original config _, err = file.Write(data) @@ -160,11 +160,11 @@ func restoreHBAFile() error { } func setRestoreLock() error { - file, err := os.OpenFile(restoreLockFile, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600) + file, err := os.Create(restoreLockFile) if err != nil { return err } - defer file.Close() + defer func() { _ = file.Close() }() _, err = file.WriteString(os.Getenv("FLY_APP_NAME")) if err != nil { diff --git a/internal/flypg/ssh.go b/internal/flypg/ssh.go index a452c4c6..ca8d83e4 100644 --- a/internal/flypg/ssh.go +++ b/internal/flypg/ssh.go @@ -37,32 +37,33 @@ func writeSSHKey() error { func writePrivateKey() error { key := os.Getenv("SSH_KEY") - keyFile, err := os.Create(privateKeyFile) + file, err := os.Create(privateKeyFile) if err != nil { return err } - defer keyFile.Close() - _, err = keyFile.Write([]byte(key)) + defer func() { _ = file.Close() }() + + _, err = file.Write([]byte(key)) if err != nil { - return err + return fmt.Errorf("failed to write contents to pvt key: %s", err) } - return keyFile.Sync() + return file.Sync() } func writePublicKey() error { cert := os.Getenv("SSH_CERT") - certFile, err := os.Create(publicKeyFile) + file, err := os.Create(publicKeyFile) if err != nil { return err } - defer certFile.Close() + defer func() { _ = file.Close() }() - _, err = certFile.Write([]byte(cert)) + _, err = file.Write([]byte(cert)) if err != nil { - return err + return fmt.Errorf("failed to write contents to pub key: %s", err) } - return certFile.Sync() + return file.Sync() } diff --git a/internal/supervisor/utils.go b/internal/supervisor/utils.go index 766f4130..e455bb01 100644 --- a/internal/supervisor/utils.go +++ b/internal/supervisor/utils.go @@ -14,5 +14,5 @@ func fatalOnErr(err error) { func fatal(i ...interface{}) { fmt.Fprint(os.Stderr, "hivemind: ") fmt.Fprintln(os.Stderr, i...) - os.Exit(1) + panic(i) }