bug 10920: avoid deadlocks by avoiding locks on the index on step

This commit is contained in:
Chiradeep Vittal 2011-08-01 15:30:22 -07:00
parent f48efae77c
commit b4b87b1de8
3 changed files with 20 additions and 4 deletions

View File

@ -1140,6 +1140,8 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG
Set<Long> affectedVms = new HashSet<Long>();
for (SecurityGroupWorkVO work : unfinished) {
affectedVms.add(work.getInstanceId());
work.setStep(Step.Error);
_workDao.update(work.getId(), work);
}
scheduleRulesetUpdateToHosts(affectedVms, false, null);
} else {

View File

@ -41,6 +41,9 @@ public interface SecurityGroupWorkDao extends GenericDao<SecurityGroupWorkVO, Lo
List<SecurityGroupWorkVO> findUnfinishedWork(Date timeBefore);
List<SecurityGroupWorkVO> findAndCleanupUnfinishedWork(Date timeBefore);
List<SecurityGroupWorkVO> findScheduledWork();

View File

@ -210,13 +210,24 @@ public class SecurityGroupWorkDaoImpl extends GenericDaoBase<SecurityGroupWorkVO
List<SecurityGroupWorkVO> result = listIncludingRemovedBy(sc);
SecurityGroupWorkVO work = createForUpdate();
work.setStep(Step.Error);
update(work, sc);
return result;
}
@Override
public List<SecurityGroupWorkVO> findAndCleanupUnfinishedWork(Date timeBefore) {
final SearchCriteria<SecurityGroupWorkVO> sc = CleanupSearch.create();
sc.setParameters("taken", timeBefore);
sc.setParameters("step", Step.Processing);
List<SecurityGroupWorkVO> result = listIncludingRemovedBy(sc);
SecurityGroupWorkVO work = createForUpdate();
work.setStep(Step.Error);
update(work, sc);
return result;
}
@Override
public List<SecurityGroupWorkVO> findScheduledWork() {
final SearchCriteria<SecurityGroupWorkVO> sc = UntakenWorkSearch.create();