6
6
"fmt"
7
7
"os"
8
8
9
+ "github.com/fly-apps/postgres-flex/internal/utils"
9
10
"github.com/jackc/pgx/v5"
10
11
)
11
12
@@ -21,32 +22,43 @@ var (
21
22
ErrZombieDiagnosisUndecided = errors .New ("unable to confirm we are the true primary" )
22
23
)
23
24
25
+ const zombieLockFile = "/data/zombie.lock"
26
+
24
27
func ZombieLockExists () bool {
25
- _ , err := os .Stat ("/data/zombie.lock" )
28
+ _ , err := os .Stat (zombieLockFile )
26
29
if os .IsNotExist (err ) {
27
30
return false
28
31
}
29
32
return true
30
33
}
31
34
32
35
func writeZombieLock (hostname string ) error {
33
- if err := os .WriteFile ("/data/zombie.lock" , []byte (hostname ), 0644 ); err != nil {
36
+ if err := os .WriteFile (zombieLockFile , []byte (hostname ), 0644 ); err != nil {
34
37
return err
35
38
}
36
39
40
+ pgUID , pgGID , err := utils .SystemUserIDs ("postgres" )
41
+ if err != nil {
42
+ return err
43
+ }
44
+
45
+ if err := os .Chown (zombieLockFile , pgUID , pgGID ); err != nil {
46
+ return fmt .Errorf ("failed to set zombie.lock owner: %s" , err )
47
+ }
48
+
37
49
return nil
38
50
}
39
51
40
52
func RemoveZombieLock () error {
41
- if err := os .Remove ("/data/zombie.lock" ); err != nil {
53
+ if err := os .Remove (zombieLockFile ); err != nil {
42
54
return err
43
55
}
44
56
45
57
return nil
46
58
}
47
59
48
60
func ReadZombieLock () (string , error ) {
49
- body , err := os .ReadFile ("/data/zombie.lock" )
61
+ body , err := os .ReadFile (zombieLockFile )
50
62
if err != nil {
51
63
return "" , err
52
64
}
0 commit comments