Browse Source

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.
tags/v1.16.0-rc1
wxiaoguang 2 years ago
parent
commit
6292603215
No account linked to committer's email address
2 changed files with 22 additions and 26 deletions
  1. 10
    14
      web_src/js/features/repo-issue.js
  2. 12
    12
      web_src/js/features/repo-legacy.js

+ 10
- 14
web_src/js/features/repo-issue.js View File

@@ -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,
},
});
}


+ 12
- 12
web_src/js/features/repo-legacy.js View File

@@ -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();
})();
}
});


Loading…
Cancel
Save