From 4584d5c845043c7368121c018ab710d1d459dee4 Mon Sep 17 00:00:00 2001 From: Edison Su Date: Thu, 27 Mar 2014 16:03:49 -0700 Subject: [PATCH] CLOUDSTACK-5831: return quiescevm field in volumeresponse Conflicts: api/src/org/apache/cloudstack/api/response/VolumeResponse.java server/src/com/cloud/api/query/QueryManagerImpl.java --- .../api/response/VolumeResponse.java | 19 +++++++++++++++ .../com/cloud/api/query/QueryManagerImpl.java | 23 +++++++++++++++---- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java index 27e95def021..45c15daa6a4 100644 --- a/api/src/org/apache/cloudstack/api/response/VolumeResponse.java +++ b/api/src/org/apache/cloudstack/api/response/VolumeResponse.java @@ -204,6 +204,11 @@ public class VolumeResponse extends BaseResponse implements ControlledViewEntity @Param(description = "the chain info of the volume", since = "4.4") String chainInfo; + @SerializedName(ApiConstants.SNAPSHOT_QUIESCEVM) + @Param(description = "need quiesce vm or not when taking snapshot", since="4.3") + private boolean needQuiescevm; + + public String getPath() { return path; } @@ -425,4 +430,18 @@ public class VolumeResponse extends BaseResponse implements ControlledViewEntity public void setChainInfo(String chainInfo) { this.chainInfo = chainInfo; } + + public String getStoragePoolId() { + return storagePoolId; + } + + public void setNeedQuiescevm(boolean quiescevm) { + this.needQuiescevm = quiescevm; + } + + public boolean isNeedQuiescevm() { + return this.needQuiescevm; + } + + } diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index b932d422db5..9d5914d7eb6 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -26,6 +26,7 @@ import java.util.Set; import javax.ejb.Local; import javax.inject.Inject; +import org.apache.cloudstack.engine.subsystem.api.storage.*; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -91,10 +92,6 @@ import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.VolumeResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.context.CallContext; -import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; -import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreDriver; -import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; -import org.apache.cloudstack.engine.subsystem.api.storage.TemplateState; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.query.QueryService; @@ -1643,6 +1640,24 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { List volumeResponses = ViewResponseHelper.createVolumeResponse(respView, result.first().toArray( new VolumeJoinVO[result.first().size()])); + for(VolumeResponse vr : volumeResponses) { + String poolId = vr.getStoragePoolId(); + DataStore store = dataStoreManager.getPrimaryDataStore(poolId); + if (store == null) { + continue; + } + + DataStoreDriver driver = store.getDriver(); + if (driver == null) { + continue; + } + + Map caps = driver.getCapabilities(); + if (caps != null) { + boolean quiescevm = Boolean.parseBoolean(caps.get(DataStoreCapabilities.VOLUME_SNAPSHOT_QUIESCEVM.toString())); + vr.setNeedQuiescevm(quiescevm); + } + } response.setResponses(volumeResponses, result.second()); return response; }