mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 11:28:24 +00:00 
			
		
		
		
	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.
This commit is contained in:
		| @@ -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, | ||||
|     }, | ||||
|   }); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -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(); | ||||
|         })(); | ||||
|       } | ||||
|     }); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user