@@ -217,18 +217,34 @@ func (r *RepMgr) resolveNodeID() (string, error) {
217
217
return nodeID , nil
218
218
}
219
219
220
- func (r * RepMgr ) registerPrimary () error {
220
+ func (r * RepMgr ) registerPrimary (restartDaemon bool ) error {
221
221
cmdStr := fmt .Sprintf ("repmgr primary register -f %s -F" , r .ConfigPath )
222
- _ , err := utils .RunCommand (cmdStr , "postgres" )
222
+ if _ , err := utils .RunCommand (cmdStr , "postgres" ); err != nil {
223
+ return fmt .Errorf ("failed to register primary: %s" , err )
224
+ }
223
225
224
- return err
226
+ if restartDaemon {
227
+ if err := r .restartDaemon (); err != nil {
228
+ return fmt .Errorf ("failed to restart repmgr daemon: %s" , err )
229
+ }
230
+ }
231
+
232
+ return nil
225
233
}
226
234
227
- func (r * RepMgr ) registerStandby () error {
235
+ func (r * RepMgr ) registerStandby (restartDaemon bool ) error {
228
236
cmdStr := fmt .Sprintf ("repmgr standby register -f %s -F" , r .ConfigPath )
229
- _ , err := utils .RunCommand (cmdStr , "postgres" )
237
+ if _ , err := utils .RunCommand (cmdStr , "postgres" ); err != nil {
238
+ return fmt .Errorf ("failed to register standby: %s" , err )
239
+ }
230
240
231
- return err
241
+ if restartDaemon {
242
+ if err := r .restartDaemon (); err != nil {
243
+ return fmt .Errorf ("failed to restart repmgr daemon: %s" , err )
244
+ }
245
+ }
246
+
247
+ return nil
232
248
}
233
249
234
250
func (r * RepMgr ) registerWitness (primaryHostname string ) error {
@@ -252,6 +268,15 @@ func (r *RepMgr) unregisterStandby(id int) error {
252
268
return err
253
269
}
254
270
271
+ func (* RepMgr ) restartDaemon () error {
272
+ _ , err := utils .RunCommand ("restart-repmgrd" , "postgres" )
273
+ return err
274
+ }
275
+
276
+ func (r * RepMgr ) daemonRestartRequired (m * Member ) bool {
277
+ return m .Hostname != r .PrivateIP
278
+ }
279
+
255
280
func (r * RepMgr ) unregisterWitness (id int ) error {
256
281
cmdStr := fmt .Sprintf ("repmgr witness unregister -f %s --node-id=%d" , r .ConfigPath , id )
257
282
_ , err := utils .RunCommand (cmdStr , "postgres" )
@@ -325,13 +350,18 @@ func (*RepMgr) Members(ctx context.Context, pg *pgx.Conn) ([]Member, error) {
325
350
}
326
351
327
352
func (r * RepMgr ) Member (ctx context.Context , conn * pgx.Conn ) (* Member , error ) {
353
+ myID , err := r .resolveNodeID ()
354
+ if err != nil {
355
+ return nil , fmt .Errorf ("failed to resolve node id: %s" , err )
356
+ }
357
+
328
358
members , err := r .Members (ctx , conn )
329
359
if err != nil {
330
360
return nil , err
331
361
}
332
362
333
363
for _ , member := range members {
334
- if member .Hostname == r . PrivateIP {
364
+ if fmt . Sprint ( member .ID ) == myID {
335
365
return & member , nil
336
366
}
337
367
}
0 commit comments