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:
rosstimothy
2026-05-21 13:52:38 +00:00
committed by GitHub
parent daf519b4ec
commit 4d7ec05ced
2 changed files with 9 additions and 1 deletions
+1 -1
View File
@@ -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)
}
+8
View File
@@ -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)