change id to url semantics

This commit is contained in:
Jay
2026-06-07 09:17:23 -04:00
parent 697d02950c
commit df14aeddaf
5 changed files with 42 additions and 42 deletions
+27 -27
View File
@@ -46,7 +46,7 @@ const (
) )
type PoolEvent struct { type PoolEvent struct {
ID string URL string
Kind PoolEventKind Kind PoolEventKind
At time.Time At time.Time
Err error Err error
@@ -64,7 +64,7 @@ type PoolStats struct {
} }
type PeerStats struct { type PeerStats struct {
ID string URL string
Session SessionStats Session SessionStats
} }
@@ -153,7 +153,7 @@ func ValidatePoolConfig(c *PoolConfig) error {
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
type Peer struct { type Peer struct {
id string url string
session *session session *session
} }
@@ -238,9 +238,9 @@ func (p *Pool) Stats() PoolStats {
count := len(p.peers) count := len(p.peers)
peerStats := make([]PeerStats, 0, count) peerStats := make([]PeerStats, 0, count)
for id, peer := range p.peers { for url, peer := range p.peers {
peerStats = append(peerStats, PeerStats{ peerStats = append(peerStats, PeerStats{
ID: id, URL: url,
Session: peer.session.Stats(), Session: peer.session.Stats(),
}) })
} }
@@ -257,17 +257,17 @@ func (p *Pool) Stats() PoolStats {
} }
} }
func (p *Pool) PeerStats(id string) (PeerStats, error) { func (p *Pool) PeerStats(url string) (PeerStats, error) {
p.mu.RLock() p.mu.RLock()
defer p.mu.RUnlock() defer p.mu.RUnlock()
peer, exists := p.peers[id] peer, exists := p.peers[url]
if !exists { if !exists {
return PeerStats{}, ErrPeerNotFound return PeerStats{}, ErrPeerNotFound
} }
return PeerStats{ return PeerStats{
ID: id, URL: url,
Session: peer.session.Stats(), Session: peer.session.Stats(),
}, nil }, nil
} }
@@ -317,12 +317,12 @@ func WithDialFunc(f func(context.Context) (types.Socket, error)) ConnectOption {
} }
} }
func (p *Pool) Connect(id string, opts ...ConnectOption) error { func (p *Pool) Connect(url string, opts ...ConnectOption) error {
if p.logger != nil { if p.logger != nil {
p.logger.Info("connecting", "peer", id) p.logger.Info("connecting", "peer", url)
} }
id, err := transport.NormalizeURL(id) url, err := transport.NormalizeURL(url)
if err != nil { if err != nil {
return err return err
} }
@@ -334,7 +334,7 @@ func (p *Pool) Connect(id string, opts ...ConnectOption) error {
return ErrPoolClosed return ErrPoolClosed
} }
if _, exists := p.peers[id]; exists { if _, exists := p.peers[url]; exists {
return ErrPeerExists return ErrPeerExists
} }
@@ -348,7 +348,7 @@ func (p *Pool) Connect(id string, opts ...ConnectOption) error {
hdr = p.config.RequestHeader.Clone() hdr = p.config.RequestHeader.Clone()
} }
dialFn := func(ctx context.Context) (types.Socket, error) { dialFn := func(ctx context.Context) (types.Socket, error) {
socket, _, err := p.dialer.DialContext(ctx, id, hdr) socket, _, err := p.dialer.DialContext(ctx, url, hdr)
return socket, err return socket, err
} }
@@ -357,7 +357,7 @@ func (p *Pool) Connect(id string, opts ...ConnectOption) error {
} }
sc := p.config.SessionConfig sc := p.config.SessionConfig
session, err := newSession(p.ctx, id, dialFn, &sc, p.handler) session, err := newSession(p.ctx, url, dialFn, &sc, p.handler)
if err != nil { if err != nil {
return err return err
} }
@@ -372,9 +372,9 @@ func (p *Pool) Connect(id string, opts ...ConnectOption) error {
p.mu.Unlock() p.mu.Unlock()
return return
} }
delete(p.peers, id) delete(p.peers, url)
p.mu.Unlock() p.mu.Unlock()
p.events <- PoolEvent{ID: id, Kind: EventRetired, Err: err, At: time.Now()} p.events <- PoolEvent{URL: url, Kind: EventRetired, Err: err, At: time.Now()}
}, },
} }
@@ -382,21 +382,21 @@ func (p *Pool) Connect(id string, opts ...ConnectOption) error {
session.Start(pool) session.Start(pool)
}) })
p.peers[id] = &Peer{id: id, session: session} p.peers[url] = &Peer{url: url, session: session}
if p.logger != nil { if p.logger != nil {
p.logger.Debug("registered peer", "peer", id) p.logger.Debug("registered peer", "peer", url)
} }
return nil return nil
} }
func (p *Pool) Remove(id string) error { func (p *Pool) Remove(url string) error {
if p.logger != nil { if p.logger != nil {
p.logger.Info("disconnecting", "peer", id) p.logger.Info("disconnecting", "peer", url)
} }
id, err := transport.NormalizeURL(id) url, err := transport.NormalizeURL(url)
if err != nil { if err != nil {
return err return err
} }
@@ -408,23 +408,23 @@ func (p *Pool) Remove(id string) error {
return ErrPoolClosed return ErrPoolClosed
} }
peer, exists := p.peers[id] peer, exists := p.peers[url]
if !exists { if !exists {
return ErrPeerNotFound return ErrPeerNotFound
} }
delete(p.peers, id) delete(p.peers, url)
peer.session.Stop() peer.session.Stop()
if p.logger != nil { if p.logger != nil {
p.logger.Debug("disconnected from peer", "peer", id) p.logger.Debug("disconnected from peer", "peer", url)
} }
return nil return nil
} }
func (p *Pool) Send(id string, data []byte) error { func (p *Pool) Send(url string, data []byte) error {
id, err := transport.NormalizeURL(id) url, err := transport.NormalizeURL(url)
if err != nil { if err != nil {
return err return err
} }
@@ -436,7 +436,7 @@ func (p *Pool) Send(id string, data []byte) error {
return ErrPoolClosed return ErrPoolClosed
} }
peer, exists := p.peers[id] peer, exists := p.peers[url]
if !exists { if !exists {
return ErrPeerNotFound return ErrPeerNotFound
} }
+5 -5
View File
@@ -41,7 +41,7 @@ func expectEvent(
honeybeetest.Eventually(t, func() bool { honeybeetest.Eventually(t, func() bool {
select { select {
case e := <-events: case e := <-events:
return e.ID == expectedURL && e.Kind == expectedKind && !e.At.IsZero() return e.URL == expectedURL && e.Kind == expectedKind && !e.At.IsZero()
default: default:
return false return false
} }
@@ -60,7 +60,7 @@ func TestPoolConnect(t *testing.T) {
honeybeetest.Eventually(t, func() bool { honeybeetest.Eventually(t, func() bool {
select { select {
case event := <-pool.events: case event := <-pool.events:
return event.ID == "wss://test" && event.Kind == EventConnected return event.URL == "wss://test" && event.Kind == EventConnected
default: default:
return false return false
} }
@@ -116,7 +116,7 @@ func TestPoolConnectWithDialer(t *testing.T) {
honeybeetest.Eventually(t, func() bool { honeybeetest.Eventually(t, func() bool {
select { select {
case e := <-pool.events: case e := <-pool.events:
return e.ID == "wss://test" && e.Kind == EventConnected return e.URL == "wss://test" && e.Kind == EventConnected
default: default:
return false return false
} }
@@ -210,7 +210,7 @@ func TestPoolDialFailed(t *testing.T) {
select { select {
case e := <-pool.Events(): case e := <-pool.Events():
return e.Kind == EventDialFailed && return e.Kind == EventDialFailed &&
e.ID == "wss://test" && e.URL == "wss://test" &&
e.Err == dialErr && e.Err == dialErr &&
!e.At.IsZero() !e.At.IsZero()
default: default:
@@ -264,7 +264,7 @@ func TestPoolRetire(t *testing.T) {
honeybeetest.Eventually(t, func() bool { honeybeetest.Eventually(t, func() bool {
select { select {
case e := <-pool.Events(): case e := <-pool.Events():
return e.Kind == EventRetired && e.ID == "wss://test" return e.Kind == EventRetired && e.URL == "wss://test"
default: default:
return false return false
} }
+6 -6
View File
@@ -218,11 +218,11 @@ func (w *session) dial(
return return
} }
pool.Events <- PoolEvent{ pool.Events <- PoolEvent{
ID: w.url, Kind: EventDialFailed, Err: err, At: time.Now()} URL: w.url, Kind: EventDialFailed, Err: err, At: time.Now()}
} }
socket, err := transport.DialWithRetry( socket, err := transport.DialWithRetry(
ctx, retryMgr, w.dialFn, onError, w.handler, ctx, retryMgr, w.dialFn, onError, w.handler)
)
if err != nil { if err != nil {
if pool.Retire != nil && if pool.Retire != nil &&
!errors.Is(err, context.Canceled) && !errors.Is(err, context.Canceled) &&
@@ -246,7 +246,7 @@ func (w *session) serve(
// setup connection // setup connection
w.conn.Store(conn) w.conn.Store(conn)
pool.Events <- PoolEvent{ID: w.url, Kind: EventConnected, At: time.Now()} pool.Events <- PoolEvent{URL: w.url, Kind: EventConnected, At: time.Now()}
// start keepalive service // start keepalive service
stopKeepalive, inactive, heartbeat := w.startKeepalive() stopKeepalive, inactive, heartbeat := w.startKeepalive()
@@ -273,7 +273,7 @@ session:
} }
pool.Inbox <- types.InboxMessage{ pool.Inbox <- types.InboxMessage{
ID: w.url, Data: data, ReceivedAt: time.Now()} URL: w.url, Data: data, ReceivedAt: time.Now()}
pool.InboxCounter.Add(1) pool.InboxCounter.Add(1)
w.processedCount.Add(1) w.processedCount.Add(1)
@@ -300,7 +300,7 @@ session:
// tear down connection // tear down connection
w.conn.Store(nil) w.conn.Store(nil)
pool.Events <- PoolEvent{ID: w.url, Kind: EventDisconnected, At: time.Now()} pool.Events <- PoolEvent{URL: w.url, Kind: EventDisconnected, At: time.Now()}
if w.logger != nil { if w.logger != nil {
w.logger.Info("disconnected") w.logger.Info("disconnected")
+3 -3
View File
@@ -73,7 +73,7 @@ func TestSession(t *testing.T) {
honeybeetest.Eventually(t, func() bool { honeybeetest.Eventually(t, func() bool {
select { select {
case e := <-events: case e := <-events:
return e.ID == w.url && e.Kind == EventConnected return e.URL == w.url && e.Kind == EventConnected
default: default:
return false return false
} }
@@ -334,7 +334,7 @@ func TestSession(t *testing.T) {
return false return false
} }
}, "expected message on Inbox") }, "expected message on Inbox")
assert.Equal(t, w.url, received.ID) assert.Equal(t, w.url, received.URL)
assert.Equal(t, []byte("hello"), received.Data) assert.Equal(t, []byte("hello"), received.Data)
assert.False(t, received.ReceivedAt.IsZero(), "expected non-zero ReceivedAt") assert.False(t, received.ReceivedAt.IsZero(), "expected non-zero ReceivedAt")
}) })
@@ -637,7 +637,7 @@ func TestSession(t *testing.T) {
select { select {
case e := <-events: case e := <-events:
return e.Kind == EventDialFailed && return e.Kind == EventDialFailed &&
e.ID == w.url && e.URL == w.url &&
e.Err == dialErr && e.Err == dialErr &&
!e.At.IsZero() !e.At.IsZero()
default: default:
+1 -1
View File
@@ -31,7 +31,7 @@ type ReceivedMessage struct {
} }
type InboxMessage struct { type InboxMessage struct {
ID string URL string
Data []byte Data []byte
ReceivedAt time.Time ReceivedAt time.Time
} }