Greg Padgett has uploaded a new change for review.

Change subject: core, restapi: convert nfs version to enum
......................................................................

core, restapi: convert nfs version to enum

In order to support optional advanced nfs options, the 'auto' version
specifier could no longer be represented as null in the database.  This
change requires the core and rest api to propagate non-numeric version
values as well.

This conversion will also help later when minor versions are specified
in the mount options, e.g. "4.1".

Change-Id: I09d82db7c0ec92135cae8935f013487e97b8f357
Bug-Url: https://bugzilla.redhat.com/855729
Signed-off-by: Greg Padgett <gpadg...@redhat.com>
---
M backend/manager/dbscripts/storages_san_sp.sql
A backend/manager/dbscripts/upgrade/03_01_1450_change_nfs_version_to_string.sql
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/NfsVersion.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/storage_server_connections.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java
A 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/NfsVersion.java
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/StorageDomainMapper.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStorageServerVDSCommand.java
M 
frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NfsStorageModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
13 files changed, 99 insertions(+), 25 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/97/8797/1

diff --git a/backend/manager/dbscripts/storages_san_sp.sql 
b/backend/manager/dbscripts/storages_san_sp.sql
index fa12037..e91e104 100644
--- a/backend/manager/dbscripts/storages_san_sp.sql
+++ b/backend/manager/dbscripts/storages_san_sp.sql
@@ -331,7 +331,7 @@
        v_user_name VARCHAR(50),
        v_mount_options VARCHAR(500),
        v_vfs_type VARCHAR(128),
-       v_nfs_version smallint,
+       v_nfs_version VARCHAR(4),
        v_nfs_timeo smallint,
        v_nfs_retrans smallint)
 
diff --git 
a/backend/manager/dbscripts/upgrade/03_01_1450_change_nfs_version_to_string.sql 
b/backend/manager/dbscripts/upgrade/03_01_1450_change_nfs_version_to_string.sql
new file mode 100644
index 0000000..960f53c
--- /dev/null
+++ 
b/backend/manager/dbscripts/upgrade/03_01_1450_change_nfs_version_to_string.sql
@@ -0,0 +1 @@
+SELECT 
fn_db_change_column_type('storage_server_connections','nfs_version','smallint','varchar(4)');
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/NfsVersion.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/NfsVersion.java
new file mode 100644
index 0000000..fc6506f
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/NfsVersion.java
@@ -0,0 +1,33 @@
+package org.ovirt.engine.core.common.businessentities;
+
+import java.util.HashMap;
+
+public enum NfsVersion {
+    // The value is used as both a vdsm parameter when mounting NFS
+    // volumes as well as a string in the database
+    AUTO("auto"),
+    V3("3"),
+    V4("4");
+
+    private final String version;
+    private static java.util.HashMap<String, NfsVersion> mappings =
+            new HashMap<String, NfsVersion>();
+
+    static {
+        for (NfsVersion nfsVersion : values()) {
+            mappings.put(nfsVersion.getValue(), nfsVersion);
+        }
+    }
+
+    private NfsVersion(String version) {
+        this.version = version;
+    }
+
+    public static NfsVersion forValue(String value) {
+        return mappings.get(value);
+    }
+
+    public String getValue() {
+        return version;
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/storage_server_connections.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/storage_server_connections.java
index c0be372..5934c51 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/storage_server_connections.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/storage_server_connections.java
@@ -28,7 +28,7 @@
             String portal,
             String vfsType,
             String mountOptions,
-            Short nfsVersion,
+            NfsVersion nfsVersion,
             Short nfsRetrans,
             Short nfsTimeo) {
         this.connection = connection;
@@ -168,8 +168,16 @@
         return vfsType;
     }
 
-    @Column(name = "nfs_version")
-    private Short nfsVersion;
+    @Column(name = "nfs_version", length = 4)
+    private NfsVersion nfsVersion;
+
+    public NfsVersion getNfsVersion() {
+        return nfsVersion;
+    }
+
+    public void setNfsVersion(NfsVersion nfsVersion) {
+        this.nfsVersion = nfsVersion;
+    }
 
     @Column(name = "nfs_timeo")
     private Short nfsTimeo;
@@ -212,8 +220,7 @@
 
     public static storage_server_connections copyOf(storage_server_connections 
ssc) {
         // using the constructor since all fields do not need deep copy (string
-        // is immutable,
-        // and storage_type is an enum
+        // is immutable, and storageType and nfsVersion are enums
         return new storage_server_connections(ssc.connection,
                 ssc.id,
                 ssc.iqn,
@@ -250,14 +257,6 @@
         sb.append(this.getNfsTimeo());
         sb.append(" };");
         return sb.toString();
-    }
-
-    public Short getNfsVersion() {
-        return nfsVersion;
-    }
-
-    public void setNfsVersion(Short nfsVersion) {
-        this.nfsVersion = nfsVersion;
     }
 
     public Short getNfsRetrans() {
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java
index a0d4b7e..c71e773 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java
@@ -5,6 +5,7 @@
 import java.util.List;
 import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
 import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
+import org.ovirt.engine.core.common.businessentities.NfsVersion;
 import org.ovirt.engine.core.common.businessentities.StorageType;
 import 
org.ovirt.engine.core.common.businessentities.storage_server_connections;
 import org.ovirt.engine.core.compat.Guid;
@@ -113,7 +114,7 @@
                 .addValue("user_name", connection.getuser_name())
                 .addValue("mount_options", connection.getMountOptions())
                 .addValue("vfs_type", connection.getVfsType())
-                .addValue("nfs_version", connection.getNfsVersion())
+                .addValue("nfs_version", (connection.getNfsVersion() != null) 
? connection.getNfsVersion().getValue() : null)
                 .addValue("nfs_timeo", connection.getNfsTimeo())
                 .addValue("nfs_retrans", connection.getNfsRetrans());
     }
@@ -135,7 +136,8 @@
                     entity.setuser_name(rs.getString("user_name"));
                     entity.setMountOptions(rs.getString("mount_options"));
                     entity.setVfsType(rs.getString("vfs_type"));
-                    entity.setNfsVersion(getShort(rs, "nfs_version"));
+                    entity.setNfsVersion((rs.getString("nfs_version") != null) 
?
+                            NfsVersion.forValue(rs.getString("nfs_version")) : 
null);
                     entity.setNfsRetrans(getShort(rs, "nfs_retrans"));
                     entity.setNfsTimeo(getShort(rs, "nfs_timeo"));
                     return entity;
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/NfsVersion.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/NfsVersion.java
new file mode 100644
index 0000000..fc6506f
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/NfsVersion.java
@@ -0,0 +1,33 @@
+package org.ovirt.engine.core.common.businessentities;
+
+import java.util.HashMap;
+
+public enum NfsVersion {
+    // The value is used as both a vdsm parameter when mounting NFS
+    // volumes as well as a string in the database
+    AUTO("auto"),
+    V3("3"),
+    V4("4");
+
+    private final String version;
+    private static java.util.HashMap<String, NfsVersion> mappings =
+            new HashMap<String, NfsVersion>();
+
+    static {
+        for (NfsVersion nfsVersion : values()) {
+            mappings.put(nfsVersion.getValue(), nfsVersion);
+        }
+    }
+
+    private NfsVersion(String version) {
+        this.version = version;
+    }
+
+    public static NfsVersion forValue(String value) {
+        return mappings.get(value);
+    }
+
+    public String getValue() {
+        return version;
+    }
+}
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 f412dab..7256cec 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
@@ -1599,7 +1599,7 @@
       <xs:element name="path" type="xs:string" minOccurs="0"/>
       <xs:element name="mount_options" type="xs:string" minOccurs="0"/>
       <xs:element name="vfs_type" type="xs:string" minOccurs="0"/>
-      <xs:element name="nfs_version" type="xs:unsignedShort" minOccurs="0"/>
+      <xs:element name="nfs_version" type="xs:string" minOccurs="0"/>
       <xs:element name="nfs_timeo" type="xs:unsignedShort" minOccurs="0"/>
       <xs:element name="nfs_retrans" type="xs:unsignedShort" minOccurs="0"/>
     </xs:sequence>
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java
index a1f88f5..42e35c6 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java
@@ -253,7 +253,7 @@
             storage.setNfsTimeo(cnx.getNfsTimeo().intValue());
         }
         if (cnx.getNfsVersion()!=null) {
-            storage.setNfsVersion(cnx.getNfsVersion().intValue());
+            storage.setNfsVersion(cnx.getNfsVersion().getValue());
         }
     }
 
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/StorageDomainMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/StorageDomainMapper.java
index fd48f3b..e04acfb 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/StorageDomainMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/StorageDomainMapper.java
@@ -9,6 +9,7 @@
 
 import org.ovirt.engine.api.model.StorageType;
 import org.ovirt.engine.api.model.VolumeGroup;
+import org.ovirt.engine.core.common.businessentities.NfsVersion;
 import org.ovirt.engine.core.common.businessentities.storage_domains;
 import org.ovirt.engine.core.common.businessentities.storage_domain_static;
 import 
org.ovirt.engine.core.common.businessentities.storage_server_connections;
@@ -75,7 +76,7 @@
                         entity.setNfsTimeo(storage.getNfsTimeo().shortValue());
                     }
                     if(storage.getNfsVersion() != null) {
-                        
entity.setNfsVersion(storage.getNfsVersion().shortValue());
+                        
entity.setNfsVersion(NfsVersion.forValue(storage.getNfsVersion()));
                     }
                     break;
                 case LOCALFS:
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStorageServerVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStorageServerVDSCommand.java
index b3c547b..d2b15df 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStorageServerVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStorageServerVDSCommand.java
@@ -87,7 +87,9 @@
             // we should not send a key with an empty value
             addIfNotNullOrEmpty(con, connection.getMountOptions(), 
"mnt_options");
             addIfNotNullOrEmpty(con, connection.getVfsType(), "vfs_type");
-            addIfNotNullOrEmpty(con, connection.getNfsVersion(), 
"protocol_version");
+            if (connection.getNfsVersion() != null) {
+                con.put("protocol_version", 
connection.getNfsVersion().getValue());
+            }
             addIfNotNullOrEmpty(con, connection.getNfsTimeo(), "timeout");
             addIfNotNullOrEmpty(con, connection.getNfsRetrans(), "retrans");
         }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
index b6d6587..8ef05a7 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
@@ -61,6 +61,7 @@
                <include name="common/businessentities/NetworkInterface.java" />
                <include name="common/businessentities/NetworkStatistics.java" 
/>
                <include name="common/businessentities/NetworkStatus.java" />
+               <include name="common/businessentities/NfsVersion.java" />
                <include name="common/businessentities/OperationMode.java" />
                <include name="common/businessentities/OriginType.java" />
                <include name="common/businessentities/VmEntityType.java" />
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NfsStorageModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NfsStorageModel.java
index c03cb74..bf4c04e 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NfsStorageModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NfsStorageModel.java
@@ -1,5 +1,6 @@
 package org.ovirt.engine.ui.uicommonweb.models.storage;
 
+import org.ovirt.engine.core.common.businessentities.NfsVersion;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
 import org.ovirt.engine.core.common.businessentities.StorageType;
 import org.ovirt.engine.core.common.businessentities.storage_pool;
@@ -142,9 +143,9 @@
         setVersion(new ListModel());
 
         List<EntityModel> versionItems = new ArrayList<EntityModel>();
-        versionItems.add(new EntityModel(constants.nfsVersionAutoNegotiate(), 
null));
-        versionItems.add(new EntityModel(constants.nfsVersion3(), (short) 3));
-        versionItems.add(new EntityModel(constants.nfsVersion4(), (short) 4));
+        versionItems.add(new EntityModel(constants.nfsVersionAutoNegotiate(), 
NfsVersion.AUTO));
+        versionItems.add(new EntityModel(constants.nfsVersion3(), 
NfsVersion.V3));
+        versionItems.add(new EntityModel(constants.nfsVersion4(), 
NfsVersion.V4));
         getVersion().setItems(versionItems);
 
         setRetransmissions(new EntityModel());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
index 2157f27..28e1d64 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
@@ -15,6 +15,7 @@
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
 import org.ovirt.engine.core.common.businessentities.LUNs;
+import org.ovirt.engine.core.common.businessentities.NfsVersion;
 import org.ovirt.engine.core.common.businessentities.StorageDomainSharedStatus;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
 import org.ovirt.engine.core.common.businessentities.StorageFormatType;
@@ -1330,7 +1331,7 @@
         storage_server_connections tempVar = new storage_server_connections();
         tempVar.setconnection(path);
         tempVar.setstorage_type(nfsModel.getType());
-        tempVar.setNfsVersion(((EntityModel) 
nfsModel.getVersion().getSelectedItem()).AsConvertible().nullableShort());
+        tempVar.setNfsVersion((NfsVersion) ((EntityModel) 
nfsModel.getVersion().getSelectedItem()).getEntity());
         
tempVar.setNfsRetrans(nfsModel.getRetransmissions().AsConvertible().nullableShort());
         
tempVar.setNfsTimeo(nfsModel.getTimeout().AsConvertible().nullableShort());
         connection = tempVar;
@@ -1727,7 +1728,7 @@
 
                     tempVar.setconnection(storageListModel.path);
                     tempVar.setstorage_type(StorageType.NFS);
-                    tempVar.setNfsVersion(((EntityModel) 
nfsModel.getVersion().getSelectedItem()).AsConvertible().nullableShort());
+                    tempVar.setNfsVersion((NfsVersion) ((EntityModel) 
nfsModel.getVersion().getSelectedItem()).getEntity());
                     
tempVar.setNfsRetrans(nfsModel.getRetransmissions().AsConvertible().nullableShort());
                     
tempVar.setNfsTimeo(nfsModel.getTimeout().AsConvertible().nullableShort());
                     storageListModel.nfsConnection = tempVar;


--
To view, visit http://gerrit.ovirt.org/8797
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I09d82db7c0ec92135cae8935f013487e97b8f357
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Greg Padgett <gpadg...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to