Ensure we bump the change ID on sqlite

This commit is contained in:
Kegan Dougal 2022-01-19 19:10:11 +00:00
parent 5dc360481a
commit 8096217d9e
2 changed files with 7 additions and 3 deletions

View file

@ -40,7 +40,8 @@ const upsertKeyChangeSQL = "" +
"INSERT INTO keyserver_key_changes (user_id)" + "INSERT INTO keyserver_key_changes (user_id)" +
" VALUES ($1)" + " VALUES ($1)" +
" ON CONFLICT" + " ON CONFLICT" +
" DO UPDATE SET user_id = $1" + // this only works because we rely on a single writer
" DO UPDATE SET change_id = change_id + 1" +
" RETURNING change_id" " RETURNING change_id"
// select the highest offset for each user in the range. The grouping by user gives distinct entries and then we just // select the highest offset for each user in the range. The grouping by user gives distinct entries and then we just

View file

@ -65,10 +65,13 @@ func TestKeyChanges(t *testing.T) {
func TestKeyChangesNoDupes(t *testing.T) { func TestKeyChangesNoDupes(t *testing.T) {
db, clean := MustCreateDatabase(t) db, clean := MustCreateDatabase(t)
defer clean() defer clean()
_, err := db.StoreKeyChange(ctx, "@alice:localhost") deviceChangeIDA, err := db.StoreKeyChange(ctx, "@alice:localhost")
MustNotError(t, err) MustNotError(t, err)
_, err = db.StoreKeyChange(ctx, "@alice:localhost") deviceChangeIDB, err := db.StoreKeyChange(ctx, "@alice:localhost")
MustNotError(t, err) MustNotError(t, err)
if deviceChangeIDA == deviceChangeIDB {
t.Fatalf("Expected change ID to be different even when inserting key change for the same user, got %d for both changes", deviceChangeIDA)
}
deviceChangeID, err := db.StoreKeyChange(ctx, "@alice:localhost") deviceChangeID, err := db.StoreKeyChange(ctx, "@alice:localhost")
MustNotError(t, err) MustNotError(t, err)
userIDs, latest, err := db.KeyChanges(ctx, 0, sarama.OffsetNewest) userIDs, latest, err := db.KeyChanges(ctx, 0, sarama.OffsetNewest)