Updated Branches: refs/heads/4.2 9a9ef3112 -> a467c45bf
CLOUDSTACK-4338: catch up exception in case of deleting volume in parallel: it's possible that two threads can delete one volume at the same time, if the volume state is in Expunging Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/a467c45b Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/a467c45b Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/a467c45b Branch: refs/heads/4.2 Commit: a467c45bf6ebf747fe38fa63f5bc6334b6678f7c Parents: 9a9ef31 Author: Edison Su <sudi...@gmail.com> Authored: Wed Aug 14 18:14:05 2013 -0700 Committer: Edison Su <sudi...@gmail.com> Committed: Wed Aug 14 18:14:20 2013 -0700 ---------------------------------------------------------------------- .../storage/volume/VolumeServiceImpl.java | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a467c45b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java ---------------------------------------------------------------------- diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java index 5baf79c..534596a 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java @@ -292,15 +292,19 @@ public class VolumeServiceImpl implements VolumeService { CommandResult result = callback.getResult(); VolumeObject vo = context.getVolume(); VolumeApiResult apiResult = new VolumeApiResult(vo); - if (result.isSuccess()) { - vo.processEvent(Event.OperationSuccessed); - if (canVolumeBeRemoved(vo.getId())) { - s_logger.info("Volume " + vo.getId() + " is not referred anywhere, remove it from volumes table"); - volDao.remove(vo.getId()); + try { + if (result.isSuccess()) { + vo.processEvent(Event.OperationSuccessed); + if (canVolumeBeRemoved(vo.getId())) { + s_logger.info("Volume " + vo.getId() + " is not referred anywhere, remove it from volumes table"); + volDao.remove(vo.getId()); + } + } else { + vo.processEvent(Event.OperationFailed); + apiResult.setResult(result.getResult()); } - } else { - vo.processEvent(Event.OperationFailed); - apiResult.setResult(result.getResult()); + } catch (Exception e) { + s_logger.debug("ignore delete volume status update failure, it will be picked up by storage clean up thread later", e); } context.getFuture().complete(apiResult); return null;