Hello Fred Rolland,

I'd like you to do a code review.  Please visit

    https://gerrit.ovirt.org/39318

to review the following change.

Change subject: engine: Add support for Refresh LUNs size
......................................................................

engine: Add support for Refresh LUNs size

Add command RefreshLunsSizeCommand to support resize of LUNs.
        input  : a list of LUN GUIDs
        output : status of operation
        action : - Send to all hosts in Data Center a  "refresh device"
                   command.
                 - If all hosts return the same size,
                   send to SPM a "resize PV" command.
                 - Retrieve SD info and update DB with new sizes.
                 - Send to all other hosts in Data Center
                   a "refresh PV" command

Add support to refresh LUNs via REST API of update Storage Domain.
An additional boolean field named "refresh_size" will be added to the
"logical_unit".

Still missing:
- Additional VDSM verbs support - resizePV, refreshPV
- Locking and compensation
- Version support validation
- Error Handling

Change-Id: I6c5c6d59087736466ee5e7eb0c77ee9282199c62
Relates-To: https://bugzilla.redhat.com/609689
Signed-off-by: Fred Rolland <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshLunsSizeCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/RefreshDeviceSizeVDSCommandParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
M 
backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
A 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RefreshDeviceSizeMapReturnForXmlRpc.java
A 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RefreshDeviceSizeVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
15 files changed, 265 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/18/39318/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshLunsSizeCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshLunsSizeCommand.java
new file mode 100644
index 0000000..8bfbd9c
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshLunsSizeCommand.java
@@ -0,0 +1,121 @@
+package org.ovirt.engine.core.bll.storage;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.ovirt.engine.core.bll.context.CommandContext;
+import org.ovirt.engine.core.bll.context.CompensationContext;
+import org.ovirt.engine.core.common.action.ExtendSANStorageDomainParameters;
+import org.ovirt.engine.core.common.businessentities.StorageDomain;
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.businessentities.VdsSpmStatus;
+import org.ovirt.engine.core.common.errors.VdcBLLException;
+import 
org.ovirt.engine.core.common.vdscommands.GetStorageDomainStatsVDSCommandParameters;
+import 
org.ovirt.engine.core.common.vdscommands.RefreshDeviceSizeVDSCommandParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
+import org.ovirt.engine.core.utils.linq.LinqUtils;
+import org.ovirt.engine.core.utils.linq.Predicate;
+import org.ovirt.engine.core.utils.transaction.TransactionMethod;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RefreshLunsSizeCommand<T extends 
ExtendSANStorageDomainParameters> extends
+        StorageDomainCommandBase<T> {
+
+    private static final Logger log = 
LoggerFactory.getLogger(RefreshLunsSizeCommand.class);
+
+    public RefreshLunsSizeCommand(T parameters, CommandContext commandContext) 
{
+        super(parameters, commandContext);
+    }
+
+    public RefreshLunsSizeCommand(T parameters) {
+        this(parameters, null);
+    }
+
+    @Override
+    protected void executeCommand() {
+        // Call Refresh Device on all Hosts
+        Map<String, Map<Long, List<VDS>>> lunToSize = 
refreshLunSizeAllVds(getParameters().getLunIds());
+
+        for (Map.Entry<String, Map<Long, List<VDS>>> entry : 
lunToSize.entrySet()) {
+            if (entry.getValue().size() != 1) {
+                log.error("Failed to refresh device " + entry.getKey() + " Not 
all VDS are seeing the same size");
+            }
+        }
+        // Call PV resize on SPM
+
+        // Update storage domain size
+        updateStorageDomainData();
+
+        // Call PV refresh on all Hosts
+
+        setSucceeded(true);
+    }
+
+    private Map<String, Map<Long, List<VDS>>> 
refreshLunSizeAllVds(List<String> luns) {
+        Map<String, Map<Long, List<VDS>>> lunToSize = new HashMap<>();
+        for (String lun : luns) {
+            Map<Long, List<VDS>> lunSizeToVDs = new HashMap<>();
+            lunToSize.put(lun, lunSizeToVDs);
+
+            for (VDS vds : getAllRunningVdssInPool()) {
+                Long size = refreshLun(vds, lun); // catch exception for each 
lun ? Fail by lun or all operation ?
+                List<VDS> vdsForSize = lunSizeToVDs.get(size);
+                if (vdsForSize == null) {
+                    vdsForSize = new ArrayList<>();
+                    lunSizeToVDs.put(size, vdsForSize);
+                }
+                vdsForSize.add(vds);
+            }
+        }
+        return lunToSize;
+    }
+
+    private Long refreshLun(VDS vds, String lunId) {
+        try {
+            return (Long) runVdsCommand(
+                    VDSCommandType.RefreshDeviceSize,
+                    new RefreshDeviceSizeVDSCommandParameters(vds.getId(),
+                            lunId)).getReturnValue();
+        } catch (VdcBLLException e) {
+            log.error("Failed to refresh device " + lunId, e);
+            throw e;
+        }
+    }
+
+    private void updateStorageDomainData() {
+        VDSReturnValue returnValueUpdatedStorageDomain = getStatsForDomain();
+        if (returnValueUpdatedStorageDomain.getSucceeded()) {
+            StorageDomain updatedStorageDomain =
+                    (StorageDomain) 
returnValueUpdatedStorageDomain.getReturnValue();
+            updateStorageDomain(updatedStorageDomain);
+        }
+    }
+
+    protected VDSReturnValue getStatsForDomain() {
+        VDS spmVds = 
LinqUtils.first(LinqUtils.filter(getAllRunningVdssInPool(), new 
Predicate<VDS>() {
+            @Override
+            public boolean eval(VDS vds) {
+                return vds.getSpmStatus() == VdsSpmStatus.SPM;
+            }
+        }));
+        return runVdsCommand(VDSCommandType.GetStorageDomainStats,
+                new GetStorageDomainStatsVDSCommandParameters(spmVds.getId(), 
getParameters().getStorageDomainId()));
+    }
+
+    protected void updateStorageDomain(final StorageDomain 
storageDomainToUpdate) {
+        executeInNewTransaction(new TransactionMethod<Void>() {
+            @Override
+            public Void runInTransaction() {
+                CompensationContext context = getCompensationContext();
+                
context.snapshotEntity(storageDomainToUpdate.getStorageDynamicData());
+                
getDbFacade().getStorageDomainDynamicDao().update(storageDomainToUpdate.getStorageDynamicData());
+                getCompensationContext().stateChanged();
+                return null;
+            }
+        });
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
index c524d69..1e95207 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
@@ -244,6 +244,7 @@
     DeactivateStorageDomain(909, ActionGroup.MANIPULATE_STORAGE_DOMAIN, 
QuotaDependency.NONE),
     AddSANStorageDomain(910, ActionGroup.CREATE_STORAGE_DOMAIN, 
QuotaDependency.NONE),
     ExtendSANStorageDomain(911, ActionGroup.EDIT_STORAGE_DOMAIN_CONFIGURATION, 
QuotaDependency.NONE),
+    RefreshLunsSize(917, ActionGroup.EDIT_STORAGE_DOMAIN_CONFIGURATION, 
QuotaDependency.NONE),
     ReconstructMasterDomain(913, QuotaDependency.NONE),
     DeactivateStorageDomainWithOvfUpdate(914, 
ActionGroup.MANIPULATE_STORAGE_DOMAIN, QuotaDependency.NONE),
     RecoveryStoragePool(915, ActionGroup.CREATE_STORAGE_POOL, 
QuotaDependency.NONE),
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/RefreshDeviceSizeVDSCommandParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/RefreshDeviceSizeVDSCommandParameters.java
new file mode 100644
index 0000000..9750c73
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/RefreshDeviceSizeVDSCommandParameters.java
@@ -0,0 +1,29 @@
+package org.ovirt.engine.core.common.vdscommands;
+
+import org.ovirt.engine.core.compat.Guid;
+
+public class RefreshDeviceSizeVDSCommandParameters extends 
VdsIdVDSCommandParametersBase {
+
+    private String deviceId;
+
+    public RefreshDeviceSizeVDSCommandParameters(Guid vdsId, String deviceId) {
+        super(vdsId);
+        this.deviceId = deviceId;
+    }
+
+    public RefreshDeviceSizeVDSCommandParameters() {
+    }
+
+    public String getDeviceId() {
+        return deviceId;
+    }
+
+    public void setDeviceId(String deviceId) {
+        this.deviceId = deviceId;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s, deviceId=%s", super.toString(), 
getDeviceId());
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
index f7dbfca..fb1e4c6 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
@@ -94,6 +94,7 @@
     CreateVG("org.ovirt.engine.core.vdsbroker.vdsbroker"),
     GetVGList("org.ovirt.engine.core.vdsbroker.vdsbroker"),
     GetVGInfo("org.ovirt.engine.core.vdsbroker.vdsbroker"),
+    RefreshDeviceSize("org.ovirt.engine.core.vdsbroker.vdsbroker"),
     GetDeviceList("org.ovirt.engine.core.vdsbroker.vdsbroker"),
     GetDevicesVisibility("org.ovirt.engine.core.vdsbroker.vdsbroker"),
     SPMGetAllTasksStatuses("org.ovirt.engine.core.vdsbroker.irsbroker"),
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
 
b/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
index faf0ef5..e8ca494 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
@@ -64,6 +64,7 @@
 job.DeactivateStorageDomainWithOvfUpdate=Deactivating Storage Domain 
${Storage} in Data Center ${StoragePool}.
 job.AddSANStorageDomain=Adding SAN Storage Domain ${Storage}
 job.ExtendSANStorageDomain=Extending SAN Storage Domain ${Storage}
+job.RefreshLunsSize=Refresh LUNs Size in Domain ${Storage}
 job.RecoveryStoragePool=Recovering Data Center ${StoragePool}
 job.RemoveStoragePool=Removing Data Center ${StoragePool}
 job.UpdateStoragePool=Editing Data Center ${StoragePool} properties
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
index 7a81124..3146ffb 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
@@ -2636,6 +2636,7 @@
       <xs:element name="volume_group_id" type="xs:string" minOccurs="0"/>
       <xs:element name="storage_domain_id" type="xs:string" minOccurs="0"/>
       <xs:element name="disk_id" type="xs:string" minOccurs="0"/>
+      <xs:element name="refresh_size" type="xs:boolean" minOccurs="0"/>
     </xs:sequence>
   </xs:group>
 
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
index dd76285..3f62758 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
@@ -1553,7 +1553,7 @@
       - mandatoryArguments: {storagedomain.host.id|name: 'xs:string', 
storagedomain.storage.logical_unit--COLLECTION: {logical_unit.address: 
'xs:string',
             logical_unit.port: 'xs:int', logical_unit.target: 'xs:string', 
logical_unit.username: 'xs:string', logical_unit.password: 'xs:string',
             logical_unit.serial: 'xs:string', logical_unit.vendor_id: 
'xs:string', logical_unit.product_id: 'xs:string',
-            logical_unit.lun_mapping: 'xs:int', logical_unit.portal: 
'xs:string', logical_unit.paths: 'xs:int', logical_unit.id: 'xs:string'}}
+            logical_unit.lun_mapping: 'xs:int', logical_unit.portal: 
'xs:string', logical_unit.paths: 'xs:int', logical_unit.id: 'xs:string', 
logical_unit.refresh_size: 'xs:boolean'}}
         optionalArguments: {storagedomain.name: 'xs:string', 
storagedomain.comment: 'xs:string', storagedomain.storage.override_luns: 
'xs:boolean', storagedomain.wipe_after_delete: 'xs:boolean'}
         description: update the storage domain
     urlparams:
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainResource.java
index 32eef84..45b5de0 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainResource.java
@@ -85,6 +85,7 @@
             case ISCSI:
             case FCP:
                 extendStorageDomain(incoming, model, storageType);
+                refreshLunSize(incoming, model, storageType);
                 break;
             default:
                 break;
@@ -163,6 +164,33 @@
     }
 
     /**
+     * Resize the LUNs if the user specified
+     * @param incoming
+     * @param storageDomain
+     * @param storageType
+     */
+    private void refreshLunSize(StorageDomain incoming, StorageDomain 
storageDomain, StorageType storageType) {
+        if (incoming.getStorage() == null) {
+            // LUNs info was not supplied in the request so no need to check 
whether to refresh the size
+            return;
+        }
+        List<LogicalUnit> incomingLuns = 
getIncomingLuns(incoming.getStorage());
+        if (!incomingLuns.isEmpty()) {
+            List<LogicalUnit> lunsToResize = new ArrayList<>();
+            for(LogicalUnit logicalUnit: incomingLuns){
+                if(logicalUnit.isSetRefreshSize() && 
logicalUnit.isRefreshSize()){
+                    lunsToResize.add(logicalUnit);
+                }
+            }
+            if(!lunsToResize.isEmpty()){
+
+                ExtendSANStorageDomainParameters params = 
createParameters(guid, lunsToResize, false);
+                performAction(VdcActionType.RefreshLunsSize, params);
+            }
+        }
+    }
+
+    /**
      * if user added new LUNs - extend the storage domain.
      *
      * @param incoming
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
index a0a0183..2a558f4 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
@@ -98,6 +98,7 @@
             addErrataForHostsFeature(features);
             addCumulativeNetworkUsageFeature(features);
             addGuestMemoryBufferedCached(features);
+            addRefreshLunSize(features);
         }
         return features;
     }
@@ -560,4 +561,11 @@
         feature.setDescription("Report of used cached and buffered memory in 
the guest OS");
         features.getFeature().add(feature);
     }
+
+    private void addRefreshLunSize(Features features) {
+        Feature feature = new Feature();
+        feature.setName("Refresh LUNs Size");
+        feature.setDescription("Refresh the LUN size in order to reflect an 
increase in the size of a storage domain");
+        features.getFeature().add(feature);
+    }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java
index f6f5b3f..5f1f863 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java
@@ -45,6 +45,7 @@
 import 
org.ovirt.engine.core.vdsbroker.vdsbroker.OneStorageDomainStatsReturnForXmlRpc;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.OneVGReturnForXmlRpc;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.OneVmReturnForXmlRpc;
+import 
org.ovirt.engine.core.vdsbroker.vdsbroker.RefreshDeviceSizeMapReturnForXmlRpc;
 import 
org.ovirt.engine.core.vdsbroker.vdsbroker.ServerConnectionListReturnForXmlRpc;
 import 
org.ovirt.engine.core.vdsbroker.vdsbroker.ServerConnectionStatusReturnForXmlRpc;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.SpmStatusReturnForXmlRpc;
@@ -743,6 +744,15 @@
     }
 
     @Override
+    public RefreshDeviceSizeMapReturnForXmlRpc refreshDeviceSize(String 
device) {
+        JsonRpcRequest request =
+                new RequestBuilder("Host.refreshDevice").withParameter("guid", 
device).build();
+        Map<String, Object> response =
+                new FutureMap(this.client, request).withResponseKey("size");
+        return new RefreshDeviceSizeMapReturnForXmlRpc(response);
+    }
+
+    @Override
     public LUNListReturnForXmlRpc getDeviceList(int storageType) {
         JsonRpcRequest request =
                 new 
RequestBuilder("Host.getDeviceList").withParameter("storageType",
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
index d29ea83..7485e8c 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
@@ -153,6 +153,8 @@
 
     OneVGReturnForXmlRpc getVGInfo(String vgUUID);
 
+    RefreshDeviceSizeMapReturnForXmlRpc refreshDeviceSize(String device);
+
     LUNListReturnForXmlRpc getDeviceList(int storageType);
 
     StorageDeviceListReturnForXmlRpc getStorageDeviceList();
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RefreshDeviceSizeMapReturnForXmlRpc.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RefreshDeviceSizeMapReturnForXmlRpc.java
new file mode 100644
index 0000000..b59a4dc
--- /dev/null
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RefreshDeviceSizeMapReturnForXmlRpc.java
@@ -0,0 +1,21 @@
+package org.ovirt.engine.core.vdsbroker.vdsbroker;
+
+import org.ovirt.engine.core.vdsbroker.irsbroker.StatusReturnForXmlRpc;
+
+import java.util.Map;
+
+public class RefreshDeviceSizeMapReturnForXmlRpc extends StatusReturnForXmlRpc 
{
+    private static final String SIZE = "size";
+
+    private Long deviceSize;
+
+    public RefreshDeviceSizeMapReturnForXmlRpc(Map<String, Object> innerMap) {
+        super(innerMap);
+        deviceSize = (innerMap.get(SIZE) != null) ?
+                Long.valueOf((String) innerMap.get(SIZE)) : null;
+    }
+
+    public Long getDeviceSize() {
+        return deviceSize;
+    }
+}
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RefreshDeviceSizeVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RefreshDeviceSizeVDSCommand.java
new file mode 100644
index 0000000..57eba56
--- /dev/null
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RefreshDeviceSizeVDSCommand.java
@@ -0,0 +1,28 @@
+package org.ovirt.engine.core.vdsbroker.vdsbroker;
+
+import 
org.ovirt.engine.core.common.vdscommands.RefreshDeviceSizeVDSCommandParameters;
+
+public class RefreshDeviceSizeVDSCommand<P extends 
RefreshDeviceSizeVDSCommandParameters> extends VdsBrokerCommand<P> {
+
+    private RefreshDeviceSizeMapReturnForXmlRpc result;
+
+    public RefreshDeviceSizeVDSCommand(P parameters) {
+        super(parameters);
+    }
+
+    protected void executeVdsBrokerCommand() {
+        result = getBroker().refreshDeviceSize(getParameters().getDeviceId());
+        proceedProxyReturnValue();
+        setReturnValue(result.getDeviceSize());
+    }
+
+    @Override
+    protected Object getReturnValueFromBroker() {
+        return result;
+    }
+
+    @Override
+    protected StatusForXmlRpc getReturnStatus() {
+        return result.mStatus;
+    }
+}
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
index a315a23..3d5943a 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
@@ -126,6 +126,8 @@
 
     public Map<String, Object> getVGInfo(String vgUUID);
 
+    public Map<String, Object> refreshDevice(String device);
+
     public Map<String, Object> getDeviceList(int storageType);
 
     public Map<String, Object> getDevicesVisibility(String[] devicesList);
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
index b13910c..cc9bfee 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
@@ -666,6 +666,17 @@
     }
 
     @Override
+    public RefreshDeviceSizeMapReturnForXmlRpc refreshDeviceSize(String 
device){
+        try {
+            Map<String, Object> xmlRpcReturnValue = 
vdsServer.refreshDevice(device);
+            RefreshDeviceSizeMapReturnForXmlRpc wrapper = new 
RefreshDeviceSizeMapReturnForXmlRpc(xmlRpcReturnValue);
+            return wrapper;
+        } catch (UndeclaredThrowableException ute) {
+            throw new XmlRpcRunTimeException(ute);
+        }
+    }
+
+    @Override
     public LUNListReturnForXmlRpc getDeviceList(int storageType) {
         try {
             Map<String, Object> xmlRpcReturnValue = 
vdsServer.getDeviceList(storageType);


-- 
To view, visit https://gerrit.ovirt.org/39318
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6c5c6d59087736466ee5e7eb0c77ee9282199c62
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Freddy Rolland <[email protected]>
Gerrit-Reviewer: Fred Rolland <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to