align with honeybee updates. change ID to URL semantics.
This commit is contained in:
@@ -85,16 +85,16 @@ func (m *AuthManager) routeInbox() {
|
|||||||
m.mu.Unlock()
|
m.mu.Unlock()
|
||||||
|
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
m.envoy.Observer().Record(msg.ID, ChallengeReceived{Challenge: challenge, At: now})
|
m.envoy.Observer().Record(msg.URL, ChallengeReceived{Challenge: challenge, At: now})
|
||||||
|
|
||||||
signed, err := m.respond(challenge)
|
signed, err := m.respond(challenge)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
m.envoy.Observer().Record(msg.ID, AuthResponseFailed{Err: err, At: time.Now()})
|
m.envoy.Observer().Record(msg.URL, AuthResponseFailed{Err: err, At: time.Now()})
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := m.envoy.Send([]byte(envelope.EncloseAuthResponse(signed))); err != nil {
|
if err := m.envoy.Send([]byte(envelope.EncloseAuthResponse(signed))); err != nil {
|
||||||
m.envoy.Observer().Record(msg.ID, AuthResponseFailed{Err: err, At: time.Now()})
|
m.envoy.Observer().Record(msg.URL, AuthResponseFailed{Err: err, At: time.Now()})
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,7 +102,7 @@ func (m *AuthManager) routeInbox() {
|
|||||||
m.logger.Info("responded to auth", "challenge", challenge)
|
m.logger.Info("responded to auth", "challenge", challenge)
|
||||||
}
|
}
|
||||||
|
|
||||||
m.envoy.Observer().Record(msg.ID, AuthResponseSent{At: time.Now()})
|
m.envoy.Observer().Record(msg.URL, AuthResponseSent{At: time.Now()})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+28
-13
@@ -30,6 +30,7 @@ const (
|
|||||||
EventConnected EmbassyEventKind = iota
|
EventConnected EmbassyEventKind = iota
|
||||||
EventDisconnected
|
EventDisconnected
|
||||||
EventDialFailed
|
EventDialFailed
|
||||||
|
EventRetired
|
||||||
EventEmbassyUnknown
|
EventEmbassyUnknown
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -41,20 +42,22 @@ func mapEmbassyEvent(kind honeybee.PoolEventKind) EmbassyEventKind {
|
|||||||
return EventDisconnected
|
return EventDisconnected
|
||||||
case honeybee.EventDialFailed:
|
case honeybee.EventDialFailed:
|
||||||
return EventDialFailed
|
return EventDialFailed
|
||||||
|
case honeybee.EventRetired:
|
||||||
|
return EventRetired
|
||||||
default:
|
default:
|
||||||
return EventEmbassyUnknown
|
return EventEmbassyUnknown
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type PoolEvent struct {
|
type PoolEvent struct {
|
||||||
ID string
|
URL string
|
||||||
Kind EmbassyEventKind
|
Kind EmbassyEventKind
|
||||||
At time.Time
|
At time.Time
|
||||||
Err error
|
Err error
|
||||||
}
|
}
|
||||||
|
|
||||||
type InboxMessage struct {
|
type InboxMessage struct {
|
||||||
ID string
|
URL string
|
||||||
Data []byte
|
Data []byte
|
||||||
ReceivedAt time.Time
|
ReceivedAt time.Time
|
||||||
}
|
}
|
||||||
@@ -249,7 +252,7 @@ func (e *Embassy) routeEvents() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
url, err := honeybee.NormalizeURL(ev.ID)
|
url, err := honeybee.NormalizeURL(ev.URL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -266,7 +269,7 @@ func (e *Embassy) routeEvents() {
|
|||||||
case <-e.ctx.Done():
|
case <-e.ctx.Done():
|
||||||
return
|
return
|
||||||
case sub <- PoolEvent{
|
case sub <- PoolEvent{
|
||||||
ID: ev.ID, Kind: mapEmbassyEvent(ev.Kind), At: ev.At, Err: ev.Err,
|
URL: ev.URL, Kind: mapEmbassyEvent(ev.Kind), At: ev.At, Err: ev.Err,
|
||||||
}:
|
}:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -283,7 +286,7 @@ func (e *Embassy) routeInbox() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
url, err := honeybee.NormalizeURL(ev.ID)
|
url, err := honeybee.NormalizeURL(ev.URL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -300,7 +303,7 @@ func (e *Embassy) routeInbox() {
|
|||||||
case <-e.ctx.Done():
|
case <-e.ctx.Done():
|
||||||
return
|
return
|
||||||
case sub <- InboxMessage{
|
case sub <- InboxMessage{
|
||||||
ID: ev.ID, Data: ev.Data, ReceivedAt: ev.ReceivedAt}:
|
URL: ev.URL, Data: ev.Data, ReceivedAt: ev.ReceivedAt}:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -318,9 +321,9 @@ type Envoy struct {
|
|||||||
send func(data []byte) error
|
send func(data []byte) error
|
||||||
events <-chan PoolEvent
|
events <-chan PoolEvent
|
||||||
inbox <-chan InboxMessage
|
inbox <-chan InboxMessage
|
||||||
eventSubs []chan<- PoolEvent
|
eventSubs []chan PoolEvent
|
||||||
labelledInboxSubs map[string][]chan<- InboxMessage
|
labelledInboxSubs map[string][]chan InboxMessage
|
||||||
inboxSubs []chan<- InboxMessage
|
inboxSubs []chan InboxMessage
|
||||||
|
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
cancel context.CancelFunc
|
cancel context.CancelFunc
|
||||||
@@ -350,7 +353,7 @@ func newEnvoy(
|
|||||||
send: send,
|
send: send,
|
||||||
events: events,
|
events: events,
|
||||||
inbox: inbox,
|
inbox: inbox,
|
||||||
labelledInboxSubs: make(map[string][]chan<- InboxMessage),
|
labelledInboxSubs: make(map[string][]chan InboxMessage),
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
cancel: cancel,
|
cancel: cancel,
|
||||||
observer: observer,
|
observer: observer,
|
||||||
@@ -378,7 +381,7 @@ func (e *Envoy) Context() context.Context {
|
|||||||
return e.ctx
|
return e.ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Envoy) PeerID() string {
|
func (e *Envoy) URL() string {
|
||||||
return e.url
|
return e.url
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -408,7 +411,7 @@ func (e *Envoy) Dismiss() {
|
|||||||
|
|
||||||
e.eventSubs = nil
|
e.eventSubs = nil
|
||||||
e.inboxSubs = nil
|
e.inboxSubs = nil
|
||||||
e.labelledInboxSubs = make(map[string][]chan<- InboxMessage)
|
e.labelledInboxSubs = make(map[string][]chan InboxMessage)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Envoy) Send(data []byte) error {
|
func (e *Envoy) Send(data []byte) error {
|
||||||
@@ -423,6 +426,18 @@ func (e *Envoy) SubscribeEvents() <-chan PoolEvent {
|
|||||||
return ch
|
return ch
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *Envoy) UnsubscribeEvents(ch <-chan PoolEvent) {
|
||||||
|
e.mu.Lock()
|
||||||
|
defer e.mu.Unlock()
|
||||||
|
for i, sub := range e.eventSubs {
|
||||||
|
if sub == ch {
|
||||||
|
e.eventSubs[i] = e.eventSubs[len(e.eventSubs)-1]
|
||||||
|
e.eventSubs = e.eventSubs[:len(e.eventSubs)-1]
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (e *Envoy) SubscribeInbox(labels []string) <-chan InboxMessage {
|
func (e *Envoy) SubscribeInbox(labels []string) <-chan InboxMessage {
|
||||||
e.mu.Lock()
|
e.mu.Lock()
|
||||||
defer e.mu.Unlock()
|
defer e.mu.Unlock()
|
||||||
@@ -430,7 +445,7 @@ func (e *Envoy) SubscribeInbox(labels []string) <-chan InboxMessage {
|
|||||||
e.inboxSubs = append(e.inboxSubs, ch)
|
e.inboxSubs = append(e.inboxSubs, ch)
|
||||||
for _, label := range labels {
|
for _, label := range labels {
|
||||||
if _, ok := e.labelledInboxSubs[label]; !ok {
|
if _, ok := e.labelledInboxSubs[label]; !ok {
|
||||||
e.labelledInboxSubs[label] = make([]chan<- InboxMessage, 0)
|
e.labelledInboxSubs[label] = make([]chan InboxMessage, 0)
|
||||||
}
|
}
|
||||||
e.labelledInboxSubs[label] = append(e.labelledInboxSubs[label], ch)
|
e.labelledInboxSubs[label] = append(e.labelledInboxSubs[label], ch)
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-5
@@ -42,16 +42,16 @@ func TestEmbassy_Dispatch(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
p.events <- honeybee.PoolEvent{
|
p.events <- honeybee.PoolEvent{
|
||||||
ID: p.url, Kind: honeybee.EventConnected, At: time.Now()}
|
URL: p.url, Kind: honeybee.EventConnected, At: time.Now()}
|
||||||
p.events <- honeybee.PoolEvent{
|
p.events <- honeybee.PoolEvent{
|
||||||
ID: "wss://other", Kind: honeybee.EventConnected, At: time.Now()}
|
URL: "wss://other", Kind: honeybee.EventConnected, At: time.Now()}
|
||||||
p.inbox <- honeybee.InboxMessage{
|
p.inbox <- honeybee.InboxMessage{
|
||||||
ID: p.url,
|
URL: p.url,
|
||||||
Data: envelope.EncloseEvent([]byte("{}")),
|
Data: envelope.EncloseEvent([]byte("{}")),
|
||||||
ReceivedAt: time.Now(),
|
ReceivedAt: time.Now(),
|
||||||
}
|
}
|
||||||
p.inbox <- honeybee.InboxMessage{
|
p.inbox <- honeybee.InboxMessage{
|
||||||
ID: "wss://other",
|
URL: "wss://other",
|
||||||
Data: envelope.EncloseEvent([]byte("{}")),
|
Data: envelope.EncloseEvent([]byte("{}")),
|
||||||
ReceivedAt: time.Now(),
|
ReceivedAt: time.Now(),
|
||||||
}
|
}
|
||||||
@@ -114,7 +114,7 @@ func TestEmbassy_DialFailed_Routing(t *testing.T) {
|
|||||||
|
|
||||||
assert.Equal(t, EventDialFailed, got.Kind)
|
assert.Equal(t, EventDialFailed, got.Kind)
|
||||||
assert.ErrorIs(t, got.Err, dialErr)
|
assert.ErrorIs(t, got.Err, dialErr)
|
||||||
assert.Equal(t, p.url, got.ID)
|
assert.Equal(t, p.url, got.URL)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("not routed to unrelated envoy subscriber", func(t *testing.T) {
|
t.Run("not routed to unrelated envoy subscriber", func(t *testing.T) {
|
||||||
|
|||||||
+4
-4
@@ -75,7 +75,7 @@ func TestEnvoy_IsConnected(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
events <- PoolEvent{
|
events <- PoolEvent{
|
||||||
ID: url, Kind: EventConnected, At: time.Now()}
|
URL: url, Kind: EventConnected, At: time.Now()}
|
||||||
|
|
||||||
Eventually(t, func() bool {
|
Eventually(t, func() bool {
|
||||||
return envoy.IsConnected()
|
return envoy.IsConnected()
|
||||||
@@ -101,7 +101,7 @@ func TestEnvoy_Events(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
events <- PoolEvent{
|
events <- PoolEvent{
|
||||||
ID: url, Kind: EventConnected, At: time.Now()}
|
URL: url, Kind: EventConnected, At: time.Now()}
|
||||||
|
|
||||||
Eventually(t, func() bool {
|
Eventually(t, func() bool {
|
||||||
mu.RLock()
|
mu.RLock()
|
||||||
@@ -133,12 +133,12 @@ func TestEnvoy_Inbox(t *testing.T) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
inbox <- InboxMessage{
|
inbox <- InboxMessage{
|
||||||
ID: url,
|
URL: url,
|
||||||
Data: envelope.EncloseEvent([]byte("{}")),
|
Data: envelope.EncloseEvent([]byte("{}")),
|
||||||
ReceivedAt: time.Now(),
|
ReceivedAt: time.Now(),
|
||||||
}
|
}
|
||||||
inbox <- InboxMessage{
|
inbox <- InboxMessage{
|
||||||
ID: url,
|
URL: url,
|
||||||
Data: envelope.EncloseOK("id", true, "ok"),
|
Data: envelope.EncloseOK("id", true, "ok"),
|
||||||
ReceivedAt: time.Now(),
|
ReceivedAt: time.Now(),
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -87,22 +87,22 @@ func newMockPool(t *testing.T) *mockPool {
|
|||||||
|
|
||||||
func (p *mockPool) connect() {
|
func (p *mockPool) connect() {
|
||||||
p.events <- honeybee.PoolEvent{
|
p.events <- honeybee.PoolEvent{
|
||||||
ID: p.url, Kind: honeybee.EventConnected, At: time.Now()}
|
URL: p.url, Kind: honeybee.EventConnected, At: time.Now()}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *mockPool) disconnect() {
|
func (p *mockPool) disconnect() {
|
||||||
p.events <- honeybee.PoolEvent{
|
p.events <- honeybee.PoolEvent{
|
||||||
ID: p.url, Kind: honeybee.EventDisconnected, At: time.Now()}
|
URL: p.url, Kind: honeybee.EventDisconnected, At: time.Now()}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *mockPool) dialFail(err error) {
|
func (p *mockPool) dialFail(err error) {
|
||||||
p.events <- honeybee.PoolEvent{
|
p.events <- honeybee.PoolEvent{
|
||||||
ID: p.url, Kind: honeybee.EventDialFailed, Err: err, At: time.Now()}
|
URL: p.url, Kind: honeybee.EventDialFailed, Err: err, At: time.Now()}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *mockPool) receive(data []byte) {
|
func (p *mockPool) receive(data []byte) {
|
||||||
p.inbox <- honeybee.InboxMessage{
|
p.inbox <- honeybee.InboxMessage{
|
||||||
ID: p.url,
|
URL: p.url,
|
||||||
Data: data,
|
Data: data,
|
||||||
ReceivedAt: time.Now(),
|
ReceivedAt: time.Now(),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ type NoticeReceived struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Notice struct {
|
type Notice struct {
|
||||||
PeerID string
|
Peer string
|
||||||
Message string
|
Message string
|
||||||
Timestamp time.Time
|
Timestamp time.Time
|
||||||
}
|
}
|
||||||
@@ -62,11 +62,11 @@ func (h *NoticeHandler) route() {
|
|||||||
}
|
}
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
h.notices <- Notice{
|
h.notices <- Notice{
|
||||||
PeerID: msg.ID,
|
Peer: msg.URL,
|
||||||
Message: message,
|
Message: message,
|
||||||
Timestamp: now,
|
Timestamp: now,
|
||||||
}
|
}
|
||||||
h.envoy.Observer().Record(msg.ID, NoticeReceived{
|
h.envoy.Observer().Record(msg.URL, NoticeReceived{
|
||||||
Message: message,
|
Message: message,
|
||||||
At: now,
|
At: now,
|
||||||
})
|
})
|
||||||
|
|||||||
+1
-1
@@ -26,7 +26,7 @@ func TestNoticeHandler(t *testing.T) {
|
|||||||
}, "notice not delivered")
|
}, "notice not delivered")
|
||||||
|
|
||||||
assert.Equal(t, "hello", got.Message)
|
assert.Equal(t, "hello", got.Message)
|
||||||
assert.Equal(t, p.url, got.PeerID)
|
assert.Equal(t, p.url, got.Peer)
|
||||||
assert.False(t, got.Timestamp.IsZero())
|
assert.False(t, got.Timestamp.IsZero())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -103,7 +103,7 @@ func (p *EventPublisher) Publish(eventID string, eventJSON []byte, timeout time.
|
|||||||
p.mu.Lock()
|
p.mu.Lock()
|
||||||
p.deregister(eventID)
|
p.deregister(eventID)
|
||||||
p.mu.Unlock()
|
p.mu.Unlock()
|
||||||
p.envoy.Observer().Record(p.envoy.PeerID(),
|
p.envoy.Observer().Record(p.envoy.URL(),
|
||||||
PublishTimeout{EventID: eventID, At: time.Now()})
|
PublishTimeout{EventID: eventID, At: time.Now()})
|
||||||
p.deliver(entry, publishResult{err: errors.New("publish timeout")})
|
p.deliver(entry, publishResult{err: errors.New("publish timeout")})
|
||||||
})
|
})
|
||||||
@@ -148,12 +148,12 @@ func (p *EventPublisher) trySend(entry *pendingEntry) error {
|
|||||||
|
|
||||||
err := p.envoy.Send([]byte(envelope.EncloseEvent(entry.eventJSON)))
|
err := p.envoy.Send([]byte(envelope.EncloseEvent(entry.eventJSON)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
p.envoy.Observer().Record(p.envoy.PeerID(),
|
p.envoy.Observer().Record(p.envoy.URL(),
|
||||||
PublishSendFailed{EventID: entry.eventID, Err: err, At: time.Now()})
|
PublishSendFailed{EventID: entry.eventID, Err: err, At: time.Now()})
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
entry.sent = true
|
entry.sent = true
|
||||||
p.envoy.Observer().Record(p.envoy.PeerID(),
|
p.envoy.Observer().Record(p.envoy.URL(),
|
||||||
PublishDispatched{EventID: entry.eventID, At: time.Now()})
|
PublishDispatched{EventID: entry.eventID, At: time.Now()})
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -188,10 +188,10 @@ func (p *EventPublisher) routeInbox() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if accepted {
|
if accepted {
|
||||||
p.envoy.Observer().Record(msg.ID,
|
p.envoy.Observer().Record(msg.URL,
|
||||||
PublishAccepted{EventID: eventID, At: time.Now()})
|
PublishAccepted{EventID: eventID, At: time.Now()})
|
||||||
} else {
|
} else {
|
||||||
p.envoy.Observer().Record(msg.ID,
|
p.envoy.Observer().Record(msg.URL,
|
||||||
PublishRejected{EventID: eventID, Message: message, At: time.Now()})
|
PublishRejected{EventID: eventID, Message: message, At: time.Now()})
|
||||||
}
|
}
|
||||||
p.deliver(entry, publishResult{accepted: accepted, message: message})
|
p.deliver(entry, publishResult{accepted: accepted, message: message})
|
||||||
|
|||||||
+25
-25
@@ -18,13 +18,13 @@ import (
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
type ReqEvent struct {
|
type ReqEvent struct {
|
||||||
PeerID string
|
Peer string
|
||||||
ReceivedAt time.Time
|
ReceivedAt time.Time
|
||||||
Data []byte
|
Data []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
type ReqClosed struct {
|
type ReqClosed struct {
|
||||||
PeerID string
|
Peer string
|
||||||
ReceivedAt time.Time
|
ReceivedAt time.Time
|
||||||
Data string
|
Data string
|
||||||
}
|
}
|
||||||
@@ -34,38 +34,38 @@ type ReqClosed struct {
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
type ReqDispatched struct {
|
type ReqDispatched struct {
|
||||||
SubID string
|
ID string
|
||||||
DispatchedAt time.Time
|
DispatchedAt time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
type ReqSendFailed struct {
|
type ReqSendFailed struct {
|
||||||
SubID string
|
ID string
|
||||||
Err error
|
Err error
|
||||||
At time.Time
|
At time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
type FirstEventReceived struct {
|
type FirstEventReceived struct {
|
||||||
SubID string
|
ID string
|
||||||
ReceivedAt time.Time
|
ReceivedAt time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
type StreamEOSEReceived struct {
|
type StreamEOSEReceived struct {
|
||||||
SubID string
|
ID string
|
||||||
ReceivedAt time.Time
|
ReceivedAt time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
type QueryEOSEReceived struct {
|
type QueryEOSEReceived struct {
|
||||||
SubID string
|
ID string
|
||||||
ReceivedAt time.Time
|
ReceivedAt time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
type MissedEOSE struct {
|
type MissedEOSE struct {
|
||||||
SubID string
|
ID string
|
||||||
At time.Time
|
At time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
type ClosedReceived struct {
|
type ClosedReceived struct {
|
||||||
SubID string
|
ID string
|
||||||
ReceivedAt time.Time
|
ReceivedAt time.Time
|
||||||
Message string
|
Message string
|
||||||
}
|
}
|
||||||
@@ -259,8 +259,8 @@ func (m *RequestManager) Query(
|
|||||||
return result, &cl, nil
|
return result, &cl, nil
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
// query timed out
|
// query timed out
|
||||||
m.observer.Record(m.envoy.PeerID(),
|
m.observer.Record(m.envoy.URL(),
|
||||||
MissedEOSE{SubID: id, At: time.Now()})
|
MissedEOSE{ID: id, At: time.Now()})
|
||||||
if m.logger != nil {
|
if m.logger != nil {
|
||||||
m.logger.Warn("missed eose", "req", id)
|
m.logger.Warn("missed eose", "req", id)
|
||||||
}
|
}
|
||||||
@@ -328,15 +328,15 @@ func (m *RequestManager) activate(req *request) {
|
|||||||
go func() {
|
go func() {
|
||||||
err := m.envoy.Send(envelope.EncloseReq(req.id, req.filters))
|
err := m.envoy.Send(envelope.EncloseReq(req.id, req.filters))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
m.observer.Record(m.envoy.PeerID(),
|
m.observer.Record(m.envoy.URL(),
|
||||||
ReqSendFailed{SubID: req.id, Err: err, At: time.Now()})
|
ReqSendFailed{ID: req.id, Err: err, At: time.Now()})
|
||||||
if m.logger != nil {
|
if m.logger != nil {
|
||||||
m.logger.Warn("req send failed", "req", req.id, "error", err)
|
m.logger.Warn("req send failed", "req", req.id, "error", err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
m.observer.Record(m.envoy.PeerID(),
|
m.observer.Record(m.envoy.URL(),
|
||||||
ReqDispatched{SubID: req.id, DispatchedAt: time.Now()})
|
ReqDispatched{ID: req.id, DispatchedAt: time.Now()})
|
||||||
if m.logger != nil {
|
if m.logger != nil {
|
||||||
m.logger.Debug("req sent", "req", req.id)
|
m.logger.Debug("req sent", "req", req.id)
|
||||||
}
|
}
|
||||||
@@ -424,13 +424,13 @@ func (m *RequestManager) routeEvent(msg InboxMessage) {
|
|||||||
req.firstEventSeen = true
|
req.firstEventSeen = true
|
||||||
reqSubID := req.id
|
reqSubID := req.id
|
||||||
receivedAt := msg.ReceivedAt
|
receivedAt := msg.ReceivedAt
|
||||||
go m.observer.Record(m.envoy.PeerID(),
|
go m.observer.Record(m.envoy.URL(),
|
||||||
FirstEventReceived{SubID: reqSubID, ReceivedAt: receivedAt})
|
FirstEventReceived{ID: reqSubID, ReceivedAt: receivedAt})
|
||||||
}
|
}
|
||||||
m.mu.Unlock()
|
m.mu.Unlock()
|
||||||
|
|
||||||
req.buffer <- ReqEvent{
|
req.buffer <- ReqEvent{
|
||||||
PeerID: msg.ID,
|
Peer: msg.URL,
|
||||||
ReceivedAt: msg.ReceivedAt,
|
ReceivedAt: msg.ReceivedAt,
|
||||||
Data: event,
|
Data: event,
|
||||||
}
|
}
|
||||||
@@ -453,11 +453,11 @@ func (m *RequestManager) routeEOSE(msg InboxMessage) {
|
|||||||
reqSubID := req.id
|
reqSubID := req.id
|
||||||
receivedAt := msg.ReceivedAt
|
receivedAt := msg.ReceivedAt
|
||||||
if req.isQuery {
|
if req.isQuery {
|
||||||
go m.observer.Record(m.envoy.PeerID(),
|
go m.observer.Record(m.envoy.URL(),
|
||||||
QueryEOSEReceived{SubID: reqSubID, ReceivedAt: receivedAt})
|
QueryEOSEReceived{ID: reqSubID, ReceivedAt: receivedAt})
|
||||||
} else {
|
} else {
|
||||||
go m.observer.Record(m.envoy.PeerID(),
|
go m.observer.Record(m.envoy.URL(),
|
||||||
StreamEOSEReceived{SubID: reqSubID, ReceivedAt: receivedAt})
|
StreamEOSEReceived{ID: reqSubID, ReceivedAt: receivedAt})
|
||||||
}
|
}
|
||||||
if req.active && req.isQuery {
|
if req.active && req.isQuery {
|
||||||
// manually cleanup query state
|
// manually cleanup query state
|
||||||
@@ -493,9 +493,9 @@ func (m *RequestManager) routeClosed(msg InboxMessage) {
|
|||||||
}
|
}
|
||||||
reqSubID := req.id
|
reqSubID := req.id
|
||||||
receivedAt := msg.ReceivedAt
|
receivedAt := msg.ReceivedAt
|
||||||
go m.observer.Record(m.envoy.PeerID(),
|
go m.observer.Record(m.envoy.URL(),
|
||||||
ClosedReceived{
|
ClosedReceived{
|
||||||
SubID: reqSubID,
|
ID: reqSubID,
|
||||||
ReceivedAt: receivedAt,
|
ReceivedAt: receivedAt,
|
||||||
Message: message,
|
Message: message,
|
||||||
})
|
})
|
||||||
@@ -504,7 +504,7 @@ func (m *RequestManager) routeClosed(msg InboxMessage) {
|
|||||||
}
|
}
|
||||||
req.closedOnce.Do(func() {
|
req.closedOnce.Do(func() {
|
||||||
req.closed <- ReqClosed{
|
req.closed <- ReqClosed{
|
||||||
PeerID: msg.ID,
|
Peer: msg.URL,
|
||||||
ReceivedAt: msg.ReceivedAt,
|
ReceivedAt: msg.ReceivedAt,
|
||||||
Data: message,
|
Data: message,
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-6
@@ -111,7 +111,7 @@ func TestRequestManager_Stream(t *testing.T) {
|
|||||||
return len(EventsOf[ReqDispatched](obs)) == 1
|
return len(EventsOf[ReqDispatched](obs)) == 1
|
||||||
}, "expected ReqDispatched observable")
|
}, "expected ReqDispatched observable")
|
||||||
dispatched := EventsOf[ReqDispatched](obs)
|
dispatched := EventsOf[ReqDispatched](obs)
|
||||||
assert.Equal(t, id, dispatched[0].SubID)
|
assert.Equal(t, id, dispatched[0].ID)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("does not send req when disconnected", func(t *testing.T) {
|
t.Run("does not send req when disconnected", func(t *testing.T) {
|
||||||
@@ -186,7 +186,7 @@ func TestRequestManager_Stream(t *testing.T) {
|
|||||||
return len(EventsOf[FirstEventReceived](obs)) == 1
|
return len(EventsOf[FirstEventReceived](obs)) == 1
|
||||||
}, "expected FirstEventReceived observable")
|
}, "expected FirstEventReceived observable")
|
||||||
first := EventsOf[FirstEventReceived](obs)
|
first := EventsOf[FirstEventReceived](obs)
|
||||||
assert.Equal(t, id, first[0].SubID)
|
assert.Equal(t, id, first[0].ID)
|
||||||
assert.False(t, first[0].ReceivedAt.IsZero())
|
assert.False(t, first[0].ReceivedAt.IsZero())
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -247,7 +247,7 @@ func TestRequestManager_Stream(t *testing.T) {
|
|||||||
return len(EventsOf[StreamEOSEReceived](obs)) == 1
|
return len(EventsOf[StreamEOSEReceived](obs)) == 1
|
||||||
}, "expected StreamEOSEReceived observable")
|
}, "expected StreamEOSEReceived observable")
|
||||||
eoseEvents := EventsOf[StreamEOSEReceived](obs)
|
eoseEvents := EventsOf[StreamEOSEReceived](obs)
|
||||||
assert.Equal(t, id, eoseEvents[0].SubID)
|
assert.Equal(t, id, eoseEvents[0].ID)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("closed deregisters and signals caller", func(t *testing.T) {
|
t.Run("closed deregisters and signals caller", func(t *testing.T) {
|
||||||
@@ -289,7 +289,7 @@ func TestRequestManager_Stream(t *testing.T) {
|
|||||||
return len(EventsOf[ClosedReceived](obs)) == 1
|
return len(EventsOf[ClosedReceived](obs)) == 1
|
||||||
}, "expected ClosedReceived observable")
|
}, "expected ClosedReceived observable")
|
||||||
closedEvents := EventsOf[ClosedReceived](obs)
|
closedEvents := EventsOf[ClosedReceived](obs)
|
||||||
assert.Equal(t, id, closedEvents[0].SubID)
|
assert.Equal(t, id, closedEvents[0].ID)
|
||||||
assert.Equal(t, "error: test", closedEvents[0].Message)
|
assert.Equal(t, "error: test", closedEvents[0].Message)
|
||||||
|
|
||||||
Eventually(t, func() bool {
|
Eventually(t, func() bool {
|
||||||
@@ -342,7 +342,7 @@ func TestRequestManager_Stream(t *testing.T) {
|
|||||||
return len(EventsOf[ReqSendFailed](obs)) >= 1
|
return len(EventsOf[ReqSendFailed](obs)) >= 1
|
||||||
}, "expected ReqSendFailed observable")
|
}, "expected ReqSendFailed observable")
|
||||||
failed := EventsOf[ReqSendFailed](obs)
|
failed := EventsOf[ReqSendFailed](obs)
|
||||||
assert.Equal(t, id, failed[0].SubID)
|
assert.Equal(t, id, failed[0].ID)
|
||||||
assert.NotNil(t, failed[0].Err)
|
assert.NotNil(t, failed[0].Err)
|
||||||
|
|
||||||
Never(t, func() bool {
|
Never(t, func() bool {
|
||||||
@@ -486,7 +486,7 @@ func TestRequestManager_Query(t *testing.T) {
|
|||||||
return len(EventsOf[QueryEOSEReceived](obs)) == 1
|
return len(EventsOf[QueryEOSEReceived](obs)) == 1
|
||||||
}, "expected QueryEOSEReceived observable")
|
}, "expected QueryEOSEReceived observable")
|
||||||
qeose := EventsOf[QueryEOSEReceived](obs)
|
qeose := EventsOf[QueryEOSEReceived](obs)
|
||||||
assert.Equal(t, querySubID, qeose[0].SubID)
|
assert.Equal(t, querySubID, qeose[0].ID)
|
||||||
|
|
||||||
// CLOSE envelope should have been sent after EOSE
|
// CLOSE envelope should have been sent after EOSE
|
||||||
var closeEnv []byte
|
var closeEnv []byte
|
||||||
|
|||||||
Reference in New Issue
Block a user