@@ -33,6 +33,7 @@ type RepMgr struct {
33
33
AppName string
34
34
PrimaryRegion string
35
35
Region string
36
+ HostName string
36
37
PrivateIP string
37
38
MachineID string
38
39
DataDir string
@@ -162,12 +163,10 @@ func (r *RepMgr) setDefaults() error {
162
163
return err
163
164
}
164
165
165
- hostname := r .machineIdToDNS (r .MachineID )
166
-
167
166
conf := ConfigMap {
168
167
"node_id" : nodeID ,
169
- "node_name" : fmt .Sprintf ("'%s'" , hostname ),
170
- "conninfo" : fmt .Sprintf ("'host=%s port=%d user=%s dbname=%s connect_timeout=5'" , hostname , r .Port , r .Credentials .Username , r .DatabaseName ),
168
+ "node_name" : fmt .Sprintf ("'%s'" , r . MachineID ),
169
+ "conninfo" : fmt .Sprintf ("'host=%s port=%d user=%s dbname=%s connect_timeout=5'" , r . HostName , r .Port , r .Credentials .Username , r .DatabaseName ),
171
170
"data_directory" : fmt .Sprintf ("'%s'" , r .DataDir ),
172
171
"failover" : "'automatic'" ,
173
172
"use_replication_slots" : "yes" ,
@@ -329,7 +328,7 @@ func (r *RepMgr) regenReplicationConf(ctx context.Context) error {
329
328
// TODO: do we need -c?
330
329
if _ , err := utils .RunCmd (ctx , "postgres" ,
331
330
"repmgr" , "--replication-conf-only" ,
332
- "-h" , r .PrivateIP ,
331
+ "-h" , r .HostName ,
333
332
"-p" , fmt .Sprint (r .Port ),
334
333
"-d" , r .DatabaseName ,
335
334
"-U" , r .Credentials .Username ,
@@ -342,13 +341,14 @@ func (r *RepMgr) regenReplicationConf(ctx context.Context) error {
342
341
343
342
type Member struct {
344
343
ID int
344
+ Name string
345
345
Hostname string
346
346
Active bool
347
347
Region string
348
348
Role string
349
349
}
350
350
351
- func (* RepMgr ) Members (ctx context.Context , pg * pgx.Conn ) ([]Member , error ) {
351
+ func (r * RepMgr ) Members (ctx context.Context , pg * pgx.Conn ) ([]Member , error ) {
352
352
sql := "select node_id, node_name, location, active, type from repmgr.nodes;"
353
353
rows , err := pg .Query (ctx , sql )
354
354
if err != nil {
@@ -359,10 +359,12 @@ func (*RepMgr) Members(ctx context.Context, pg *pgx.Conn) ([]Member, error) {
359
359
var members []Member
360
360
for rows .Next () {
361
361
var member Member
362
- if err := rows .Scan (& member .ID , & member .Hostname , & member .Region , & member .Active , & member .Role ); err != nil {
362
+ if err := rows .Scan (& member .ID , & member .Name , & member .Region , & member .Active , & member .Role ); err != nil {
363
363
return nil , err
364
364
}
365
365
366
+ member .Hostname = r .machineIDToDNS (member .Name )
367
+
366
368
members = append (members , member )
367
369
}
368
370
@@ -389,14 +391,16 @@ func (r *RepMgr) Member(ctx context.Context, conn *pgx.Conn) (*Member, error) {
389
391
return nil , pgx .ErrNoRows
390
392
}
391
393
392
- func (* RepMgr ) PrimaryMember (ctx context.Context , pg * pgx.Conn ) (* Member , error ) {
394
+ func (r * RepMgr ) PrimaryMember (ctx context.Context , pg * pgx.Conn ) (* Member , error ) {
393
395
var member Member
394
396
sql := "select node_id, node_name, location, active, type from repmgr.nodes where type = 'primary' and active = true;"
395
- err := pg .QueryRow (ctx , sql ).Scan (& member .ID , & member .Hostname , & member .Region , & member .Active , & member .Role )
397
+ err := pg .QueryRow (ctx , sql ).Scan (& member .ID , & member .Name , & member .Region , & member .Active , & member .Role )
396
398
if err != nil {
397
399
return nil , err
398
400
}
399
401
402
+ member .Hostname = r .machineIDToDNS (member .Name )
403
+
400
404
return & member , nil
401
405
}
402
406
@@ -437,6 +441,20 @@ func (*RepMgr) MemberByID(ctx context.Context, pg *pgx.Conn, id int) (*Member, e
437
441
return & member , nil
438
442
}
439
443
444
+ func (r * RepMgr ) MemberByNodeName (ctx context.Context , pg * pgx.Conn , name string ) (* Member , error ) {
445
+ var member Member
446
+ sql := fmt .Sprintf ("select node_id, node_name, location, active, type from repmgr.nodes where node_name = '%s';" , name )
447
+
448
+ err := pg .QueryRow (ctx , sql ).Scan (& member .ID , & member .Name , & member .Region , & member .Active , & member .Role )
449
+ if err != nil {
450
+ return nil , err
451
+ }
452
+
453
+ member .Hostname = r .machineIDToDNS (name )
454
+
455
+ return & member , nil
456
+ }
457
+
440
458
func (* RepMgr ) MemberByHostname (ctx context.Context , pg * pgx.Conn , hostname string ) (* Member , error ) {
441
459
var member Member
442
460
sql := fmt .Sprintf ("select node_id, node_name, location, active, type from repmgr.nodes where node_name = '%s';" , hostname )
@@ -449,26 +467,28 @@ func (*RepMgr) MemberByHostname(ctx context.Context, pg *pgx.Conn, hostname stri
449
467
return & member , nil
450
468
}
451
469
452
- func (r * RepMgr ) ResolveMemberOverDNS (ctx context.Context ) (* Member , error ) {
453
- machineIds , err := r .InRegionPeerMachines (ctx )
470
+ func (r * RepMgr ) ResolvePrimaryOverDNS (ctx context.Context ) (* Member , error ) {
471
+ machineIDs , err := r .InRegionPeerMachines (ctx )
454
472
if err != nil {
455
473
return nil , err
456
474
}
457
475
458
476
var target * Member
459
477
460
- for _ , machineId := range machineIds {
461
- if machineId == r .MachineID {
478
+ for _ , machineID := range machineIDs {
479
+ if machineID == r .MachineID {
462
480
continue
463
481
}
464
482
465
- conn , err := r .NewRemoteConnection (ctx , r .machineIdToDNS (machineId ))
483
+ hostname := r .machineIDToDNS (machineID )
484
+
485
+ conn , err := r .NewRemoteConnection (ctx , hostname )
466
486
if err != nil {
467
487
continue
468
488
}
469
489
defer func () { _ = conn .Close (ctx ) }()
470
490
471
- member , err := r .MemberByHostname (ctx , conn , r . machineIdToDNS ( machineId ) )
491
+ member , err := r .MemberByNodeName (ctx , conn , machineID )
472
492
if err != nil {
473
493
continue
474
494
}
@@ -548,7 +568,7 @@ func (r *RepMgr) eligiblePrimary() bool {
548
568
return r .Region == r .PrimaryRegion
549
569
}
550
570
551
- func (r * RepMgr ) machineIdToDNS (nodeName string ) string {
571
+ func (r * RepMgr ) machineIDToDNS (nodeName string ) string {
552
572
if len (nodeName ) != 14 {
553
573
panic ("invalid machine id" )
554
574
}
0 commit comments