Skip to content

Commit dee161f

Browse files
committed
feat: Events now include information about delivery attempt
1 parent 1f61e95 commit dee161f

File tree

11 files changed

+6307
-119
lines changed

11 files changed

+6307
-119
lines changed

internal/api/events/v1alpha1/events.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,11 @@ func (e *EventsServiceServer) Events(server eventsv1alpha1.EventsService_EventsS
108108
err = server.Send(&eventsv1alpha1.EventsResponse{
109109
Response: &eventsv1alpha1.EventsResponse_Event{
110110
Event: &eventsv1alpha1.Event{
111-
Id: event.StreamSeq,
112-
Data: event.Data,
113-
Subject: event.Subject,
114-
Headers: headers,
111+
Id: event.StreamSeq,
112+
Data: event.Data,
113+
Subject: event.Subject,
114+
Headers: headers,
115+
DeliveryAttempt: event.DeliveryAttempt,
115116
},
116117
},
117118
})

internal/api/events/v1alpha1/events_test.go

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"time"
66
eventsv1alpha1 "windshift/service/internal/proto/windshift/events/v1alpha1"
7+
testv1 "windshift/service/internal/proto/windshift/test/v1"
78

89
. "github.com/onsi/ginkgo/v2"
910
. "github.com/onsi/gomega"
@@ -94,7 +95,7 @@ var _ = Describe("Events", func() {
9495
// Send an event
9596
_, err = service.PublishEvent(ctx, &eventsv1alpha1.PublishEventRequest{
9697
Subject: "events.test",
97-
Data: Data(&emptypb.Empty{}),
98+
Data: Data(&testv1.StringValue{Value: "test"}),
9899
})
99100
Expect(err).ToNot(HaveOccurred())
100101

@@ -104,6 +105,11 @@ var _ = Describe("Events", func() {
104105
if _, ok := in.Response.(*eventsv1alpha1.EventsResponse_Event); !ok {
105106
Fail("expected Event message")
106107
}
108+
109+
e := in.GetEvent()
110+
Expect(e.Subject).To(Equal("events.test"))
111+
Expect(e.DeliveryAttempt).To(BeNumerically("==", 1))
112+
Expect(e.Data).To(Equal(Data(&testv1.StringValue{Value: "test"})))
107113
})
108114
})
109115

@@ -141,7 +147,7 @@ var _ = Describe("Events", func() {
141147
// Send an event
142148
_, err = service.PublishEvent(ctx, &eventsv1alpha1.PublishEventRequest{
143149
Subject: "events.test",
144-
Data: Data(&emptypb.Empty{}),
150+
Data: Data(&testv1.StringValue{Value: "test"}),
145151
})
146152
Expect(err).ToNot(HaveOccurred())
147153

@@ -152,7 +158,12 @@ var _ = Describe("Events", func() {
152158
Fail("expected Event message")
153159
}
154160

155-
eventID := in.GetEvent().GetId()
161+
e := in.GetEvent()
162+
Expect(e.Subject).To(Equal("events.test"))
163+
Expect(e.DeliveryAttempt).To(BeNumerically("==", 1))
164+
Expect(e.Data).To(Equal(Data(&testv1.StringValue{Value: "test"})))
165+
166+
eventID := e.GetId()
156167

157168
// Acknowledge the event
158169
err = client.Send(&eventsv1alpha1.EventsRequest{
@@ -170,8 +181,7 @@ var _ = Describe("Events", func() {
170181
if r, ok := in.Response.(*eventsv1alpha1.EventsResponse_AckConfirmation_); ok {
171182
Expect(r.AckConfirmation.Ids).To(Equal([]uint64{eventID}))
172183
} else {
173-
174-
Fail("expected AckConfiramtion message")
184+
Fail("expected AckConfirmation message")
175185
}
176186
})
177187

@@ -221,8 +231,7 @@ var _ = Describe("Events", func() {
221231
if r, ok := in.Response.(*eventsv1alpha1.EventsResponse_AckConfirmation_); ok {
222232
Expect(r.AckConfirmation.InvalidIds).To(Equal([]uint64{1}))
223233
} else {
224-
225-
Fail("expected AckConfiramtion message")
234+
Fail("expected AckConfirmation message")
226235
}
227236
})
228237

@@ -337,7 +346,7 @@ var _ = Describe("Events", func() {
337346
// Send an event
338347
_, err = service.PublishEvent(ctx, &eventsv1alpha1.PublishEventRequest{
339348
Subject: "events.test",
340-
Data: Data(&emptypb.Empty{}),
349+
Data: Data(&testv1.StringValue{Value: "test"}),
341350
})
342351
Expect(err).ToNot(HaveOccurred())
343352

@@ -348,7 +357,12 @@ var _ = Describe("Events", func() {
348357
Fail("expected Event message")
349358
}
350359

351-
eventID := in.GetEvent().GetId()
360+
e := in.GetEvent()
361+
Expect(e.Subject).To(Equal("events.test"))
362+
Expect(e.DeliveryAttempt).To(BeNumerically("==", 1))
363+
Expect(e.Data).To(Equal(Data(&testv1.StringValue{Value: "test"})))
364+
365+
eventID := e.GetId()
352366

353367
// Reject the event
354368
err = client.Send(&eventsv1alpha1.EventsRequest{
@@ -374,6 +388,11 @@ var _ = Describe("Events", func() {
374388
if _, ok := in.Response.(*eventsv1alpha1.EventsResponse_Event); !ok {
375389
Fail("expected Event message")
376390
}
391+
392+
e = in.GetEvent()
393+
Expect(e.Subject).To(Equal("events.test"))
394+
Expect(e.DeliveryAttempt).To(BeNumerically("==", 2))
395+
Expect(e.Data).To(Equal(Data(&testv1.StringValue{Value: "test"})))
377396
})
378397

379398
It("rejecting unknown event fails", NodeTimeout(5*time.Second), func(ctx context.Context) {
@@ -458,7 +477,7 @@ var _ = Describe("Events", func() {
458477
// Send an event
459478
_, err = service.PublishEvent(ctx, &eventsv1alpha1.PublishEventRequest{
460479
Subject: "events.test",
461-
Data: Data(&emptypb.Empty{}),
480+
Data: Data(&testv1.StringValue{Value: "test"}),
462481
})
463482
Expect(err).ToNot(HaveOccurred())
464483

@@ -469,7 +488,11 @@ var _ = Describe("Events", func() {
469488
Fail("expected Event message")
470489
}
471490

472-
eventID := in.GetEvent().GetId()
491+
e := in.GetEvent()
492+
Expect(e.Subject).To(Equal("events.test"))
493+
Expect(e.DeliveryAttempt).To(BeNumerically("==", 1))
494+
Expect(e.Data).To(Equal(Data(&testv1.StringValue{Value: "test"})))
495+
eventID := e.GetId()
473496

474497
// Reject the event
475498
err = client.Send(&eventsv1alpha1.EventsRequest{

internal/events/event.go

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ type Event struct {
5252
// resume from there on the next run.
5353
StreamSeq uint64
5454

55+
// DeliveryAttempt is the number of times the event has been delivered to
56+
// a consumer. The first delivery is 1.
57+
DeliveryAttempt uint64
58+
5559
// Headers contains the headers of the event.
5660
Headers *Headers
5761

@@ -108,16 +112,17 @@ func newEvent(
108112
}
109113

110114
return &Event{
111-
span: span,
112-
logger: logger,
113-
msg: msg,
114-
onProcess: onProcess,
115-
Context: ctx,
116-
Subject: msg.Subject(),
117-
ConsumerSeq: md.Sequence.Stream,
118-
StreamSeq: md.Sequence.Consumer,
119-
Headers: headers,
120-
Data: data,
115+
span: span,
116+
logger: logger,
117+
msg: msg,
118+
onProcess: onProcess,
119+
Context: ctx,
120+
Subject: msg.Subject(),
121+
ConsumerSeq: md.Sequence.Stream,
122+
StreamSeq: md.Sequence.Consumer,
123+
DeliveryAttempt: md.NumDelivered,
124+
Headers: headers,
125+
Data: data,
121126
}, nil
122127
}
123128

internal/events/events_test.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,7 @@ var _ = Describe("Event Consumption", func() {
559559
select {
560560
case event := <-ec.Incoming():
561561
Expect(event).ToNot(BeNil())
562+
Expect(event.DeliveryAttempt).To(BeNumerically("==", 1))
562563

563564
err = event.Reject()
564565
Expect(err).ToNot(HaveOccurred())
@@ -569,6 +570,7 @@ var _ = Describe("Event Consumption", func() {
569570
select {
570571
case event := <-ec.Incoming():
571572
Expect(event).ToNot(BeNil())
573+
Expect(event.DeliveryAttempt).To(BeNumerically("==", 2))
572574

573575
err = event.Ack()
574576
Expect(err).ToNot(HaveOccurred())
@@ -611,6 +613,7 @@ var _ = Describe("Event Consumption", func() {
611613
select {
612614
case event := <-ec.Incoming():
613615
Expect(event).ToNot(BeNil())
616+
Expect(event.DeliveryAttempt).To(BeNumerically("==", 1))
614617

615618
event.DiscardData()
616619
err = event.Reject()
@@ -622,6 +625,7 @@ var _ = Describe("Event Consumption", func() {
622625
select {
623626
case event := <-ec.Incoming():
624627
Expect(event).ToNot(BeNil())
628+
Expect(event.DeliveryAttempt).To(BeNumerically("==", 2))
625629

626630
err = event.Ack()
627631
Expect(err).ToNot(HaveOccurred())
@@ -665,6 +669,7 @@ var _ = Describe("Event Consumption", func() {
665669

666670
event := <-ec1.Incoming()
667671
Expect(event).ToNot(BeNil())
672+
Expect(event.DeliveryAttempt).To(BeNumerically("==", 1))
668673
err = ec1.Close()
669674
Expect(err).ToNot(HaveOccurred())
670675

@@ -675,6 +680,7 @@ var _ = Describe("Event Consumption", func() {
675680
select {
676681
case event = <-ec2.Incoming():
677682
Expect(event).ToNot(BeNil())
683+
Expect(event.DeliveryAttempt).To(BeNumerically("==", 2))
678684
case <-time.After(500 * time.Millisecond):
679685
Fail("timeout waiting for event")
680686
}
@@ -709,6 +715,7 @@ var _ = Describe("Event Consumption", func() {
709715
select {
710716
case event := <-ec.Incoming():
711717
Expect(event).ToNot(BeNil())
718+
Expect(event.DeliveryAttempt).To(BeNumerically("==", 1))
712719
case <-time.After(200 * time.Millisecond):
713720
Fail("no event received")
714721
}
@@ -718,6 +725,7 @@ var _ = Describe("Event Consumption", func() {
718725
select {
719726
case event := <-ec.Incoming():
720727
Expect(event).ToNot(BeNil())
728+
Expect(event.DeliveryAttempt).To(BeNumerically("==", 2))
721729

722730
err = event.Ack()
723731
Expect(err).ToNot(HaveOccurred())
@@ -758,17 +766,20 @@ var _ = Describe("Event Consumption", func() {
758766

759767
event := <-ec.Incoming()
760768
Expect(event).ToNot(BeNil())
769+
Expect(event.DeliveryAttempt).To(BeNumerically("==", 1))
761770

762771
start := time.Now()
763772
err = event.RejectWithDelay(100 * time.Millisecond)
764773
Expect(err).ToNot(HaveOccurred())
765774

766775
// Receive the event again
767776
select {
768-
case <-ec.Incoming():
777+
case event := <-ec.Incoming():
769778
if time.Since(start) < 100*time.Millisecond {
770779
Fail("event received too early")
771780
}
781+
782+
Expect(event.DeliveryAttempt).To(BeNumerically("==", 2))
772783
case <-time.After(200 * time.Millisecond):
773784
Fail("no event received")
774785
}

0 commit comments

Comments
 (0)