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:
		
					parent
					
						
							
								3a60e0ad89
							
						
					
				
			
			
				commit
				
					
						6292603215
					
				
			
		
					 2 changed files with 22 additions and 26 deletions
				
			
		| 
						 | 
					@ -332,9 +332,8 @@ export function initRepoIssueWipTitle() {
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function updateIssuesMeta(url, action, issueIds, elementId) {
 | 
					export async function updateIssuesMeta(url, action, issueIds, elementId) {
 | 
				
			||||||
  return new Promise((resolve, reject) => {
 | 
					  return $.ajax({
 | 
				
			||||||
    $.ajax({
 | 
					 | 
				
			||||||
    type: 'POST',
 | 
					    type: 'POST',
 | 
				
			||||||
    url,
 | 
					    url,
 | 
				
			||||||
    data: {
 | 
					    data: {
 | 
				
			||||||
| 
						 | 
					@ -343,9 +342,6 @@ export function updateIssuesMeta(url, action, issueIds, elementId) {
 | 
				
			||||||
      issue_ids: issueIds,
 | 
					      issue_ids: issueIds,
 | 
				
			||||||
      id: elementId,
 | 
					      id: elementId,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
      success: resolve,
 | 
					 | 
				
			||||||
      error: reject,
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -84,18 +84,18 @@ export function initRepoCommentForm() {
 | 
				
			||||||
    $(`.${selector}`).dropdown('setting', 'onHide', () => {
 | 
					    $(`.${selector}`).dropdown('setting', 'onHide', () => {
 | 
				
			||||||
      hasUpdateAction = $listMenu.data('action') === 'update'; // Update the var
 | 
					      hasUpdateAction = $listMenu.data('action') === 'update'; // Update the var
 | 
				
			||||||
      if (hasUpdateAction) {
 | 
					      if (hasUpdateAction) {
 | 
				
			||||||
        const promises = [];
 | 
					        // TODO: Add batch functionality and make this 1 network request.
 | 
				
			||||||
        Object.keys(items).forEach((elementId) => {
 | 
					        (async function() {
 | 
				
			||||||
          const item = items[elementId];
 | 
					          for (const [elementId, item] of Object.entries(items)) {
 | 
				
			||||||
          const promise = updateIssuesMeta(
 | 
					            await updateIssuesMeta(
 | 
				
			||||||
              item['update-url'],
 | 
					              item['update-url'],
 | 
				
			||||||
              item.action,
 | 
					              item.action,
 | 
				
			||||||
              item['issue-id'],
 | 
					              item['issue-id'],
 | 
				
			||||||
              elementId,
 | 
					              elementId,
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
          promises.push(promise);
 | 
					          }
 | 
				
			||||||
        });
 | 
					          window.location.reload();
 | 
				
			||||||
        Promise.all(promises).then(() => window.location.reload());
 | 
					        })();
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue