Skip to content

Commit db8b4a1

Browse files
davissp14Shaun Davis
andauthored
Don't create replUser on initial bootstrap (#56)
* Don't create replUser on initial bootstrap * Remove logs * Fix comment Co-authored-by: Shaun Davis <davissp14@Shauns-MacBook-Pro.local>
1 parent 6a0c92f commit db8b4a1

File tree

2 files changed

+27
-19
lines changed

2 files changed

+27
-19
lines changed

cmd/start/main.go

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ func main() {
6464
return "gosu stolon " + cmd
6565
}
6666

67+
cfg, err := flypg.InitConfig("/fly/cluster-spec.json")
68+
if err != nil {
69+
panic(err)
70+
}
71+
6772
go func() {
6873
t := time.NewTicker(1 * time.Second)
6974
defer t.Stop()
@@ -99,10 +104,14 @@ func main() {
99104
continue
100105
}
101106

102-
if err = initReplicationUser(context.TODO(), pg, node.ReplCredentials); err != nil {
103-
fmt.Println("error configuring replication user:", err)
104-
continue
107+
// Stolon handles replUser creation during initial bootstrap.
108+
if cfg.InitMode == flypg.InitModeExisting {
109+
if err = initReplicationUser(context.TODO(), pg, node.ReplCredentials); err != nil {
110+
fmt.Println("error configuring replication user:", err)
111+
continue
112+
}
105113
}
114+
106115
}
107116

108117
return
@@ -133,7 +142,7 @@ func main() {
133142
keeperEnv["STKEEPER_CAN_BE_SYNCHRONOUS_REPLICA"] = "false"
134143
}
135144

136-
svisor.AddProcess("keeper", stolonCmd("stolon-keeper"), supervisor.WithEnv(keeperEnv), supervisor.WithRestart(10, 10*time.Second))
145+
svisor.AddProcess("keeper", stolonCmd("stolon-keeper"), supervisor.WithEnv(keeperEnv), supervisor.WithRestart(5, 5*time.Second))
137146

138147
sentinelEnv := map[string]string{
139148
"STSENTINEL_DATA_DIR": node.DataDir,
@@ -165,10 +174,6 @@ func main() {
165174

166175
svisor.AddProcess("exporter", "postgres_exporter", supervisor.WithEnv(exporterEnv), supervisor.WithRestart(0, 1*time.Second))
167176

168-
if err := flypg.InitConfig("/fly/cluster-spec.json"); err != nil {
169-
panic(err)
170-
}
171-
172177
svisor.StopOnSignal(syscall.SIGINT, syscall.SIGTERM)
173178

174179
svisor.StartHttpListener()

pkg/flypg/config.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ import (
1515
"github.com/shirou/gopsutil/v3/mem"
1616
)
1717

18+
const InitModeNew = "new"
19+
const InitModeExisting = "existing"
20+
1821
type Config struct {
1922
InitMode string `json:"initMode"`
2023
ExistingConfig map[string]string `json:"existingConfig"`
@@ -27,7 +30,7 @@ type KeeperState struct {
2730
ClusterUID string `json:"ClusterUID"`
2831
}
2932

30-
func InitConfig(filename string) error {
33+
func InitConfig(filename string) (*Config, error) {
3134
filename, err := filepath.Abs(filename)
3235
if err != nil {
3336
log.Fatalln("error cleaning filename", err)
@@ -40,45 +43,45 @@ func InitConfig(filename string) error {
4043
writeJson(os.Stdout, cfg)
4144
// return
4245
} else if !os.IsNotExist(err) {
43-
return errors.Wrap(err, "error loading cluster spec")
46+
return nil, errors.Wrap(err, "error loading cluster spec")
4447
}
4548

4649
mem, err := memTotal()
4750
if err != nil {
48-
return errors.Wrap(err, "error fetching total system memory")
51+
return nil, errors.Wrap(err, "error fetching total system memory")
4952
}
5053

5154
fmt.Printf("system memory: %dmb vcpu count: %d\n", mem, runtime.NumCPU())
5255

5356
workMem := max(4, (mem / 64))
5457
maintenanceWorkMem := max(64, (mem / 20))
5558

56-
initMode := "new"
59+
initMode := InitModeNew
5760
existingConfig := map[string]string{}
5861

5962
// Don't blow away postgres directory if it exists.
6063
if _, err := os.Stat("/data/postgres"); err == nil {
61-
initMode = "existing"
64+
initMode = InitModeExisting
6265

6366
_, err = os.Stat("/data/keeperstate")
64-
if os.IsNotExist(err) && initMode == "existing" {
67+
if os.IsNotExist(err) && initMode == InitModeExisting {
6568
// if the keeperstate file does not exist, seed it.
6669
// TODO - There is likely a better way to handle this, may take up to 2 minutes for Stolon
6770
// to re-register the cluster.
6871
data := []byte("{\"UID\":\"ab805b922\"}")
6972
if err = ioutil.WriteFile("/data/keeperstate", data, 0644); err != nil {
70-
return err
73+
return nil, err
7174
}
7275
}
7376

7477
var keeperState KeeperState
7578
data, err := os.ReadFile("/data/keeperstate")
7679
if err != nil {
77-
return err
80+
return nil, err
7881
}
7982
err = json.Unmarshal(data, &keeperState)
8083
if err != nil {
81-
return err
84+
return nil, err
8285
}
8386
if keeperState.UID != "" {
8487
existingConfig["keeperUID"] = keeperState.UID
@@ -107,12 +110,12 @@ func InitConfig(filename string) error {
107110
writeJson(os.Stdout, cfg)
108111

109112
if err := writeConfig(filename, cfg); err != nil {
110-
return errors.Wrap(err, "error writing cluster-spec.json")
113+
return nil, errors.Wrap(err, "error writing cluster-spec.json")
111114
}
112115

113116
fmt.Println("generated new config")
114117

115-
return nil
118+
return &cfg, nil
116119
}
117120

118121
func readConfig(filename string) (cfg Config, err error) {

0 commit comments

Comments
 (0)