diff options
author | wxiaoguang <wxiaoguang@gmail.com> | 2021-11-16 10:21:13 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-16 10:21:13 +0800 |
commit | 62926032155eef30bd380a27601fe770eb00e855 (patch) | |
tree | 82a177cfe4792d1732f14eb8073c79405c0fdb8f /web_src/js/features | |
parent | 3a60e0ad8969b2e248a2f78e0ce02d2645d80dfa (diff) | |
download | gitea-62926032155eef30bd380a27601fe770eb00e855.tar.gz gitea-62926032155eef30bd380a27601fe770eb00e855.zip |
Fix database deadlock when update issue labels (#17649)
This fix updates issue labels one by one, and won't cause database deadlock.
In future, we can use a batch API to update all changed labels by one request.
Diffstat (limited to 'web_src/js/features')
-rw-r--r-- | web_src/js/features/repo-issue.js | 24 | ||||
-rw-r--r-- | web_src/js/features/repo-legacy.js | 24 |
2 files changed, 22 insertions, 26 deletions
diff --git a/web_src/js/features/repo-issue.js b/web_src/js/features/repo-issue.js index 782957c5b1..b69ba25719 100644 --- a/web_src/js/features/repo-issue.js +++ b/web_src/js/features/repo-issue.js @@ -332,20 +332,16 @@ export function initRepoIssueWipTitle() { }); } -export function updateIssuesMeta(url, action, issueIds, elementId) { - return new Promise((resolve, reject) => { - $.ajax({ - type: 'POST', - url, - data: { - _csrf: csrfToken, - action, - issue_ids: issueIds, - id: elementId, - }, - success: resolve, - error: reject, - }); +export async function updateIssuesMeta(url, action, issueIds, elementId) { + return $.ajax({ + type: 'POST', + url, + data: { + _csrf: csrfToken, + action, + issue_ids: issueIds, + id: elementId, + }, }); } diff --git a/web_src/js/features/repo-legacy.js b/web_src/js/features/repo-legacy.js index 8945360cd5..74880c5dc7 100644 --- a/web_src/js/features/repo-legacy.js +++ b/web_src/js/features/repo-legacy.js @@ -84,18 +84,18 @@ export function initRepoCommentForm() { $(`.${selector}`).dropdown('setting', 'onHide', () => { hasUpdateAction = $listMenu.data('action') === 'update'; // Update the var if (hasUpdateAction) { - const promises = []; - Object.keys(items).forEach((elementId) => { - const item = items[elementId]; - const promise = updateIssuesMeta( - item['update-url'], - item.action, - item['issue-id'], - elementId, - ); - promises.push(promise); - }); - Promise.all(promises).then(() => window.location.reload()); + // TODO: Add batch functionality and make this 1 network request. + (async function() { + for (const [elementId, item] of Object.entries(items)) { + await updateIssuesMeta( + item['update-url'], + item.action, + item['issue-id'], + elementId, + ); + } + window.location.reload(); + })(); } }); |