Skip to content

Commit

Permalink
dont reuse double bind actions for different transactions
Browse files Browse the repository at this point in the history
  • Loading branch information
pieh committed Dec 17, 2024
1 parent a804d86 commit a878c9b
Showing 1 changed file with 24 additions and 17 deletions.
41 changes: 24 additions & 17 deletions packages/gatsby/src/utils/api-runner-node.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,13 @@ const nodeMutationsWrappers = {
// metadata to actions they create.
const boundPluginActionCreators = {}
const doubleBind = (boundActionCreators, api, plugin, actionOptions) => {
const { traceId, deferNodeMutation } = actionOptions
const {
traceId,
deferNodeMutation,
transactionId = `no-transaction`,
} = actionOptions
const defer = deferNodeMutation ? `defer-node-mutation` : ``
const actionKey = plugin.name + api + traceId + defer
const actionKey = plugin.name + api + traceId + defer + transactionId
if (boundPluginActionCreators[actionKey]) {
return boundPluginActionCreators[actionKey]
} else {
Expand Down Expand Up @@ -317,17 +321,19 @@ const getUninitializedCache = plugin => {

function maybeCommitTransaction(transactionId) {
if (transactionId) {
const count = (ongoingTransactions.get(transactionId) ?? 0) - 1
if (count <= 0) {
ongoingTransactions.delete(transactionId)
if (!commitStagingNodes) {
commitStagingNodes =
require(`../redux/actions/commit-staging-nodes`).commitStagingNodes
setImmediate(() => {
const count = (ongoingTransactions.get(transactionId) ?? 0) - 1
if (count <= 0) {
ongoingTransactions.delete(transactionId)
if (!commitStagingNodes) {
commitStagingNodes =
require(`../redux/actions/commit-staging-nodes`).commitStagingNodes
}
store.dispatch(commitStagingNodes(transactionId))
} else {
ongoingTransactions.set(transactionId, count)
}
store.dispatch(commitStagingNodes(transactionId))
} else {
ongoingTransactions.set(transactionId, count)
}
})
}
}

Expand Down Expand Up @@ -553,10 +559,9 @@ function apiRunnerNode(api, args = {}, { pluginSource, activity } = {}) {
}

// If there's no implementing plugins, return early.
if (implementingPlugins.length === 0) {
setImmediate(() => {
maybeCommitTransaction(args.transactionId)
})
if (implementingPlugins.length === 0 && args.transactionId) {
maybeCommitTransaction(args.transactionId)

return null
}

Expand Down Expand Up @@ -756,7 +761,9 @@ function apiRunnerNode(api, args = {}, { pluginSource, activity } = {}) {
emitter.emit(`API_RUNNING_QUEUE_EMPTY`)
}

maybeCommitTransaction(transactionId)
if (transactionId) {
maybeCommitTransaction(args.transactionId)
}

// Filter empty results
apiRunInstance.results = results.filter(result => !_.isEmpty(result))
Expand Down

0 comments on commit a878c9b

Please sign in to comment.