HomePhabricator

User: Bypass repeatable-read when creating an actor_id
836f10dcbd73Unpublished

Unpublished Commit · Learn More

Not On Permanent Ref: This commit is not an ancestor of any permanent ref.

Description

User: Bypass repeatable-read when creating an actor_id

When MySQL is using repeatable-read transaction isolation (which is the
default), the following sequence of events can occur:

  1. Request A: Begin a transaction.
  2. Request A: Try to select the actor ID for a user. Find no rows.
  3. Request B: Insert an actor ID for that user.
  4. Request A: Try to insert an actor ID for the user. Fails because one exists.
  5. Request A: Try to select the actor ID that must exist. Fail because of the snapshot created at step 2.

In MySQL we can avoid this issue at step #5 by using a locking select
(FOR UPDATE or LOCK IN SHARE MODE), so let's do that.

Bug: T210621
Change-Id: I6c1d255fdd14c6f49d2ea9790e7bd7d101e98ee4
(cherry picked from commit 37f48fdb25a78ba7623c57b50cdfd842292d3ccb)

Details

Provenance
AnomieAuthored on Nov 29 2018, 2:03 PM
PaladoxCommitted on Dec 27 2018, 9:05 PM
Parents
rMW8caf853f22fe: Add join conditions to ActiveUsersPager
Branches
Unknown
Tags
Unknown
ChangeId
I6c1d255fdd14c6f49d2ea9790e7bd7d101e98ee4