Skip to content

Commit dcc5cba

Browse files
authored
fix possible empty host address (#852)
1 parent 3b38575 commit dcc5cba

File tree

3 files changed

+32
-13
lines changed

3 files changed

+32
-13
lines changed

coordinator/provider/coordinator.go

+18-11
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"fmt"
88
"math"
99
"net"
10-
"os"
1110
"slices"
1211
"strconv"
1312
"strings"
@@ -311,22 +310,22 @@ func (qc *qdbCoordinator) lockCoordinator(ctx context.Context, initialRouter boo
311310
if !initialRouter {
312311
return true
313312
}
313+
routerHost, err := config.GetHostOrHostname(config.RouterConfig().Host)
314+
if err != nil {
315+
return false
316+
}
314317
router := &topology.Router{
315318
ID: uuid.NewString(),
316-
Address: net.JoinHostPort(config.RouterConfig().Host, config.RouterConfig().GrpcApiPort),
319+
Address: net.JoinHostPort(routerHost, config.RouterConfig().GrpcApiPort),
317320
State: qdb.OPENED,
318321
}
319322
if err := qc.RegisterRouter(ctx, router); err != nil {
320323
spqrlog.Zero.Error().Err(err).Msg("register router when locking coordinator")
321324
}
322325

323-
host := config.CoordinatorConfig().Host
324-
if host == "" {
325-
var err error
326-
host, err = os.Hostname()
327-
if err != nil {
328-
return false
329-
}
326+
host, err := config.GetHostOrHostname(config.CoordinatorConfig().Host)
327+
if err != nil {
328+
return false
330329
}
331330
coordAddr := net.JoinHostPort(host, config.CoordinatorConfig().GrpcApiPort)
332331
if err := qc.UpdateCoordinator(ctx, coordAddr); err != nil {
@@ -1634,9 +1633,13 @@ func (qc *qdbCoordinator) SyncRouterMetadata(ctx context.Context, qRouter *topol
16341633
}
16351634
spqrlog.Zero.Debug().Msg("successfully add all key ranges")
16361635

1636+
host, err := config.GetHostOrHostname(config.CoordinatorConfig().Host)
1637+
if err != nil {
1638+
return err
1639+
}
16371640
rCl := routerproto.NewTopologyServiceClient(cc)
16381641
if _, err := rCl.UpdateCoordinator(ctx, &routerproto.UpdateCoordinatorRequest{
1639-
Address: net.JoinHostPort(config.CoordinatorConfig().Host, config.CoordinatorConfig().GrpcApiPort),
1642+
Address: net.JoinHostPort(host, config.CoordinatorConfig().GrpcApiPort),
16401643
}); err != nil {
16411644
return err
16421645
}
@@ -1667,9 +1670,13 @@ func (qc *qdbCoordinator) SyncRouterCoordinatorAddress(ctx context.Context, qRou
16671670
/* Update current coordinator address. */
16681671
/* Todo: check that router metadata is in sync. */
16691672

1673+
host, err := config.GetHostOrHostname(config.CoordinatorConfig().Host)
1674+
if err != nil {
1675+
return err
1676+
}
16701677
rCl := routerproto.NewTopologyServiceClient(cc)
16711678
if _, err := rCl.UpdateCoordinator(ctx, &routerproto.UpdateCoordinatorRequest{
1672-
Address: net.JoinHostPort(config.CoordinatorConfig().Host, config.CoordinatorConfig().GrpcApiPort),
1679+
Address: net.JoinHostPort(host, config.CoordinatorConfig().GrpcApiPort),
16731680
}); err != nil {
16741681
return err
16751682
}

pkg/config/router.go

+7
Original file line numberDiff line numberDiff line change
@@ -262,3 +262,10 @@ func initRouterConfig(file *os.File, cfgRouter *Router) error {
262262
func RouterConfig() *Router {
263263
return &cfgRouter
264264
}
265+
266+
func GetHostOrHostname(host string) (string, error) {
267+
if host == "" {
268+
return os.Hostname()
269+
}
270+
return host, nil
271+
}

qdb/etcdqdb.go

+7-2
Original file line numberDiff line numberDiff line change
@@ -529,8 +529,13 @@ func (q *EtcdQDB) RemoveTransferTx(ctx context.Context, key string) error {
529529

530530
// TODO : unit tests
531531
func (q *EtcdQDB) TryCoordinatorLock(ctx context.Context) error {
532+
host, err := config.GetHostOrHostname(config.CoordinatorConfig().Host)
533+
if err != nil {
534+
return err
535+
}
536+
532537
spqrlog.Zero.Debug().
533-
Str("address", config.CoordinatorConfig().Host).
538+
Str("address", host).
534539
Msg("etcdqdb: try coordinator lock")
535540

536541
leaseGrantResp, err := q.cli.Lease.Grant(ctx, CoordKeepAliveTtl)
@@ -550,7 +555,7 @@ func (q *EtcdQDB) TryCoordinatorLock(ctx context.Context) error {
550555
return err
551556
}
552557

553-
op := clientv3.OpPut(coordLockKey, net.JoinHostPort(config.CoordinatorConfig().Host, config.CoordinatorConfig().GrpcApiPort), clientv3.WithLease(clientv3.LeaseID(leaseGrantResp.ID)))
558+
op := clientv3.OpPut(coordLockKey, net.JoinHostPort(host, config.CoordinatorConfig().GrpcApiPort), clientv3.WithLease(clientv3.LeaseID(leaseGrantResp.ID)))
554559
tx := q.cli.Txn(ctx).If(clientv3util.KeyMissing(coordLockKey)).Then(op)
555560
stat, err := tx.Commit()
556561
if err != nil {

0 commit comments

Comments
 (0)