Skip to content

Instantly share code, notes, and snippets.

@bdurand
Created October 18, 2012 17:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bdurand/3913376 to your computer and use it in GitHub Desktop.
Save bdurand/3913376 to your computer and use it in GitHub Desktop.
ActiveRecord Row Lock Test Output
Current ActiveRecord code:
Selector Thread reports shared record exists
Thread 1 (0.8ms) BEGIN
Thread 1 running before_destroy callback
Thread 2 (0.6ms) BEGIN
Thread 2 running before_destroy callback
Selector Thread reports shared record exists
Thread 1 running before_destroy callback
Thread 2 running before_destroy callback
Selector Thread reports shared record exists
Thread 1 running before_destroy callback
Thread 2 running before_destroy callback
Selector Thread reports shared record exists
Thread 1 running before_destroy callback
Thread 2 running before_destroy callback
Selector Thread reports shared record exists
Thread 1 running before_destroy callback
Thread 2 running before_destroy callback
Selector Thread reports shared record exists
Thread 1 SQL (26.3ms) DELETE FROM "my_models" WHERE "my_models"."id" = $1 [["id", 43]]
Thread 1 running after_destroy callback
Selector Thread reports shared record exists
Thread 1 running after_destroy callback
Selector Thread reports shared record exists
Thread 1 running after_destroy callback
Selector Thread reports shared record exists
Thread 1 running after_destroy callback
Selector Thread reports shared record exists
Thread 1 running after_destroy callback
Selector Thread reports shared record exists
Thread 2 SQL (4934.5ms) DELETE FROM "my_models" WHERE "my_models"."id" = $1 [["id", 43]]
Thread 2 running after_destroy callback
Thread 1 (1.5ms) COMMIT
Selector Thread reports shared record deleted
Thread 2 running after_destroy callback
Selector Thread reports shared record deleted
Thread 2 running after_destroy callback
Selector Thread reports shared record deleted
Thread 2 running after_destroy callback
Selector Thread reports shared record deleted
Thread 2 running after_destroy callback
Selector Thread reports shared record deleted
Thread 2 (0.7ms) COMMIT
Selector Thread reports shared record deleted
Patched ActiveRecord code:
Selector Thread reports shared record exists
Thread 1 (0.7ms) BEGIN
Thread 1 (1.1ms) SELECT id FROM "my_models" WHERE "my_models"."id" = 40 FOR UPDATE
Thread 1 SELECT FOR UPDATE did find row
Thread 1 running before_destroy callback
Thread 2 (0.6ms) BEGIN
Selector Thread reports shared record exists
Thread 1 running before_destroy callback
Selector Thread reports shared record exists
Thread 1 running before_destroy callback
Selector Thread reports shared record exists
Thread 1 running before_destroy callback
Selector Thread reports shared record exists
Thread 1 running before_destroy callback
Selector Thread reports shared record exists
Thread 1 SQL (37.1ms) DELETE FROM "my_models" WHERE "my_models"."id" = $1 [["id", 40]]
Thread 1 running after_destroy callback
Selector Thread reports shared record exists
Thread 1 running after_destroy callback
Selector Thread reports shared record exists
Thread 1 running after_destroy callback
Selector Thread reports shared record exists
Thread 1 running after_destroy callback
Selector Thread reports shared record exists
Thread 1 running after_destroy callback
Selector Thread reports shared record exists
Thread 1 (1.2ms) COMMIT
Thread 2 (9953.0ms) SELECT id FROM "my_models" WHERE "my_models"."id" = 40 FOR UPDATE
Thread 2 SELECT FOR UPDATE does not find row
Thread 2 SQL (1.1ms) DELETE FROM "my_models" WHERE "my_models"."id" = $1 [["id", 40]]
Thread 2 (0.3ms) COMMIT
Selector Thread reports shared record deleted
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment