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;

Reply via email to