You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ro...@apache.org on 2020/08/19 09:24:32 UTC

[cloudstack] 01/01: Revert "server: Added nfs minor version support (#4180)"

This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch revert-4180-nfs_minor_version
in repository https://gitbox.apache.org/repos/asf/cloudstack.git

commit 5f707be3ffb4217841e3de472d3d19f81e3cb689
Author: Rohit Yadav <ro...@apache.org>
AuthorDate: Wed Aug 19 14:54:18 2020 +0530

    Revert "server: Added nfs minor version support (#4180)"
    
    This reverts commit d57aa835174c9dd045930d1396ce4bee9a275a60.
---
 .../main/java/com/cloud/agent/api/to/NfsTO.java    |  6 ++---
 .../cloud/agent/api/GetStorageStatsCommand.java    |  2 +-
 .../agent/api/storage/ListTemplateCommand.java     |  2 +-
 .../cloud/agent/api/storage/StorageCommand.java    |  2 +-
 .../api/storage/StorageNfsVersionCommand.java      |  8 +++----
 .../command/TemplateOrVolumePostUploadCommand.java |  6 ++---
 .../java/com/cloud/capacity/CapacityManager.java   |  6 ++---
 .../storage/image/TemplateServiceImpl.java         |  2 +-
 .../storage/image/NfsImageStoreDriverImpl.java     |  5 ++--
 .../com/cloud/resource/AgentStorageResource.java   |  3 ++-
 .../vmware/manager/VmwareManagerImpl.java          |  6 ++---
 .../vmware/manager/VmwareStorageManagerImpl.java   | 24 +++++++++----------
 .../vmware/manager/VmwareStorageMount.java         |  2 +-
 .../hypervisor/vmware/resource/VmwareResource.java |  2 +-
 .../resource/PremiumSecondaryStorageResource.java  |  2 +-
 .../VmwareSecondaryStorageResourceHandler.java     |  4 ++--
 .../storage/resource/VmwareStorageProcessor.java   | 22 ++++++++---------
 .../VmwareStorageSubsystemCommandHandler.java      |  6 ++---
 .../vmware/resource/VmwareResourceTest.java        |  4 ++--
 .../main/java/com/cloud/server/StatsCollector.java |  2 +-
 .../com/cloud/storage/ImageStoreDetailsUtil.java   | 14 ++++++-----
 .../apache/cloudstack/storage/NfsMountManager.java |  2 +-
 .../cloudstack/storage/NfsMountManagerImpl.java    |  4 ++--
 .../cloud/storage/ImageStoreDetailsUtilTest.java   | 16 ++++++-------
 .../SecondaryStorageManagerImpl.java               |  4 ++--
 .../resource/LocalNfsSecondaryStorageResource.java |  4 ++--
 .../resource/LocalSecondaryStorageResource.java    |  2 +-
 .../resource/NfsSecondaryStorageResource.java      | 28 +++++++++++++++-------
 .../storage/resource/SecondaryStorageResource.java |  2 +-
 .../storage/template/DownloadManagerImpl.java      |  2 +-
 30 files changed, 104 insertions(+), 90 deletions(-)

diff --git a/api/src/main/java/com/cloud/agent/api/to/NfsTO.java b/api/src/main/java/com/cloud/agent/api/to/NfsTO.java
index 0f6511e..1cf7218 100644
--- a/api/src/main/java/com/cloud/agent/api/to/NfsTO.java
+++ b/api/src/main/java/com/cloud/agent/api/to/NfsTO.java
@@ -24,7 +24,7 @@ public class NfsTO implements DataStoreTO {
     private DataStoreRole _role;
     private String uuid;
     private static final String pathSeparator = "/";
-    private String nfsVersion;
+    private Integer nfsVersion;
 
     public NfsTO() {
 
@@ -73,11 +73,11 @@ public class NfsTO implements DataStoreTO {
         return pathSeparator;
     }
 
-    public String getNfsVersion() {
+    public Integer getNfsVersion() {
         return nfsVersion;
     }
 
-    public void setNfsVersion(String nfsVersion) {
+    public void setNfsVersion(Integer nfsVersion) {
         this.nfsVersion = nfsVersion;
     }
 }
diff --git a/core/src/main/java/com/cloud/agent/api/GetStorageStatsCommand.java b/core/src/main/java/com/cloud/agent/api/GetStorageStatsCommand.java
index 9e7f171..94a574c 100644
--- a/core/src/main/java/com/cloud/agent/api/GetStorageStatsCommand.java
+++ b/core/src/main/java/com/cloud/agent/api/GetStorageStatsCommand.java
@@ -55,7 +55,7 @@ public class GetStorageStatsCommand extends StorageNfsVersionCommand {
         this.store = store;
     }
 
-    public GetStorageStatsCommand(DataStoreTO store, String nfsVersion) {
+    public GetStorageStatsCommand(DataStoreTO store, Integer nfsVersion) {
         super(nfsVersion);
         this.store = store;
     }
diff --git a/core/src/main/java/com/cloud/agent/api/storage/ListTemplateCommand.java b/core/src/main/java/com/cloud/agent/api/storage/ListTemplateCommand.java
index aff879d..6f60933 100644
--- a/core/src/main/java/com/cloud/agent/api/storage/ListTemplateCommand.java
+++ b/core/src/main/java/com/cloud/agent/api/storage/ListTemplateCommand.java
@@ -31,7 +31,7 @@ public class ListTemplateCommand extends StorageCommand {
         this.store = store;
     }
 
-    public ListTemplateCommand(DataStoreTO store, String nfsVersion) {
+    public ListTemplateCommand(DataStoreTO store, Integer nfsVersion) {
         super(nfsVersion);
         this.store = store;
     }
diff --git a/core/src/main/java/com/cloud/agent/api/storage/StorageCommand.java b/core/src/main/java/com/cloud/agent/api/storage/StorageCommand.java
index 4f17f30..429755c 100644
--- a/core/src/main/java/com/cloud/agent/api/storage/StorageCommand.java
+++ b/core/src/main/java/com/cloud/agent/api/storage/StorageCommand.java
@@ -24,7 +24,7 @@ public abstract class StorageCommand extends StorageNfsVersionCommand {
         super();
     }
 
-    protected StorageCommand(String nfsVersion){
+    protected StorageCommand(Integer nfsVersion){
         super(nfsVersion);
     }
 
diff --git a/core/src/main/java/com/cloud/agent/api/storage/StorageNfsVersionCommand.java b/core/src/main/java/com/cloud/agent/api/storage/StorageNfsVersionCommand.java
index 58cf888..b99713d 100755
--- a/core/src/main/java/com/cloud/agent/api/storage/StorageNfsVersionCommand.java
+++ b/core/src/main/java/com/cloud/agent/api/storage/StorageNfsVersionCommand.java
@@ -26,18 +26,18 @@ public abstract class StorageNfsVersionCommand extends Command {
         super();
     }
 
-    protected StorageNfsVersionCommand(String nfsVersion){
+    protected StorageNfsVersionCommand(Integer nfsVersion){
         super();
         this.nfsVersion = nfsVersion;
     }
 
-    private String nfsVersion;
+    private Integer nfsVersion;
 
-    public String getNfsVersion() {
+    public Integer getNfsVersion() {
         return nfsVersion;
     }
 
-    public void setNfsVersion(String nfsVersion) {
+    public void setNfsVersion(Integer nfsVersion) {
         this.nfsVersion = nfsVersion;
     }
 
diff --git a/core/src/main/java/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommand.java b/core/src/main/java/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommand.java
index 6cba5f2..965d303 100644
--- a/core/src/main/java/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommand.java
+++ b/core/src/main/java/org/apache/cloudstack/storage/command/TemplateOrVolumePostUploadCommand.java
@@ -55,7 +55,7 @@ public class TemplateOrVolumePostUploadCommand {
 
     private long accountId;
 
-    private String nfsVersion;
+    private Integer nfsVersion;
 
     public TemplateOrVolumePostUploadCommand(long entityId, String entityUUID, String absolutePath, String checksum, String type, String name, String imageFormat, String dataTo,
             String dataToRole) {
@@ -201,11 +201,11 @@ public class TemplateOrVolumePostUploadCommand {
         return accountId;
     }
 
-    public String getNfsVersion() {
+    public Integer getNfsVersion() {
         return nfsVersion;
     }
 
-    public void setNfsVersion(String nfsVersion) {
+    public void setNfsVersion(Integer nfsVersion) {
         this.nfsVersion = nfsVersion;
     }
 
diff --git a/engine/components-api/src/main/java/com/cloud/capacity/CapacityManager.java b/engine/components-api/src/main/java/com/cloud/capacity/CapacityManager.java
index c24909f..98287bb 100644
--- a/engine/components-api/src/main/java/com/cloud/capacity/CapacityManager.java
+++ b/engine/components-api/src/main/java/com/cloud/capacity/CapacityManager.java
@@ -73,9 +73,9 @@ public interface CapacityManager {
                     "If set to true, creates VMs as full clones on ESX hypervisor",
                     true,
                     ConfigKey.Scope.StoragePool);
-    static final ConfigKey<String> ImageStoreNFSVersion =
-            new ConfigKey<String>(
-                    String.class,
+    static final ConfigKey<Integer> ImageStoreNFSVersion =
+            new ConfigKey<Integer>(
+                    Integer.class,
                     "secstorage.nfs.version",
                     "Advanced",
                     null,
diff --git a/engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/TemplateServiceImpl.java b/engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
index ee05630..edf8244 100644
--- a/engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
+++ b/engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
@@ -671,7 +671,7 @@ public class TemplateServiceImpl implements TemplateService {
     }
 
     private Map<String, TemplateProp> listTemplate(DataStore ssStore) {
-        String nfsVersion = imageStoreDetailsUtil.getNfsVersion(ssStore.getId());
+        Integer nfsVersion = imageStoreDetailsUtil.getNfsVersion(ssStore.getId());
         ListTemplateCommand cmd = new ListTemplateCommand(ssStore.getTO(), nfsVersion);
         EndPoint ep = _epSelector.select(ssStore);
         Answer answer = null;
diff --git a/engine/storage/src/main/java/org/apache/cloudstack/storage/image/NfsImageStoreDriverImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/NfsImageStoreDriverImpl.java
index aea7922..c7aad89 100755
--- a/engine/storage/src/main/java/org/apache/cloudstack/storage/image/NfsImageStoreDriverImpl.java
+++ b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/NfsImageStoreDriverImpl.java
@@ -36,11 +36,12 @@ public abstract class NfsImageStoreDriverImpl extends BaseImageStoreDriverImpl {
      * @param imgStoreId store id
      * @return "secstorage.nfs.version" associated value for imgStoreId in image_store_details table if exists, null if not
      */
-    protected String getNfsVersion(long imgStoreId){
+    protected Integer getNfsVersion(long imgStoreId){
         Map<String, String> imgStoreDetails = _imageStoreDetailsDao.getDetails(imgStoreId);
         String nfsVersionKey = CapacityManager.ImageStoreNFSVersion.key();
         if (imgStoreDetails != null && imgStoreDetails.containsKey(nfsVersionKey)){
-            return imgStoreDetails.get(nfsVersionKey);
+            String nfsVersionParam = imgStoreDetails.get(nfsVersionKey);
+            return (nfsVersionParam != null ? Integer.valueOf(nfsVersionParam) : null);
         }
         return null;
     }
diff --git a/plugins/hypervisors/simulator/src/main/java/com/cloud/resource/AgentStorageResource.java b/plugins/hypervisors/simulator/src/main/java/com/cloud/resource/AgentStorageResource.java
index c8f4701..c77550e 100644
--- a/plugins/hypervisors/simulator/src/main/java/com/cloud/resource/AgentStorageResource.java
+++ b/plugins/hypervisors/simulator/src/main/java/com/cloud/resource/AgentStorageResource.java
@@ -109,7 +109,8 @@ public class AgentStorageResource extends AgentResourceBase implements Secondary
     }
 
     @Override
-    public String getRootDir(String cmd, String nfsVersion) {
+    public String getRootDir(String url, Integer nfsVersion) {
+        // TODO Auto-generated method stub
         return null;
     }
 }
diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
index 9cbaaf7..c4b939a 100644
--- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
+++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
@@ -633,7 +633,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
 
     @Override
     public void prepareSecondaryStorageStore(String storageUrl, Long storeId) {
-        String nfsVersion = imageStoreDetailsUtil.getNfsVersion(storeId);
+        Integer nfsVersion = imageStoreDetailsUtil.getNfsVersion(storeId);
         String mountPoint = getMountPoint(storageUrl, nfsVersion);
 
         GlobalLock lock = GlobalLock.getInternLock("prepare.systemvm");
@@ -729,7 +729,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
     }
 
     @Override
-    public String getMountPoint(String storageUrl, String nfsVersion) {
+    public String getMountPoint(String storageUrl, Integer nfsVersion) {
         String mountPoint = null;
         synchronized (_storageMounts) {
             mountPoint = _storageMounts.get(storageUrl);
@@ -820,7 +820,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
         }
     }
 
-    protected String mount(String path, String parent, String nfsVersion) {
+    protected String mount(String path, String parent, Integer nfsVersion) {
         String mountPoint = setupMountPoint(parent);
         if (mountPoint == null) {
             s_logger.warn("Unable to create a mount point");
diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java
index 369e5b6..f17d613 100644
--- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java
+++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java
@@ -93,7 +93,7 @@ import com.cloud.vm.snapshot.VMSnapshot;
 
 public class VmwareStorageManagerImpl implements VmwareStorageManager {
 
-    private String _nfsVersion;
+    private Integer _nfsVersion;
 
     @Override
     public boolean execute(VmwareHostService hostService, CreateEntityDownloadURLCommand cmd) {
@@ -147,7 +147,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
         _mountService = mountService;
     }
 
-    public VmwareStorageManagerImpl(VmwareStorageMount mountService, String nfsVersion) {
+    public VmwareStorageManagerImpl(VmwareStorageMount mountService, Integer nfsVersion) {
         assert (mountService != null);
         _mountService = mountService;
         _nfsVersion = nfsVersion;
@@ -558,7 +558,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
     // templateName: name in secondary storage
     // templateUuid: will be used at hypervisor layer
     private void copyTemplateFromSecondaryToPrimary(VmwareHypervisorHost hyperHost, DatastoreMO datastoreMo, String secondaryStorageUrl, String templatePathAtSecondaryStorage,
-                                                    String templateName, String templateUuid, String nfsVersion) throws Exception {
+            String templateName, String templateUuid, Integer nfsVersion) throws Exception {
 
         s_logger.info("Executing copyTemplateFromSecondaryToPrimary. secondaryStorage: " + secondaryStorageUrl + ", templatePathAtSecondaryStorage: "
                 + templatePathAtSecondaryStorage + ", templateName: " + templateName);
@@ -613,7 +613,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
     }
 
     private Ternary<String, Long, Long> createTemplateFromVolume(VirtualMachineMO vmMo, long accountId, long templateId, String templateUniqueName, String secStorageUrl,
-                                                                 String volumePath, String workerVmName, String nfsVersion) throws Exception {
+            String volumePath, String workerVmName, Integer nfsVersion) throws Exception {
 
         String secondaryMountPoint = _mountService.getMountPoint(secStorageUrl, nfsVersion);
         String installPath = getTemplateRelativeDirInSecStorage(accountId, templateId);
@@ -678,7 +678,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
     }
 
     private Ternary<String, Long, Long> createTemplateFromSnapshot(long accountId, long templateId, String templateUniqueName, String secStorageUrl, long volumeId,
-                                                                   String backedUpSnapshotUuid, String nfsVersion) throws Exception {
+            String backedUpSnapshotUuid, Integer nfsVersion) throws Exception {
 
         String secondaryMountPoint = _mountService.getMountPoint(secStorageUrl, nfsVersion);
         String installPath = getTemplateRelativeDirInSecStorage(accountId, templateId);
@@ -862,14 +862,14 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
     }
 
     private String createVolumeFromSnapshot(VmwareHypervisorHost hyperHost, DatastoreMO primaryDsMo, String newVolumeName, long accountId, long volumeId, String secStorageUrl,
-                                            String snapshotBackupUuid, String nfsVersion) throws Exception {
+            String snapshotBackupUuid, Integer nfsVersion) throws Exception {
 
         restoreVolumeFromSecStorage(hyperHost, primaryDsMo, newVolumeName, secStorageUrl, getSnapshotRelativeDirInSecStorage(accountId, volumeId), snapshotBackupUuid, nfsVersion);
         return null;
     }
 
     private void restoreVolumeFromSecStorage(VmwareHypervisorHost hyperHost, DatastoreMO primaryDsMo, String newVolumeName, String secStorageUrl, String secStorageDir,
-                                             String backupName, String nfsVersion) throws Exception {
+            String backupName, Integer nfsVersion) throws Exception {
 
         String secondaryMountPoint = _mountService.getMountPoint(secStorageUrl, nfsVersion);
         String srcOVAFileName = secondaryMountPoint + "/" + secStorageDir + "/" + backupName + "." + ImageFormat.OVA.getFileExtension();
@@ -929,7 +929,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
     }
 
     private String backupSnapshotToSecondaryStorage(VirtualMachineMO vmMo, long accountId, long volumeId, String volumePath, String snapshotUuid, String secStorageUrl,
-                                                    String prevSnapshotUuid, String prevBackupUuid, String workerVmName, String nfsVersion) throws Exception {
+            String prevSnapshotUuid, String prevBackupUuid, String workerVmName, Integer nfsVersion) throws Exception {
 
         String backupUuid = UUID.randomUUID().toString();
         exportVolumeToSecondaryStorage(vmMo, volumePath, secStorageUrl, getSnapshotRelativeDirInSecStorage(accountId, volumeId), backupUuid, workerVmName, nfsVersion, true);
@@ -937,7 +937,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
     }
 
     private void exportVolumeToSecondaryStorage(VirtualMachineMO vmMo, String volumePath, String secStorageUrl, String secStorageDir, String exportName, String workerVmName,
-                                                String nfsVersion, boolean clonedWorkerVMNeeded) throws Exception {
+                                                Integer nfsVersion, boolean clonedWorkerVMNeeded) throws Exception {
 
         String secondaryMountPoint = _mountService.getMountPoint(secStorageUrl, nfsVersion);
         String exportPath = secondaryMountPoint + "/" + secStorageDir + "/" + exportName;
@@ -985,7 +985,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
     }
 
     private Pair<String, String> copyVolumeToSecStorage(VmwareHostService hostService, VmwareHypervisorHost hyperHost, CopyVolumeCommand cmd, String vmName, long volumeId,
-                                                        String poolId, String volumePath, String secStorageUrl, String workerVmName, String nfsVersion) throws Exception {
+            String poolId, String volumePath, String secStorageUrl, String workerVmName, Integer nfsVersion) throws Exception {
 
         String volumeFolder = String.valueOf(volumeId) + "/";
         VirtualMachineMO workerVm = null;
@@ -1050,7 +1050,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
     }
 
     private Pair<String, String> copyVolumeFromSecStorage(VmwareHypervisorHost hyperHost, long volumeId, DatastoreMO dsMo, String secStorageUrl, String exportName,
-                                                          String nfsVersion) throws Exception {
+            Integer nfsVersion) throws Exception {
 
         String volumeFolder = String.valueOf(volumeId) + "/";
         String newVolume = UUID.randomUUID().toString().replace("-", "");
@@ -1464,7 +1464,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
         }
     }
 
-    private String deleteVolumeDirOnSecondaryStorage(long volumeId, String secStorageUrl, String nfsVersion) throws Exception {
+    private String deleteVolumeDirOnSecondaryStorage(long volumeId, String secStorageUrl, Integer nfsVersion) throws Exception {
         String secondaryMountPoint = _mountService.getMountPoint(secStorageUrl, nfsVersion);
         String volumeMountRoot = secondaryMountPoint + "/" + getVolumeRelativeDirInSecStroage(volumeId);
 
diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareStorageMount.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareStorageMount.java
index 54b52f6..fd139e4 100644
--- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareStorageMount.java
+++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareStorageMount.java
@@ -17,5 +17,5 @@
 package com.cloud.hypervisor.vmware.manager;
 
 public interface VmwareStorageMount {
-    String getMountPoint(String storageUrl, String nfsVersion);
+    String getMountPoint(String storageUrl, Integer nfsVersion);
 }
diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java
index c79c023..e40badd 100644
--- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java
+++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java
@@ -370,7 +370,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
     protected String _password;
     protected String _guid;
     protected String _vCenterAddress;
-    protected String storageNfsVersion;
+    protected Integer storageNfsVersion;
 
     protected String _privateNetworkVSwitchName;
     protected VmwareTrafficLabel _guestTrafficInfo = new VmwareTrafficLabel(TrafficType.Guest);
diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/PremiumSecondaryStorageResource.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/PremiumSecondaryStorageResource.java
index e2aff4c..fd89cc7 100644
--- a/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/PremiumSecondaryStorageResource.java
+++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/PremiumSecondaryStorageResource.java
@@ -102,7 +102,7 @@ public class PremiumSecondaryStorageResource extends NfsSecondaryStorageResource
             VmwareSecondaryStorageContextFactory.initFactoryEnvironment();
         }
 
-        String nfsVersion = NfsSecondaryStorageResource.retrieveNfsVersionFromParams(params);
+        Integer nfsVersion = NfsSecondaryStorageResource.retrieveNfsVersionFromParams(params);
         registerHandler(Hypervisor.HypervisorType.VMware, new VmwareSecondaryStorageResourceHandler(this, nfsVersion));
         return true;
     }
diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java
index b58253d..ff00f55 100644
--- a/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java
+++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java
@@ -66,7 +66,7 @@ public class VmwareSecondaryStorageResourceHandler implements SecondaryStorageRe
      * private Map<String, HostMO> _activeHosts = new HashMap<String, HostMO>();
      */
 
-    public VmwareSecondaryStorageResourceHandler(PremiumSecondaryStorageResource resource, String nfsVersion) {
+    public VmwareSecondaryStorageResourceHandler(PremiumSecondaryStorageResource resource, Integer nfsVersion) {
         _resource = resource;
         _storageMgr = new VmwareStorageManagerImpl(this, nfsVersion);
         _gson = GsonHelper.getGsonLogger();
@@ -307,7 +307,7 @@ public class VmwareSecondaryStorageResourceHandler implements SecondaryStorageRe
     }
 
     @Override
-    public String getMountPoint(String storageUrl, String nfsVersion) {
+    public String getMountPoint(String storageUrl, Integer nfsVersion) {
         return _resource.getRootDir(storageUrl, nfsVersion);
     }
 }
diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java
index e5fae17..796db94 100644
--- a/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java
+++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java
@@ -154,11 +154,11 @@ public class VmwareStorageProcessor implements StorageProcessor {
     protected Integer _shutdownWaitMs;
     private final Gson _gson;
     private final StorageLayer _storage = new JavaStorageLayer();
-    private String _nfsVersion;
+    private Integer _nfsVersion;
     private static final Random RANDOM = new Random(System.nanoTime());
 
     public VmwareStorageProcessor(VmwareHostService hostService, boolean fullCloneFlag, VmwareStorageMount mountService, Integer timeout, VmwareResource resource,
-                                  Integer shutdownWaitMs, PremiumSecondaryStorageResource storageResource, String nfsVersion) {
+                                  Integer shutdownWaitMs, PremiumSecondaryStorageResource storageResource, Integer nfsVersion) {
         this.hostService = hostService;
         _fullCloneFlag = fullCloneFlag;
         this.mountService = mountService;
@@ -479,7 +479,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
 
     private Pair<VirtualMachineMO, Long> copyTemplateFromSecondaryToPrimary(VmwareHypervisorHost hyperHost, DatastoreMO datastoreMo, String secondaryStorageUrl,
                                                                             String templatePathAtSecondaryStorage, String templateName, String templateUuid,
-                                                                            boolean createSnapshot, String nfsVersion) throws Exception {
+                                                                            boolean createSnapshot, Integer nfsVersion) throws Exception {
         s_logger.info("Executing copyTemplateFromSecondaryToPrimary. secondaryStorage: " + secondaryStorageUrl + ", templatePathAtSecondaryStorage: " +
                 templatePathAtSecondaryStorage + ", templateName: " + templateName);
 
@@ -892,7 +892,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
     }
 
     private Pair<String, String> copyVolumeFromSecStorage(VmwareHypervisorHost hyperHost, String srcVolumePath, DatastoreMO dsMo, String secStorageUrl,
-                                                          long wait, String nfsVersion) throws Exception {
+                                                          long wait, Integer nfsVersion) throws Exception {
         String volumeFolder;
         String volumeName;
         String sufix = ".ova";
@@ -911,7 +911,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
         return new Pair<>(volumeFolder, newVolume);
     }
 
-    private String deleteVolumeDirOnSecondaryStorage(String volumeDir, String secStorageUrl, String nfsVersion) throws Exception {
+    private String deleteVolumeDirOnSecondaryStorage(String volumeDir, String secStorageUrl, Integer nfsVersion) throws Exception {
         String secondaryMountPoint = mountService.getMountPoint(secStorageUrl, nfsVersion);
         String volumeMountRoot = secondaryMountPoint + File.separator + volumeDir;
 
@@ -1098,7 +1098,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
     }
 
     private Ternary<String, Long, Long> createTemplateFromVolume(VirtualMachineMO vmMo, String installPath, long templateId, String templateUniqueName,
-                                                                 String secStorageUrl, String volumePath, String workerVmName, String nfsVersion) throws Exception {
+                                                                 String secStorageUrl, String volumePath, String workerVmName, Integer nfsVersion) throws Exception {
 
         String secondaryMountPoint = mountService.getMountPoint(secStorageUrl, nfsVersion);
         String installFullPath = secondaryMountPoint + "/" + installPath;
@@ -1263,7 +1263,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
     }
 
     private Ternary<String, Long, Long> createTemplateFromSnapshot(String installPath, String templateUniqueName, String secStorageUrl, String snapshotPath,
-                                                                   Long templateId, long wait, String nfsVersion) throws Exception {
+                                                                   Long templateId, long wait, Integer nfsVersion) throws Exception {
         //Snapshot path is decoded in this form: /snapshots/account/volumeId/uuid/uuid
         String backupSSUuid;
         String snapshotFolder;
@@ -1669,7 +1669,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
 
     // return Pair<String(divice bus name), String[](disk chain)>
     private Pair<String, String[]> exportVolumeToSecondaryStorage(VirtualMachineMO vmMo, String volumePath, String secStorageUrl, String secStorageDir,
-                                                                  String exportName, String workerVmName, String nfsVersion, boolean clonedWorkerVMNeeded) throws Exception {
+                                                                  String exportName, String workerVmName, Integer nfsVersion, boolean clonedWorkerVMNeeded) throws Exception {
 
         String secondaryMountPoint = mountService.getMountPoint(secStorageUrl, nfsVersion);
         String exportPath = secondaryMountPoint + "/" + secStorageDir + "/" + exportName;
@@ -1718,7 +1718,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
     // Ternary<String(backup uuid in secondary storage), String(device bus name), String[](original disk chain in the snapshot)>
     private Ternary<String, String, String[]> backupSnapshotToSecondaryStorage(VirtualMachineMO vmMo, String installPath, String volumePath, String snapshotUuid,
                                                                                String secStorageUrl, String prevSnapshotUuid, String prevBackupUuid, String workerVmName,
-                                                                               String nfsVersion) throws Exception {
+                                                                               Integer nfsVersion) throws Exception {
 
         String backupUuid = UUID.randomUUID().toString();
         Pair<String, String[]> snapshotInfo = exportVolumeToSecondaryStorage(vmMo, volumePath, secStorageUrl, installPath, backupUuid, workerVmName, nfsVersion, true);
@@ -3382,7 +3382,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
     }
 
     private Long restoreVolumeFromSecStorage(VmwareHypervisorHost hyperHost, DatastoreMO primaryDsMo, String newVolumeName, String secStorageUrl, String secStorageDir,
-                                             String backupName, long wait, String nfsVersion) throws Exception {
+                                             String backupName, long wait, Integer nfsVersion) throws Exception {
 
         String secondaryMountPoint = mountService.getMountPoint(secStorageUrl, null);
         String srcOVAFileName;
@@ -3540,7 +3540,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
         return DiskControllerType.lsilogic.toString();
     }
 
-    void setNfsVersion(String nfsVersion){
+    void setNfsVersion(Integer nfsVersion){
         this._nfsVersion = nfsVersion;
         s_logger.debug("VmwareProcessor instance now using NFS version: " + nfsVersion);
     }
diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
index 122a034..02ae2fe 100644
--- a/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
+++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageSubsystemCommandHandler.java
@@ -47,7 +47,7 @@ public class VmwareStorageSubsystemCommandHandler extends StorageSubsystemComman
     private static final Logger s_logger = Logger.getLogger(VmwareStorageSubsystemCommandHandler.class);
     private VmwareStorageManager storageManager;
     private PremiumSecondaryStorageResource storageResource;
-    private String _nfsVersion;
+    private Integer _nfsVersion;
 
     public PremiumSecondaryStorageResource getStorageResource() {
         return storageResource;
@@ -65,7 +65,7 @@ public class VmwareStorageSubsystemCommandHandler extends StorageSubsystemComman
         this.storageManager = storageManager;
     }
 
-    public VmwareStorageSubsystemCommandHandler(StorageProcessor processor, String nfsVersion) {
+    public VmwareStorageSubsystemCommandHandler(StorageProcessor processor, Integer nfsVersion) {
         super(processor);
         this._nfsVersion = nfsVersion;
     }
@@ -75,7 +75,7 @@ public class VmwareStorageSubsystemCommandHandler extends StorageSubsystemComman
         for (VmwareStorageProcessorConfigurableFields key : params.keySet()){
             switch (key){
             case NFS_VERSION:
-                String nfsVersion = (String) params.get(key);
+                Integer nfsVersion = (Integer) params.get(key);
                 processor.setNfsVersion(nfsVersion);
                 this._nfsVersion = nfsVersion;
                 break;
diff --git a/plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/resource/VmwareResourceTest.java b/plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/resource/VmwareResourceTest.java
index 3dc8d01..7cebaf1 100644
--- a/plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/resource/VmwareResourceTest.java
+++ b/plugins/hypervisors/vmware/src/test/java/com/cloud/hypervisor/vmware/resource/VmwareResourceTest.java
@@ -157,8 +157,8 @@ public class VmwareResourceTest {
     CopyCommand storageCmd;
     EnumMap<VmwareStorageProcessorConfigurableFields, Object> params = new EnumMap<VmwareStorageProcessorConfigurableFields,Object>(VmwareStorageProcessorConfigurableFields.class);
 
-    private static final String NFS_VERSION = "3";
-    private static final String NFS_VERSION_NOT_PRESENT = null;
+    private static final Integer NFS_VERSION = Integer.valueOf(3);
+    private static final Integer NFS_VERSION_NOT_PRESENT = null;
     private static final long VRAM_MEMORY_SIZE = 131072l;
     private static final long VIDEO_CARD_MEMORY_SIZE = 65536l;
     private static final Boolean FULL_CLONE_FLAG = true;
diff --git a/server/src/main/java/com/cloud/server/StatsCollector.java b/server/src/main/java/com/cloud/server/StatsCollector.java
index 323b8a4..7c9fab9 100644
--- a/server/src/main/java/com/cloud/server/StatsCollector.java
+++ b/server/src/main/java/com/cloud/server/StatsCollector.java
@@ -996,7 +996,7 @@ public class StatsCollector extends ManagerBase implements ComponentMethodInterc
                         continue;
                     }
 
-                    String nfsVersion = imageStoreDetailsUtil.getNfsVersion(store.getId());
+                    Integer nfsVersion = imageStoreDetailsUtil.getNfsVersion(store.getId());
                     GetStorageStatsCommand command = new GetStorageStatsCommand(store.getTO(), nfsVersion);
                     EndPoint ssAhost = _epSelector.select(store);
                     if (ssAhost == null) {
diff --git a/server/src/main/java/com/cloud/storage/ImageStoreDetailsUtil.java b/server/src/main/java/com/cloud/storage/ImageStoreDetailsUtil.java
index 1a4a246..3e27ce6 100755
--- a/server/src/main/java/com/cloud/storage/ImageStoreDetailsUtil.java
+++ b/server/src/main/java/com/cloud/storage/ImageStoreDetailsUtil.java
@@ -42,10 +42,11 @@ public class ImageStoreDetailsUtil {
      * Retrieve global secondary storage NFS version default value
      * @return global default value
      */
-    protected String getGlobalDefaultNfsVersion(){
+    protected Integer getGlobalDefaultNfsVersion(){
         ConfigurationVO globalNfsVersion = configurationDao.findByName(CapacityManager.ImageStoreNFSVersion.key());
         Preconditions.checkState(globalNfsVersion != null, "Unable to find global NFS version for version key " + CapacityManager.ImageStoreNFSVersion.key());
-        return globalNfsVersion.getValue();
+        String value = globalNfsVersion.getValue();
+        return (value != null ? Integer.valueOf(value) : null);
     }
     /**
      * Obtain NFS protocol version (if provided) for a store id, if not use default config value<br/>
@@ -53,11 +54,12 @@ public class ImageStoreDetailsUtil {
      * @return {@code null} if {@code secstorage.nfs.version} is not found for storeId <br/>
      * {@code X} if {@code secstorage.nfs.version} is found found for storeId
      */
-    public String getNfsVersion(long storeId) throws NumberFormatException {
+    public Integer getNfsVersion(long storeId) throws NumberFormatException {
 
         final Map<String, String> storeDetails = imageStoreDetailsDao.getDetails(storeId);
         if (storeDetails != null && storeDetails.containsKey(CapacityManager.ImageStoreNFSVersion.key())) {
-            return storeDetails.get(CapacityManager.ImageStoreNFSVersion.key());
+            final String version = storeDetails.get(CapacityManager.ImageStoreNFSVersion.key());
+            return (version != null ? Integer.valueOf(version) : null);
         }
 
         return getGlobalDefaultNfsVersion();
@@ -66,11 +68,11 @@ public class ImageStoreDetailsUtil {
 
     /**
      * Obtain NFS protocol version (if provided) for a store uuid.<br/>
-     * @param storeUuid image store id
+     * @param resourceId image store id
      * @return {@code null} if {@code secstorage.nfs.version} is not found for storeUuid <br/>
      * {@code X} if {@code secstorage.nfs.version} is found found for storeUuid
      */
-    public String getNfsVersionByUuid(String storeUuid){
+    public Integer getNfsVersionByUuid(String storeUuid){
         ImageStoreVO imageStore = imageStoreDao.findByUuid(storeUuid);
         if (imageStore != null){
             return getNfsVersion(imageStore.getId());
diff --git a/server/src/main/java/org/apache/cloudstack/storage/NfsMountManager.java b/server/src/main/java/org/apache/cloudstack/storage/NfsMountManager.java
index a4612e2..a4e413c 100644
--- a/server/src/main/java/org/apache/cloudstack/storage/NfsMountManager.java
+++ b/server/src/main/java/org/apache/cloudstack/storage/NfsMountManager.java
@@ -19,5 +19,5 @@ package org.apache.cloudstack.storage;
 
 public interface NfsMountManager {
 
-    String getMountPoint(String storageUrl, String nfsVersion);
+    String getMountPoint(String storageUrl, Integer nfsVersion);
 }
diff --git a/server/src/main/java/org/apache/cloudstack/storage/NfsMountManagerImpl.java b/server/src/main/java/org/apache/cloudstack/storage/NfsMountManagerImpl.java
index b6105d5..479ee12 100644
--- a/server/src/main/java/org/apache/cloudstack/storage/NfsMountManagerImpl.java
+++ b/server/src/main/java/org/apache/cloudstack/storage/NfsMountManagerImpl.java
@@ -60,7 +60,7 @@ public class NfsMountManagerImpl implements NfsMountManager {
         this.timeout = timeout;
     }
 
-    public String getMountPoint(String storageUrl, String nfsVersion) {
+    public String getMountPoint(String storageUrl, Integer nfsVersion) {
         String mountPoint = storageMounts.get(storageUrl);
         if (mountPoint != null) {
             return mountPoint;
@@ -84,7 +84,7 @@ public class NfsMountManagerImpl implements NfsMountManager {
         return mountPoint;
     }
 
-    private String mount(String path, String parent, String nfsVersion) {
+    private String mount(String path, String parent, Integer nfsVersion) {
         String mountPoint = setupMountPoint(parent);
         if (mountPoint == null) {
             s_logger.warn("Unable to create a mount point");
diff --git a/server/src/test/java/com/cloud/storage/ImageStoreDetailsUtilTest.java b/server/src/test/java/com/cloud/storage/ImageStoreDetailsUtilTest.java
index a294bb5..7efbe08 100755
--- a/server/src/test/java/com/cloud/storage/ImageStoreDetailsUtilTest.java
+++ b/server/src/test/java/com/cloud/storage/ImageStoreDetailsUtilTest.java
@@ -37,8 +37,8 @@ public class ImageStoreDetailsUtilTest {
 
     private final static long STORE_ID = 1l;
     private final static String STORE_UUID = "aaaa-aaaa-aaaa-aaaa";
-    private final static String NFS_VERSION = "3";
-    private final static String NFS_VERSION_DEFAULT = "2";
+    private final static Integer NFS_VERSION = 3;
+    private final static Integer NFS_VERSION_DEFAULT = 2;
 
     ImageStoreDetailsUtil imageStoreDetailsUtil = new ImageStoreDetailsUtil();
 
@@ -69,7 +69,7 @@ public class ImageStoreDetailsUtilTest {
 
     @Test
     public void testGetNfsVersion(){
-        String nfsVersion = imageStoreDetailsUtil.getNfsVersion(STORE_ID);
+        Integer nfsVersion = imageStoreDetailsUtil.getNfsVersion(STORE_ID);
         assertEquals(NFS_VERSION, nfsVersion);
     }
 
@@ -79,7 +79,7 @@ public class ImageStoreDetailsUtilTest {
         imgStoreDetails.put("other.prop", "propValue");
         when(imgStoreDetailsDao.getDetails(STORE_ID)).thenReturn(imgStoreDetails);
 
-        String nfsVersion = imageStoreDetailsUtil.getNfsVersion(STORE_ID);
+        Integer nfsVersion = imageStoreDetailsUtil.getNfsVersion(STORE_ID);
         assertEquals(NFS_VERSION_DEFAULT, nfsVersion);
     }
 
@@ -88,26 +88,26 @@ public class ImageStoreDetailsUtilTest {
         Map<String, String> imgStoreDetails = new HashMap<String, String>();
         when(imgStoreDetailsDao.getDetails(STORE_ID)).thenReturn(imgStoreDetails);
 
-        String nfsVersion = imageStoreDetailsUtil.getNfsVersion(STORE_ID);
+        Integer nfsVersion = imageStoreDetailsUtil.getNfsVersion(STORE_ID);
         assertEquals(NFS_VERSION_DEFAULT, nfsVersion);
     }
 
     @Test
     public void testGetNfsVersionByUuid(){
-        String nfsVersion = imageStoreDetailsUtil.getNfsVersionByUuid(STORE_UUID);
+        Integer nfsVersion = imageStoreDetailsUtil.getNfsVersionByUuid(STORE_UUID);
         assertEquals(NFS_VERSION, nfsVersion);
     }
 
     @Test
     public void testGetNfsVersionByUuidNoImgStore(){
         when(imgStoreDao.findByUuid(STORE_UUID)).thenReturn(null);
-        String nfsVersion = imageStoreDetailsUtil.getNfsVersionByUuid(STORE_UUID);
+        Integer nfsVersion = imageStoreDetailsUtil.getNfsVersionByUuid(STORE_UUID);
         assertEquals(NFS_VERSION_DEFAULT, nfsVersion);
     }
 
     @Test
     public void testGetGlobalDefaultNfsVersion(){
-        String globalDefaultNfsVersion = imageStoreDetailsUtil.getGlobalDefaultNfsVersion();
+        Integer globalDefaultNfsVersion = imageStoreDetailsUtil.getGlobalDefaultNfsVersion();
         assertEquals(NFS_VERSION_DEFAULT, globalDefaultNfsVersion);
     }
 }
diff --git a/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java b/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java
index efa43cb..568aa1b 100644
--- a/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java
+++ b/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java
@@ -323,7 +323,7 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar
                     setupCmd = new SecStorageSetupCommand(ssStore.getTO(), secUrl, certs);
                 }
 
-                String nfsVersion = imageStoreDetailsUtil.getNfsVersion(ssStore.getId());
+                Integer nfsVersion = imageStoreDetailsUtil.getNfsVersion(ssStore.getId());
                 setupCmd.setNfsVersion(nfsVersion);
 
                 //template/volume file upload key
@@ -1203,7 +1203,7 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar
         if (dc.getDns2() != null) {
             buf.append(" dns2=").append(dc.getDns2());
         }
-        String nfsVersion = imageStoreDetailsUtil != null ? imageStoreDetailsUtil.getNfsVersion(secStore.getId()) : null;
+        Integer nfsVersion = imageStoreDetailsUtil != null ? imageStoreDetailsUtil.getNfsVersion(secStore.getId()) : null;
         buf.append(" nfsVersion=").append(nfsVersion);
 
         String bootArgs = buf.toString();
diff --git a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
index 6f189ef..c02fe8a 100644
--- a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
+++ b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
@@ -53,7 +53,7 @@ public class LocalNfsSecondaryStorageResource extends NfsSecondaryStorageResourc
     }
 
     @Override
-    synchronized public String getRootDir(String secUrl, String nfsVersion) {
+    synchronized public String getRootDir(String secUrl, Integer nfsVersion) {
         try {
             URI uri = new URI(secUrl);
             String dir = mountUri(uri, nfsVersion);
@@ -66,7 +66,7 @@ public class LocalNfsSecondaryStorageResource extends NfsSecondaryStorageResourc
     }
 
     @Override
-    protected void mount(String localRootPath, String remoteDevice, URI uri, String nfsVersion) {
+    protected void mount(String localRootPath, String remoteDevice, URI uri, Integer nfsVersion) {
         ensureLocalRootPathExists(localRootPath, uri);
 
         if (mountExists(localRootPath, uri)) {
diff --git a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/LocalSecondaryStorageResource.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/LocalSecondaryStorageResource.java
index d953338..c6f6ba8 100644
--- a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/LocalSecondaryStorageResource.java
+++ b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/LocalSecondaryStorageResource.java
@@ -72,7 +72,7 @@ public class LocalSecondaryStorageResource extends ServerResourceBase implements
     }
 
     @Override
-    public String getRootDir(String url, String nfsVersion) {
+    public String getRootDir(String url, Integer nfsVersion) {
         return getRootDir();
 
     }
diff --git a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
index 7e25296..b453b17 100644
--- a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
+++ b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
@@ -232,7 +232,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
     private String _storageIp;
     private String _storageNetmask;
     private String _storageGateway;
-    private String _nfsVersion;
+    private Integer _nfsVersion;
     private final List<String> nfsIps = new ArrayList<String>();
     protected String _parent = "/mnt/SecStorage";
     final private String _tmpltpp = "template.properties";
@@ -262,8 +262,18 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
      * @param params
      * @return nfsVersion value if exists, null in other case
      */
-    public static String retrieveNfsVersionFromParams(Map<String, Object> params) {
-        return (String)params.get("nfsVersion");
+    public static Integer retrieveNfsVersionFromParams(Map<String, Object> params) {
+        Integer nfsVersion = null;
+        if (params.get("nfsVersion") != null) {
+            String nfsVersionParam = (String)params.get("nfsVersion");
+            try {
+                nfsVersion = Integer.valueOf(nfsVersionParam);
+            } catch (NumberFormatException e){
+                s_logger.error("Couldn't cast " + nfsVersionParam + " to integer");
+                return null;
+            }
+        }
+        return nfsVersion;
     }
 
     @Override
@@ -955,7 +965,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
         return new CopyCmdAnswer("");
     }
 
-    protected File getFile(String path, String nfsPath, String nfsVersion) {
+    protected File getFile(String path, String nfsPath, Integer nfsVersion) {
         String filePath = getRootDir(nfsPath, nfsVersion) + File.separator + path;
         File f = new File(filePath);
         if (!f.exists()) {
@@ -1087,7 +1097,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
         return Long.parseLong(StringUtils.substringAfterLast(StringUtils.substringBeforeLast(key, S3Utils.SEPARATOR), S3Utils.SEPARATOR));
     }
 
-    private String determineStorageTemplatePath(final String storagePath, String dataPath, String nfsVersion) {
+    private String determineStorageTemplatePath(final String storagePath, String dataPath, Integer nfsVersion) {
         return join(asList(getRootDir(storagePath, nfsVersion), dataPath), File.separator);
     }
 
@@ -2434,7 +2444,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
     }
 
     @Override
-    synchronized public String getRootDir(String secUrl, String nfsVersion) {
+    synchronized public String getRootDir(String secUrl, Integer nfsVersion) {
         if (!_inSystemVM) {
             return _parent;
         }
@@ -2776,7 +2786,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
      * @return name of folder in _parent that device was mounted.
      * @throws UnknownHostException
      */
-    protected String mountUri(URI uri, String nfsVersion) throws UnknownHostException {
+    protected String mountUri(URI uri, Integer nfsVersion) throws UnknownHostException {
         String uriHostIp = getUriHostIp(uri);
         String nfsPath = uriHostIp + ":" + uri.getPath();
 
@@ -2797,7 +2807,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
         return dir;
     }
 
-    protected void mount(String localRootPath, String remoteDevice, URI uri, String nfsVersion) {
+    protected void mount(String localRootPath, String remoteDevice, URI uri, Integer nfsVersion) {
         s_logger.debug("mount " + uri.toString() + " on " + localRootPath + ((nfsVersion != null) ? " nfsVersion=" + nfsVersion : ""));
         ensureLocalRootPathExists(localRootPath, uri);
 
@@ -2813,7 +2823,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
         checkForVolumesDir(localRootPath);
     }
 
-    protected void attemptMount(String localRootPath, String remoteDevice, URI uri, String nfsVersion) {
+    protected void attemptMount(String localRootPath, String remoteDevice, URI uri, Integer nfsVersion) {
         String result;
         s_logger.debug("Make cmdline call to mount " + remoteDevice + " at " + localRootPath + " based on uri " + uri + ((nfsVersion != null) ? " nfsVersion=" + nfsVersion : ""));
         Script command = new Script(!_inSystemVM, "mount", _timeout, s_logger);
diff --git a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/SecondaryStorageResource.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/SecondaryStorageResource.java
index 3c24b6c..d7e0c7e 100644
--- a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/SecondaryStorageResource.java
+++ b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/SecondaryStorageResource.java
@@ -23,6 +23,6 @@ import com.cloud.resource.ServerResource;
  */
 public interface SecondaryStorageResource extends ServerResource {
 
-    String getRootDir(String cmd, String nfsVersion);
+    String getRootDir(String cmd, Integer nfsVersion);
 
 }
diff --git a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/DownloadManagerImpl.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/DownloadManagerImpl.java
index c31bc9b..e41c8b3 100644
--- a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/DownloadManagerImpl.java
+++ b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/DownloadManagerImpl.java
@@ -94,7 +94,7 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
     StorageLayer _storage;
     public Map<String, Processor> _processors;
     private long _processTimeout;
-    private String _nfsVersion;
+    private Integer _nfsVersion;
 
     public class Completion implements DownloadCompleteCallback {
         private final String jobId;