Skip to content

Commit abd78e3

Browse files
Merge pull request #5322 from hashicorp/backport/jbrandhorst-fix-startup-http-request-crash/positively-modern-marten
This pull request was automerged via backport-assistant
2 parents 6bbb104 + e6768b7 commit abd78e3

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

internal/event/eventer.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -794,14 +794,18 @@ func (e *Eventer) ReleaseGate() error {
794794
if qe == nil {
795795
continue // we may have already sent this but gotten errors later
796796
}
797+
ctx, cancel := newSendCtx(qe.ctx)
798+
if cancel != nil {
799+
defer cancel()
800+
}
797801
var queuedOp string
798802
switch t := qe.event.(type) {
799803
case *sysEvent:
800804
queuedOp = "system"
801-
writeErr = e.writeSysEvent(qe.ctx, t, WithNoGateLocking(true))
805+
writeErr = e.writeSysEvent(ctx, t, WithNoGateLocking(true))
802806
case *err:
803807
queuedOp = "error"
804-
writeErr = e.writeError(qe.ctx, t, WithNoGateLocking(true))
808+
writeErr = e.writeError(ctx, t, WithNoGateLocking(true))
805809
default:
806810
// Have no idea what this is and shouldn't have gotten in here to
807811
// begin with, so just continue, and log it

internal/event/eventer_gate_test.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,3 +159,48 @@ func TestEventer_Gating(t *testing.T) {
159159
})
160160
}
161161
}
162+
163+
func TestReleaseGate_NoError_CanceledContext(t *testing.T) {
164+
require := require.New(t)
165+
166+
buffer := new(bytes.Buffer)
167+
eventerConfig := EventerConfig{
168+
AuditEnabled: true,
169+
ObservationsEnabled: true,
170+
SysEventsEnabled: true,
171+
Sinks: []*SinkConfig{
172+
{
173+
Name: "test-sink",
174+
EventTypes: []Type{EveryType},
175+
Format: TextHclogSinkFormat,
176+
Type: WriterSink,
177+
WriterConfig: &WriterSinkTypeConfig{
178+
Writer: buffer,
179+
},
180+
},
181+
},
182+
}
183+
testLock := &sync.Mutex{}
184+
testLogger := testLogger(t, testLock)
185+
186+
eventer, err := NewEventer(
187+
testLogger,
188+
testLock,
189+
"TestEventer_Gating",
190+
eventerConfig,
191+
WithGating(true),
192+
)
193+
require.NoError(err)
194+
195+
ctx, cancel := context.WithCancel(context.Background())
196+
t.Cleanup(cancel)
197+
ctx, err = NewEventerContext(ctx, eventer)
198+
require.NoError(err)
199+
200+
WriteError(ctx, "error-1", fmt.Errorf("error-1"))
201+
_ = WriteObservation(ctx, "observation-1", WithId("observation-1"), WithHeader("foo", "bar"))
202+
203+
cancel()
204+
205+
require.NoError(eventer.ReleaseGate())
206+
}

0 commit comments

Comments
 (0)