mirror of
https://github.com/gravitational/teleport.git
synced 2026-09-24 16:17:11 +08:00
Fix sqlite backend KeepAlive revision mismatch (#66930)
Ensures the backend table and events table use the same revision when updating items during KeepAlive operations. Previously a revision was generated for _both_ tables causing watchers and Get calls to observe different revisions. The backend test suite was updated to validate revisions in the event stream match revisions in the backend. Resolves https://github.com/gravitational/pressure-washing/issues/139.
This commit is contained in:
@@ -781,7 +781,7 @@ func (l *Backend) KeepAlive(ctx context.Context, lease backend.Lease, expires ti
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
result, err := stmt.ExecContext(ctx, expires.UTC(), id(now), backend.CreateRevision(), lease.Key.String())
|
||||
result, err := stmt.ExecContext(ctx, expires.UTC(), id(now), item.Revision, lease.Key.String())
|
||||
if err != nil {
|
||||
return trace.Wrap(err)
|
||||
}
|
||||
|
||||
@@ -760,6 +760,10 @@ func testKeepAlive(t *testing.T, newBackend Constructor) {
|
||||
require.Equal(t, bigValue[:], event.Item.Value)
|
||||
require.WithinDuration(t, expiresAt, event.Item.Expires, 2*time.Second)
|
||||
|
||||
storedItem, err := uut.Get(ctx, item.Key)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, storedItem.Revision, event.Item.Revision)
|
||||
|
||||
// move the current slightly forward, but still *before* the item's
|
||||
// expiry time
|
||||
clock.Advance(2 * time.Second)
|
||||
@@ -776,6 +780,10 @@ func testKeepAlive(t *testing.T, newBackend Constructor) {
|
||||
require.Equal(t, bigValue[:], event.Item.Value)
|
||||
require.WithinDuration(t, updatedAt, event.Item.Expires, 2*time.Second)
|
||||
|
||||
storedItem, err = uut.Get(ctx, item.Key)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, storedItem.Revision, event.Item.Revision)
|
||||
|
||||
err = uut.Delete(t.Context(), item.Key)
|
||||
require.NoError(t, err)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user