Skip to content

Commit 6292603

Browse files
authored
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.
1 parent 3a60e0a commit 6292603

File tree

2 files changed

+22
-26
lines changed

2 files changed

+22
-26
lines changed

web_src/js/features/repo-issue.js

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -332,20 +332,16 @@ export function initRepoIssueWipTitle() {
332332
});
333333
}
334334

335-
export function updateIssuesMeta(url, action, issueIds, elementId) {
336-
return new Promise((resolve, reject) => {
337-
$.ajax({
338-
type: 'POST',
339-
url,
340-
data: {
341-
_csrf: csrfToken,
342-
action,
343-
issue_ids: issueIds,
344-
id: elementId,
345-
},
346-
success: resolve,
347-
error: reject,
348-
});
335+
export async function updateIssuesMeta(url, action, issueIds, elementId) {
336+
return $.ajax({
337+
type: 'POST',
338+
url,
339+
data: {
340+
_csrf: csrfToken,
341+
action,
342+
issue_ids: issueIds,
343+
id: elementId,
344+
},
349345
});
350346
}
351347

web_src/js/features/repo-legacy.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -84,18 +84,18 @@ export function initRepoCommentForm() {
8484
$(`.${selector}`).dropdown('setting', 'onHide', () => {
8585
hasUpdateAction = $listMenu.data('action') === 'update'; // Update the var
8686
if (hasUpdateAction) {
87-
const promises = [];
88-
Object.keys(items).forEach((elementId) => {
89-
const item = items[elementId];
90-
const promise = updateIssuesMeta(
91-
item['update-url'],
92-
item.action,
93-
item['issue-id'],
94-
elementId,
95-
);
96-
promises.push(promise);
97-
});
98-
Promise.all(promises).then(() => window.location.reload());
87+
// TODO: Add batch functionality and make this 1 network request.
88+
(async function() {
89+
for (const [elementId, item] of Object.entries(items)) {
90+
await updateIssuesMeta(
91+
item['update-url'],
92+
item.action,
93+
item['issue-id'],
94+
elementId,
95+
);
96+
}
97+
window.location.reload();
98+
})();
9999
}
100100
});
101101

0 commit comments

Comments
 (0)