mirror of
https://github.com/zitadel/zitadel.git
synced 2026-10-25 07:37:43 -05:00
fix(eventstore): treat later Started as a new setup attempt
IsStepDone no longer keeps a sticky Failed flag. Started → Failed → Started is an unterminated retry, not OFFSET mode. Co-authored-by: s2s4gq4jby <s2s4gq4jby@privaterelay.appleid.com>
This commit is contained in:
1 parent
3abe7f5be8
commit
fd307630e1
2 files changed
+46
No files matched your search
@@ -26,10 +26,14 @@ func (s *stepDoneCheck) AppendEvents(events ...eventstore.Event) {
|
||||
switch event.Type() {
|
||||
case StartedType:
|
||||
s.started = true
|
||||
s.done = false
|
||||
s.failed = false
|
||||
case DoneType:
|
||||
s.done = true
|
||||
s.failed = false
|
||||
case failedType:
|
||||
s.failed = true
|
||||
s.done = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,6 +80,48 @@ func TestIsStepDone(t *testing.T) {
|
||||
assert.False(t, done)
|
||||
})
|
||||
|
||||
t.Run("started after failed is stuck", func(t *testing.T) {
|
||||
es := &stubEventQuerier{
|
||||
events: []eventstore.Event{
|
||||
&eventstore.BaseEvent{EventType: StartedType},
|
||||
&eventstore.BaseEvent{EventType: failedType},
|
||||
&eventstore.BaseEvent{EventType: StartedType},
|
||||
},
|
||||
}
|
||||
done, err := IsStepDone(t.Context(), es, EventstorePositionClockTimestampStep)
|
||||
require.Error(t, err)
|
||||
assert.Contains(t, err.Error(), "started without a done or failed event")
|
||||
assert.False(t, done)
|
||||
})
|
||||
|
||||
t.Run("started after failed then done is stored", func(t *testing.T) {
|
||||
es := &stubEventQuerier{
|
||||
events: []eventstore.Event{
|
||||
&eventstore.BaseEvent{EventType: StartedType},
|
||||
&eventstore.BaseEvent{EventType: failedType},
|
||||
&eventstore.BaseEvent{EventType: StartedType},
|
||||
&eventstore.BaseEvent{EventType: DoneType},
|
||||
},
|
||||
}
|
||||
done, err := IsStepDone(t.Context(), es, EventstorePositionClockTimestampStep)
|
||||
require.NoError(t, err)
|
||||
assert.True(t, done)
|
||||
})
|
||||
|
||||
t.Run("started after failed then failed is not done", func(t *testing.T) {
|
||||
es := &stubEventQuerier{
|
||||
events: []eventstore.Event{
|
||||
&eventstore.BaseEvent{EventType: StartedType},
|
||||
&eventstore.BaseEvent{EventType: failedType},
|
||||
&eventstore.BaseEvent{EventType: StartedType},
|
||||
&eventstore.BaseEvent{EventType: failedType},
|
||||
},
|
||||
}
|
||||
done, err := IsStepDone(t.Context(), es, EventstorePositionClockTimestampStep)
|
||||
require.NoError(t, err)
|
||||
assert.False(t, done)
|
||||
})
|
||||
|
||||
t.Run("undefined table is not done", func(t *testing.T) {
|
||||
es := &stubEventQuerier{
|
||||
err: &pgconn.PgError{Code: "42P01"},
|
||||
|
||||
Reference in new issue
Block a user