Skip to content

Commit 2a8d98e

Browse files
committed
Simplified realtime fallbacks, Removed use of separate hosts struct and tests
1 parent 2168f83 commit 2a8d98e

File tree

4 files changed

+11
-234
lines changed

4 files changed

+11
-234
lines changed

ably/export_test.go

-34
Original file line numberDiff line numberDiff line change
@@ -6,46 +6,12 @@ import (
66
"net/http/httptrace"
77
"net/url"
88
"time"
9-
10-
"github.com/ably/ably-go/ably/internal/ablyutil"
119
)
1210

1311
func NewClientOptions(os ...ClientOption) *clientOptions {
1412
return applyOptionsWithDefaults(os...)
1513
}
1614

17-
func NewRealtimeHosts(opts *clientOptions) *realtimeHosts {
18-
return newRealtimeHosts(opts)
19-
}
20-
21-
func (realtimeHosts *realtimeHosts) NextFallbackHost() string {
22-
return realtimeHosts.nextFallbackHost()
23-
}
24-
25-
func (realtimeHosts *realtimeHosts) GetAllRemainingFallbackHosts() []string {
26-
var hosts []string
27-
for true {
28-
fallbackHost := realtimeHosts.NextFallbackHost()
29-
if ablyutil.Empty(fallbackHost) {
30-
break
31-
}
32-
hosts = append(hosts, fallbackHost)
33-
}
34-
return hosts
35-
}
36-
37-
func (realtimeHosts *realtimeHosts) ResetVisitedFallbackHosts() {
38-
realtimeHosts.resetVisitedFallbackHosts()
39-
}
40-
41-
func (realtimeHosts *realtimeHosts) FallbackHostsRemaining() int {
42-
return realtimeHosts.fallbackHostsRemaining()
43-
}
44-
45-
func (realtimeHosts *realtimeHosts) GetPreferredHost() string {
46-
return realtimeHosts.getPreferredHost()
47-
}
48-
4915
func GetEnvFallbackHosts(env string) []string {
5016
return getEnvFallbackHosts(env)
5117
}

ably/hosts.go

-70
This file was deleted.

ably/hosts_test.go

-120
This file was deleted.

ably/realtime_conn.go

+11-10
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"strconv"
99
"sync"
1010
"time"
11+
12+
"github.com/ably/ably-go/ably/internal/ablyutil"
1113
)
1214

1315
var (
@@ -77,7 +79,6 @@ type Connection struct {
7779
// after a reauthorization, to avoid re-reauthorizing.
7880
reauthorizing bool
7981
arg connArgs
80-
hosts *realtimeHosts
8182
client *Realtime
8283

8384
readLimit int64
@@ -113,7 +114,6 @@ func newConn(opts *clientOptions, auth *Auth, callbacks connCallbacks, client *R
113114
}
114115
auth.onExplicitAuthorize = c.onClientAuthorize
115116
c.queue = newMsgQueue(c)
116-
c.hosts = newRealtimeHosts(c.opts)
117117
if !opts.NoConnect {
118118
c.setState(ConnectionStateConnecting, nil, 0)
119119
go func() {
@@ -368,7 +368,6 @@ func (c *Connection) connectWithRetryLoop(arg connArgs) (result, error) {
368368
}
369369

370370
func (c *Connection) connectWith(arg connArgs) (result, error) {
371-
defer c.hosts.resetVisitedFallbackHosts()
372371
connectMode := c.getMode()
373372

374373
c.mtx.Lock()
@@ -388,8 +387,11 @@ func (c *Connection) connectWith(arg connArgs) (result, error) {
388387
}
389388

390389
var conn conn
391-
host := c.hosts.getPreferredHost()
392-
for {
390+
primaryHost := c.opts.getRealtimeHost()
391+
fallbackHosts, _ := c.opts.getFallbackHosts()
392+
// Always try primary host first and then fallback hosts for realtime conn
393+
hosts := append([]string{primaryHost}, ablyutil.Shuffle(fallbackHosts)...)
394+
for hostCounter, host := range hosts {
393395
u, err := url.Parse(c.opts.realtimeURL(host))
394396
if err != nil {
395397
return nil, err
@@ -407,19 +409,18 @@ func (c *Connection) connectWith(arg connArgs) (result, error) {
407409
// if err is nil, raw connection with server is successful
408410
conn, err = c.dial(proto, u)
409411
if err == nil { // success
410-
if host != c.hosts.getPrimaryHost() { // RTN17e
412+
if host != primaryHost { // RTN17e
411413
c.client.rest.setActiveRealtimeHost(host)
412414
} else if !empty(c.client.rest.activeRealtimeHost) {
413415
c.client.rest.setActiveRealtimeHost("") // reset to default
414416
}
415417
break
416418
}
417419
resp := extractHttpResponseFromConn(c.conn)
418-
if c.hosts.fallbackHostsRemaining() > 0 && canFallBack(err, resp) && c.opts.hasActiveInternetConnection() { // RTN17d, RTN17c
419-
host = c.hosts.nextFallbackHost()
420-
} else {
421-
return nil, err
420+
if hostCounter < len(hosts)-1 && canFallBack(err, resp) && c.opts.hasActiveInternetConnection() { // RTN17d, RTN17c
421+
continue
422422
}
423+
return nil, err
423424
}
424425

425426
c.mtx.Lock()

0 commit comments

Comments
 (0)