Ghost/core/server/models
Fabien 'egg' O'Carroll 022c8c8e69
Added support for 'FOR UPDATE' lock (#14433)
refs https://github.com/TryGhost/Team/issues/1248

This is the underlying cause of the problems we've seen whilst handling
Stripe webhooks. A transaction ensures that the operations are atomic,
but not that they can run concurrently.

If you have some code which does this, concurrently:
1. Starts a transaction
2. Reads a value
3. Changes the values
4. Ends the transaction

Without applying the `FOR UPDATE` lock - you will have both sequenes
read the same value at step 2.

With the `FOR UPDATE` lock - one of the sequences will hang at step 2,
waiting for the other transaction to end, at which point it will resume
and read the _changed_ value.

Because the `edit` method explicitly does a read followed by a write, we
have also add the `FOR UPDATE` lock to this by default, to avoid any race
conditions. This does however require that `edit` is called within a
transaction. An issue here https://github.com/TryGhost/Team/issues/1503
considers running in a transaction by default.
2022-04-08 12:52:33 +01:00
..
base Added support for 'FOR UPDATE' lock (#14433) 2022-04-08 12:52:33 +01:00
relations Switch to @tryghost/errors from ignition errors package (#13807) 2021-12-01 10:22:01 +00:00
action.js Fixed dependency on the order of models 2021-10-21 16:57:36 +01:00
api-key.js Updated signature of Bookshelf model listeners 2021-09-10 16:59:11 +01:00
author.js Added plugin based author and public tag models in API v2 (#10284) 2019-01-03 20:30:35 +01:00
benefit.js Added Benefit model 2021-06-29 16:53:15 +01:00
custom-theme-setting.js Removed errant console.log 2021-10-14 20:38:02 +01:00
email-batch.js Fixed creation of EmailBatch and EmailRecipient collections 2020-10-14 15:11:45 +01:00
email-recipient.js Removed unnecessary bookshelf-relations config in EmailRecipient model 2021-01-05 15:28:30 +00:00
email.js Updated signature of Bookshelf model listeners 2021-09-10 16:59:11 +01:00
index.js Refactored model init to be implicit 2021-10-21 17:01:26 +01:00
integration.js Updated signature of Bookshelf model listeners 2021-09-10 16:59:11 +01:00
invite.js Replaced i18n.t w/ tpl in core/server/models (#13464) 2021-10-06 11:43:54 +01:00
label.js Replaced i18n.t w/ tpl in core/server/models (#13464) 2021-10-06 11:43:54 +01:00
member-analytic-event.js Added temporary database table for analytic events (#13312) 2021-09-17 11:15:21 +02:00
member-cancel-event.js Added the MemberCancelEvent model 2022-03-11 21:50:06 +01:00
member-email-change-event.js Added linting for use of @tryghost/errors 2021-12-01 11:22:21 +00:00
member-login-event.js Added linting for use of @tryghost/errors 2021-12-01 11:22:21 +00:00
member-paid-subscription-event.js Added linting for use of @tryghost/errors 2021-12-01 11:22:21 +00:00
member-payment-event.js Added linting for use of @tryghost/errors 2021-12-01 11:22:21 +00:00
member-product-event.js Added linting for use of @tryghost/errors 2021-12-01 11:22:21 +00:00
member-status-event.js Added linting for use of @tryghost/errors 2021-12-01 11:22:21 +00:00
member-stripe-customer.js Added error handling for failed member imports 2020-08-26 17:11:35 +12:00
member-subscribe-event.js Added linting for use of @tryghost/errors 2021-12-01 11:22:21 +00:00
member.js Added relation between newsletters and members 2022-04-05 22:23:39 +05:30
mobiledoc-revision.js Added mobiledoc revisions functionality 2018-10-09 15:31:09 +02:00
newsletter.js Added the newsletters endpoint 2022-03-31 15:19:58 +02:00
offer-redemption.js Added OfferRedemption model 2021-10-15 16:56:04 +02:00
offer.js Added model for offers table 2021-10-04 12:03:36 +05:30
permission.js Updated var declarations to const/let and no lists 2020-04-29 16:51:13 +01:00
post.js Added the post-newsletter relation (#14411) 2022-04-07 10:26:37 +02:00
posts-meta.js Added email_only column to posts_meta table 2021-08-05 19:44:35 +12:00
product.js Switched products.visible for products.visibility (#14264) 2022-03-04 11:07:38 +00:00
role.js Replaced i18n.t w/ tpl in core/server/models (#13464) 2021-10-06 11:43:54 +01:00
session.js 🔒 Added a "reset all passwords" feature (#13005) 2021-06-23 14:54:28 +02:00
settings.js Refactored default settings population to reduce unnecessary DB queries 2022-02-08 10:11:00 +01:00
single-use-token.js Updated SingleUseToken grace period to 10 minutes (#13926) 2022-01-03 17:55:53 +02:00
snippet.js Fixed no-restricted-require warning for core/shared/url-utils.js 2021-05-25 21:13:57 +01:00
stripe-customer-subscription.js 🐛 Fixed members list not loading (#12930) 2021-05-26 19:52:42 +05:30
stripe-price.js Added models for stripe prices and products 2021-04-12 21:53:59 +05:30
stripe-product.js Added Product, StripeProduct & StripePrice relations (#12877) 2021-04-14 19:20:39 +01:00
tag-public.js Added plugin based author and public tag models in API v2 (#10284) 2019-01-03 20:30:35 +01:00
tag.js 🐛 Fixed "Create Post" action error in Zapier when assigning new tags (#13972) 2022-01-14 13:37:20 +00:00
user.js Fixed error when editing user with empty roles data 2022-03-10 17:29:30 +00:00
webhook.js Updated signature of Bookshelf model listeners 2021-09-10 16:59:11 +01:00