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