Skip to content

Commit c64c0d6

Browse files
authored
Add proper file handling (#114)
* Add proper file handling * Few more fixes * Fix * Ugh * panic vs. exit * Fix anti-pattern
1 parent 32c2fe2 commit c64c0d6

File tree

10 files changed

+66
-46
lines changed

10 files changed

+66
-46
lines changed

cmd/event_handler/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func processEvent(ctx context.Context) error {
3434
if err != nil {
3535
return fmt.Errorf("failed to open event log: %s", err)
3636
}
37-
defer logFile.Close()
37+
defer func() { _ = logFile.Close() }()
3838

3939
log.SetOutput(logFile)
4040
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 {
6868
}
6969
}
7070

71-
return nil
71+
return logFile.Sync()
7272
}
7373

7474
func evaluateClusterState(ctx context.Context, conn *pgx.Conn, node *flypg.Node) error {

internal/flycheck/vm.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ func CheckVM(checks *check.CheckSuite) *check.CheckSuite {
2020
return checkDisk("/data/")
2121
})
2222

23-
checks.AddCheck("checkLoad", func() (string, error) {
24-
return checkLoad()
25-
})
23+
checks.AddCheck("checkLoad", checkLoad)
2624

2725
pressureNames := []string{"memory", "cpu", "io"}
2826
for _, n := range pressureNames {

internal/flypg/config.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ func ReadFromFile(path string) (ConfigMap, error) {
119119
if err != nil {
120120
return nil, err
121121
}
122-
defer file.Close()
122+
defer func() { _ = file.Close() }()
123123

124124
conf := ConfigMap{}
125125
scanner := bufio.NewScanner(file)
@@ -138,7 +138,7 @@ func writeInternalConfigFile(c Config) error {
138138
if err != nil {
139139
return err
140140
}
141-
defer file.Close()
141+
defer func() { _ = file.Close() }()
142142

143143
internal := c.InternalConfig()
144144

@@ -147,19 +147,25 @@ func writeInternalConfigFile(c Config) error {
147147
file.Write([]byte(entry))
148148
}
149149

150+
if err := file.Sync(); err != nil {
151+
return fmt.Errorf("failed to sync file: %s", err)
152+
} else if err := file.Close(); err != nil {
153+
return fmt.Errorf("failed to close file: %s", err)
154+
}
155+
150156
if err := utils.SetFileOwnership(c.InternalConfigFile(), "postgres"); err != nil {
151157
return fmt.Errorf("failed to set file ownership on %s: %s", c.InternalConfigFile(), err)
152158
}
153159

154-
return file.Sync()
160+
return nil
155161
}
156162

157163
func writeUserConfigFile(c Config) error {
158164
file, err := os.Create(c.UserConfigFile())
159165
if err != nil {
160166
return err
161167
}
162-
defer file.Close()
168+
defer func() { _ = file.Close() }()
163169

164170
internal := c.InternalConfig()
165171

@@ -169,9 +175,15 @@ func writeUserConfigFile(c Config) error {
169175
file.Write([]byte(entry))
170176
}
171177

178+
if err := file.Sync(); err != nil {
179+
return fmt.Errorf("failed to sync file: %s", err)
180+
} else if err := file.Close(); err != nil {
181+
return fmt.Errorf("failed to close file: %s", err)
182+
}
183+
172184
if err := utils.SetFileOwnership(c.UserConfigFile(), "postgres"); err != nil {
173185
return fmt.Errorf("failed to set file ownership on %s: %s", c.UserConfigFile(), err)
174186
}
175187

176-
return file.Sync()
188+
return nil
177189
}

internal/flypg/flypg.go

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -80,25 +80,29 @@ func (c *FlyPGConfig) CurrentConfig() (ConfigMap, error) {
8080
func (c *FlyPGConfig) initialize() error {
8181
c.SetDefaults()
8282

83-
internal, err := os.Create(c.internalConfigFilePath)
83+
file, err := os.Create(c.internalConfigFilePath)
8484
if err != nil {
8585
return err
8686
}
87-
defer func() {
88-
if err := internal.Close(); err != nil {
89-
fmt.Printf("failed to close file: %s\n", err)
90-
}
91-
}()
87+
defer func() { _ = file.Close() }()
9288

93-
user, err := os.Create(c.userConfigFilePath)
89+
if err := file.Sync(); err != nil {
90+
return fmt.Errorf("failed to sync file: %s", err)
91+
} else if err := file.Close(); err != nil {
92+
return fmt.Errorf("failed to close file: %s", err)
93+
}
94+
95+
file, err = os.Create(c.userConfigFilePath)
9496
if err != nil {
9597
return err
9698
}
97-
defer func() {
98-
if err := user.Close(); err != nil {
99-
fmt.Printf("failed to close file: %s\n", err)
100-
}
101-
}()
99+
defer func() { _ = file.Close() }()
100+
101+
if err := file.Sync(); err != nil {
102+
return fmt.Errorf("failed to sync file: %s", err)
103+
} else if err := file.Close(); err != nil {
104+
return fmt.Errorf("failed to close file: %s", err)
105+
}
102106

103107
return nil
104108
}

internal/flypg/node.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@ func (n *Node) setDefaultHBA() error {
522522
if err != nil {
523523
return err
524524
}
525-
defer file.Close()
525+
defer func() { _ = file.Close() }()
526526

527527
for _, entry := range entries {
528528
str := fmt.Sprintf("%s %s %s %s %s\n", entry.Type, entry.Database, entry.User, entry.Address, entry.Method)

internal/flypg/pg.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -249,19 +249,19 @@ func (c *PGConfig) initialize() error {
249249
}
250250

251251
func (c *PGConfig) writePGConfigEntries(entries []string) error {
252-
f, err := os.OpenFile(c.configFilePath, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
252+
file, err := os.Create(c.configFilePath)
253253
if err != nil {
254254
return err
255255
}
256-
defer f.Close()
256+
defer func() { _ = file.Close() }()
257257

258258
for _, entry := range entries {
259-
if _, err := f.WriteString(entry); err != nil {
259+
if _, err := file.WriteString(entry); err != nil {
260260
return fmt.Errorf("failed append configuration entry: %s", err)
261261
}
262262
}
263263

264-
return f.Sync()
264+
return file.Sync()
265265
}
266266

267267
func memTotalInBytes() (int64, error) {

internal/flypg/repmgr.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,16 +101,21 @@ func (r *RepMgr) initialize() error {
101101
if err != nil {
102102
return nil
103103
}
104-
defer file.Close()
104+
defer func() { _ = file.Close() }()
105105

106106
entries := []string{"include 'repmgr.internal.conf'\n", "include 'repmgr.user.conf'\n"}
107-
108107
for _, entry := range entries {
109108
if _, err := file.WriteString(entry); err != nil {
110109
return fmt.Errorf("failed append configuration entry: %s", err)
111110
}
112111
}
113112

113+
if err := file.Sync(); err != nil {
114+
return fmt.Errorf("failed to sync file: %s", err)
115+
} else if err := file.Close(); err != nil {
116+
return fmt.Errorf("failed to close file: %s", err)
117+
}
118+
114119
if err := r.writePasswdConf(); err != nil {
115120
return fmt.Errorf("failed creating pgpass file: %s", err)
116121
}
@@ -231,11 +236,11 @@ func (r *RepMgr) clonePrimary(ipStr string) error {
231236

232237
func (r *RepMgr) writePasswdConf() error {
233238
path := "/data/.pgpass"
234-
file, err := os.OpenFile(path, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0600)
239+
file, err := os.Create(path)
235240
if err != nil {
236241
return fmt.Errorf("failed to open repmgr password file: %s", err)
237242
}
238-
defer file.Close()
243+
defer func() { _ = file.Close() }()
239244

240245
if err := utils.SetFileOwnership(path, "postgres"); err != nil {
241246
return fmt.Errorf("failed to set file ownership: %s", err)

internal/flypg/restore.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ func grantLocalAccess() error {
120120
if err != nil {
121121
return err
122122
}
123-
defer file.Close()
123+
defer func() { _ = file.Close() }()
124124

125125
perm := []byte("host all postgres ::0/0 trust")
126126
_, err = file.Write(perm)
@@ -143,7 +143,7 @@ func restoreHBAFile() error {
143143
if err != nil {
144144
return err
145145
}
146-
defer file.Close()
146+
defer func() { _ = file.Close() }()
147147

148148
// revert back to our original config
149149
_, err = file.Write(data)
@@ -160,11 +160,11 @@ func restoreHBAFile() error {
160160
}
161161

162162
func setRestoreLock() error {
163-
file, err := os.OpenFile(restoreLockFile, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
163+
file, err := os.Create(restoreLockFile)
164164
if err != nil {
165165
return err
166166
}
167-
defer file.Close()
167+
defer func() { _ = file.Close() }()
168168

169169
_, err = file.WriteString(os.Getenv("FLY_APP_NAME"))
170170
if err != nil {

internal/flypg/ssh.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,32 +37,33 @@ func writeSSHKey() error {
3737
func writePrivateKey() error {
3838
key := os.Getenv("SSH_KEY")
3939

40-
keyFile, err := os.Create(privateKeyFile)
40+
file, err := os.Create(privateKeyFile)
4141
if err != nil {
4242
return err
4343
}
44-
defer keyFile.Close()
45-
_, err = keyFile.Write([]byte(key))
44+
defer func() { _ = file.Close() }()
45+
46+
_, err = file.Write([]byte(key))
4647
if err != nil {
47-
return err
48+
return fmt.Errorf("failed to write contents to pvt key: %s", err)
4849
}
4950

50-
return keyFile.Sync()
51+
return file.Sync()
5152
}
5253

5354
func writePublicKey() error {
5455
cert := os.Getenv("SSH_CERT")
5556

56-
certFile, err := os.Create(publicKeyFile)
57+
file, err := os.Create(publicKeyFile)
5758
if err != nil {
5859
return err
5960
}
60-
defer certFile.Close()
61+
defer func() { _ = file.Close() }()
6162

62-
_, err = certFile.Write([]byte(cert))
63+
_, err = file.Write([]byte(cert))
6364
if err != nil {
64-
return err
65+
return fmt.Errorf("failed to write contents to pub key: %s", err)
6566
}
6667

67-
return certFile.Sync()
68+
return file.Sync()
6869
}

internal/supervisor/utils.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@ func fatalOnErr(err error) {
1414
func fatal(i ...interface{}) {
1515
fmt.Fprint(os.Stderr, "hivemind: ")
1616
fmt.Fprintln(os.Stderr, i...)
17-
os.Exit(1)
17+
panic(i)
1818
}

0 commit comments

Comments
 (0)