From b4b87b1de8f1e272d45a6bc69704b7c375c0abd3 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Mon, 1 Aug 2011 15:30:22 -0700 Subject: [PATCH] bug 10920: avoid deadlocks by avoiding locks on the index on step --- .../security/SecurityGroupManagerImpl.java | 2 ++ .../security/dao/SecurityGroupWorkDao.java | 3 +++ .../dao/SecurityGroupWorkDaoImpl.java | 19 +++++++++++++++---- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java index 31ff2d03b28..132cffcbdb7 100755 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java @@ -1140,6 +1140,8 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG Set affectedVms = new HashSet(); for (SecurityGroupWorkVO work : unfinished) { affectedVms.add(work.getInstanceId()); + work.setStep(Step.Error); + _workDao.update(work.getId(), work); } scheduleRulesetUpdateToHosts(affectedVms, false, null); } else { diff --git a/server/src/com/cloud/network/security/dao/SecurityGroupWorkDao.java b/server/src/com/cloud/network/security/dao/SecurityGroupWorkDao.java index 59e46618d56..3e5819a3263 100644 --- a/server/src/com/cloud/network/security/dao/SecurityGroupWorkDao.java +++ b/server/src/com/cloud/network/security/dao/SecurityGroupWorkDao.java @@ -41,6 +41,9 @@ public interface SecurityGroupWorkDao extends GenericDao findUnfinishedWork(Date timeBefore); + List findAndCleanupUnfinishedWork(Date timeBefore); + + List findScheduledWork(); diff --git a/server/src/com/cloud/network/security/dao/SecurityGroupWorkDaoImpl.java b/server/src/com/cloud/network/security/dao/SecurityGroupWorkDaoImpl.java index 990730796aa..eea2da088f1 100644 --- a/server/src/com/cloud/network/security/dao/SecurityGroupWorkDaoImpl.java +++ b/server/src/com/cloud/network/security/dao/SecurityGroupWorkDaoImpl.java @@ -210,13 +210,24 @@ public class SecurityGroupWorkDaoImpl extends GenericDaoBase result = listIncludingRemovedBy(sc); - SecurityGroupWorkVO work = createForUpdate(); - work.setStep(Step.Error); - update(work, sc); - return result; } + @Override + public List findAndCleanupUnfinishedWork(Date timeBefore) { + final SearchCriteria sc = CleanupSearch.create(); + sc.setParameters("taken", timeBefore); + sc.setParameters("step", Step.Processing); + + List result = listIncludingRemovedBy(sc); + + SecurityGroupWorkVO work = createForUpdate(); + work.setStep(Step.Error); + update(work, sc); + + return result; + } + @Override public List findScheduledWork() { final SearchCriteria sc = UntakenWorkSearch.create();