Repository: cloudstack
Updated Branches:
  refs/heads/master cd1706191 -> 887f027a9


CLOUDSTACK-6907: lisVolumes - make a decision whether to set service or disk 
offering in the response, based on the DiskOfferingVO type entry, not the 
volume Type


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/887f027a
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/887f027a
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/887f027a

Branch: refs/heads/master
Commit: 887f027a9ae97f6dd2bdd89f52e6233f991b2949
Parents: cd17061
Author: Alena Prokharchyk <[email protected]>
Authored: Thu Jun 12 16:14:31 2014 -0700
Committer: Alena Prokharchyk <[email protected]>
Committed: Thu Jun 12 16:25:04 2014 -0700

----------------------------------------------------------------------
 server/src/com/cloud/api/ApiDBUtils.java        |  6 +++++-
 .../cloud/api/query/dao/VolumeJoinDaoImpl.java  | 20 ++++++++++++++------
 2 files changed, 19 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/887f027a/server/src/com/cloud/api/ApiDBUtils.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiDBUtils.java 
b/server/src/com/cloud/api/ApiDBUtils.java
index 153d998..90a09a0 100755
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@ -900,7 +900,11 @@ public class ApiDBUtils {
     }
 
     public static DiskOfferingVO findDiskOfferingById(Long diskOfferingId) {
-        return s_diskOfferingDao.findByIdIncludingRemoved(diskOfferingId);
+        DiskOfferingVO off = 
s_diskOfferingDao.findByIdIncludingRemoved(diskOfferingId);
+        if (off.getType() == DiskOfferingVO.Type.Disk) {
+            return off;
+        }
+        return null;
     }
 
     public static DomainVO findDomainById(Long domainId) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/887f027a/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java 
b/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
index 7e9fd39..3303599 100644
--- a/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
@@ -22,13 +22,12 @@ import java.util.List;
 import javax.ejb.Local;
 import javax.inject.Inject;
 
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
 import org.apache.cloudstack.api.ResponseObject.ResponseView;
 import org.apache.cloudstack.api.response.VolumeResponse;
 import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
 
 import com.cloud.api.ApiDBUtils;
 import com.cloud.api.ApiResponseHelper;
@@ -154,19 +153,28 @@ public class VolumeJoinDaoImpl extends 
GenericDaoBase<VolumeJoinVO, Long> implem
         // DiskOfferingVO diskOffering =
         // ApiDBUtils.findDiskOfferingById(volume.getDiskOfferingId());
         if (volume.getDiskOfferingId() > 0) {
+            boolean isServiceOffering = false;
             if (volume.getVolumeType().equals(Volume.Type.ROOT)) {
-                volResponse.setServiceOfferingId(volume.getDiskOfferingUuid());
+                isServiceOffering = true;
             } else {
-                volResponse.setDiskOfferingId(volume.getDiskOfferingUuid());
+                // can't rely on the fact that the volume is the datadisk as 
it might have been created as a root, and
+                // then detached later
+                long offeringId = volume.getDiskOfferingId();
+                if (ApiDBUtils.findDiskOfferingById(offeringId) == null) {
+                    isServiceOffering = true;
+                }
             }
 
-            if (volume.getVolumeType().equals(Volume.Type.ROOT)) {
+            if (isServiceOffering) {
+                volResponse.setServiceOfferingId(volume.getDiskOfferingUuid());
                 
volResponse.setServiceOfferingName(volume.getDiskOfferingName());
                 
volResponse.setServiceOfferingDisplayText(volume.getDiskOfferingDisplayText());
             } else {
+                volResponse.setDiskOfferingId(volume.getDiskOfferingUuid());
                 volResponse.setDiskOfferingName(volume.getDiskOfferingName());
                 
volResponse.setDiskOfferingDisplayText(volume.getDiskOfferingDisplayText());
             }
+
             volResponse.setStorageType(volume.isUseLocalStorage() ? 
ServiceOffering.StorageType.local.toString() : 
ServiceOffering.StorageType.shared.toString());
             volResponse.setBytesReadRate(volume.getBytesReadRate());
             volResponse.setBytesWriteRate(volume.getBytesReadRate());

Reply via email to