diff --git a/src/org/apache/cloudstack/storage/datastore/driver/DateraPrimaryDataStoreDriver.java b/src/org/apache/cloudstack/storage/datastore/driver/DateraPrimaryDataStoreDriver.java index a828a98..1293930 100644 --- a/src/org/apache/cloudstack/storage/datastore/driver/DateraPrimaryDataStoreDriver.java +++ b/src/org/apache/cloudstack/storage/datastore/driver/DateraPrimaryDataStoreDriver.java @@ -44,7 +44,6 @@ import com.cloud.storage.dao.VMTemplatePoolDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.dao.VolumeDetailsDao; -import com.cloud.utils.StringUtils; import com.cloud.utils.db.GlobalLock; import com.cloud.utils.exception.CloudRuntimeException; import com.google.common.base.Preconditions; @@ -70,6 +69,7 @@ import org.apache.cloudstack.storage.datastore.util.DateraObject; import org.apache.cloudstack.storage.datastore.util.DateraUtil; import org.apache.cloudstack.storage.to.SnapshotObjectTO; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import javax.inject.Inject; @@ -434,7 +434,7 @@ private String getAppInstanceName(DataObject dataObject) { String dataObjectTypeString = dataObject.getType().name(); // TEMPLATE, VOLUME, SNAPSHOT String dataObjectTypeBrief; - dataObjectTypeBrief = org.apache.commons.lang.StringUtils.substring(dataObjectTypeString, 0, 1); + dataObjectTypeBrief = StringUtils.substring(dataObjectTypeString, 0, 1); name.add(dataObjectTypeBrief); // T, V, S switch (dataObject.getType()) { @@ -449,11 +449,22 @@ private String getAppInstanceName(DataObject dataObject) { case VOLUME: VolumeInfo volumeInfo = (VolumeInfo) dataObject; + VolumeVO volumeVo = _volumeDao.findById(dataObject.getId()); + + // If the Folder is set then use that. It is possible that a volume's name set in Folder + // maybe different from the one generated by using it's UUID. This happens in case of a volume + // that has been migrated from a source to Datera. In this case Cloudstack creates a new volume + // with a new UUID and copies the data and changes the UUID of the volume back to the UUID of the + // original volume that the migration has been performed on. In this process, the volume name on Datera + // is not changed and is saved in the folder field in the volume table. + if (!StringUtils.isEmpty(volumeVo.getFolder())) { + return volumeVo.getFolder(); + } + String volumeName = volumeInfo.getName(); name.add(String.valueOf(volumeName)); name.add(dataObject.getUuid()); // 6db58e3f-14c4-45ac-95e9-60e3a00ce7d0 - VolumeVO volumeVo = _volumeDao.findById(dataObject.getId()); s_logger.debug("volumeName : " + volumeName); break; @@ -464,8 +475,8 @@ private String getAppInstanceName(DataObject dataObject) { name.add(dataObject.getUuid()); // 6db58e3f-14c4-45ac-95e9-60e3a00ce7d0 } - String appInstanceName = StringUtils.join("-", name.toArray()); - return org.apache.commons.lang.StringUtils.substring(appInstanceName, 0, DateraUtil.APPINSTANCE_MAX_LENTH); + String appInstanceName = com.cloud.utils.StringUtils.join("-", name.toArray()); + return StringUtils.substring(appInstanceName, 0, DateraUtil.APPINSTANCE_MAX_LENTH); }