You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mt...@apache.org on 2013/07/10 07:04:24 UTC
git commit: updated refs/heads/master to 06f7309
Updated Branches:
refs/heads/master 120b8d409 -> 06f73092f
Changes related to Review Board comments
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/06f73092
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/06f73092
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/06f73092
Branch: refs/heads/master
Commit: 06f73092fb35a4eec8c4f7f86180180aeeaf7571
Parents: 120b8d4
Author: Mike Tutkowski <mi...@solidfire.com>
Authored: Tue Jul 9 22:50:14 2013 -0600
Committer: Mike Tutkowski <mi...@solidfire.com>
Committed: Tue Jul 9 22:50:14 2013 -0600
----------------------------------------------------------------------
.../com/cloud/agent/api/AttachVolumeAnswer.java | 6 +
.../cloud/agent/api/AttachVolumeCommand.java | 172 +--
.../api/agent/test/AttachVolumeAnswerTest.java | 2 +-
.../src/com/cloud/storage/DiskOfferingVO.java | 4 +-
.../schema/src/com/cloud/storage/VolumeVO.java | 36 +-
.../vmware/resource/VmwareResource.java | 10 +-
.../xen/resource/CitrixResourceBase.java | 4 +-
.../driver/SolidfirePrimaryDataStoreDriver.java | 167 +--
.../SolidfirePrimaryDataStoreProvider.java | 7 +-
.../storage/datastore/util/SolidFireUtil.java | 1346 +++++++++---------
.../com/cloud/storage/VolumeManagerImpl.java | 4 +-
11 files changed, 897 insertions(+), 861 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/06f73092/core/src/com/cloud/agent/api/AttachVolumeAnswer.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/AttachVolumeAnswer.java b/core/src/com/cloud/agent/api/AttachVolumeAnswer.java
index 6b965b0..ee38775 100644
--- a/core/src/com/cloud/agent/api/AttachVolumeAnswer.java
+++ b/core/src/com/cloud/agent/api/AttachVolumeAnswer.java
@@ -27,6 +27,12 @@ public class AttachVolumeAnswer extends Answer {
this.deviceId = null;
}
+ public AttachVolumeAnswer(AttachVolumeCommand cmd, Long deviceId) {
+ super(cmd);
+ this.deviceId = deviceId;
+ this.vdiUuid = "";
+ }
+
public AttachVolumeAnswer(AttachVolumeCommand cmd, Long deviceId, String vdiUuid) {
super(cmd);
this.deviceId = deviceId;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/06f73092/core/src/com/cloud/agent/api/AttachVolumeCommand.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/AttachVolumeCommand.java b/core/src/com/cloud/agent/api/AttachVolumeCommand.java
index 2eb503a..49b2a70 100644
--- a/core/src/com/cloud/agent/api/AttachVolumeCommand.java
+++ b/core/src/com/cloud/agent/api/AttachVolumeCommand.java
@@ -19,57 +19,57 @@ package com.cloud.agent.api;
import com.cloud.storage.Storage.StoragePoolType;
public class AttachVolumeCommand extends Command {
- private boolean attach;
- private boolean _managed;
- private String vmName;
- private StoragePoolType pooltype;
- private String volumePath;
- private String volumeName;
- private Long deviceId;
- private String chainInfo;
- private String poolUuid;
- private String _storageHost;
- private int _storagePort;
- private String _iScsiName;
- private String _chapInitiatorUsername;
- private String _chapInitiatorPassword;
- private String _chapTargetUsername;
- private String _chapTargetPassword;
- private Long bytesReadRate;
- private Long bytesWriteRate;
- private Long iopsReadRate;
- private Long iopsWriteRate;
-
- protected AttachVolumeCommand() {
- }
+ private boolean attach;
+ private boolean _managed;
+ private String vmName;
+ private StoragePoolType pooltype;
+ private String volumePath;
+ private String volumeName;
+ private Long deviceId;
+ private String chainInfo;
+ private String poolUuid;
+ private String _storageHost;
+ private int _storagePort;
+ private String _iScsiName;
+ private String _chapInitiatorUsername;
+ private String _chapInitiatorPassword;
+ private String _chapTargetUsername;
+ private String _chapTargetPassword;
+ private Long bytesReadRate;
+ private Long bytesWriteRate;
+ private Long iopsReadRate;
+ private Long iopsWriteRate;
+
+ protected AttachVolumeCommand() {
+ }
public AttachVolumeCommand(boolean attach, boolean managed, String vmName,
StoragePoolType pooltype, String volumePath, String volumeName,
Long deviceId, String chainInfo) {
- this.attach = attach;
- this._managed = managed;
- this.vmName = vmName;
- this.pooltype = pooltype;
- this.volumePath = volumePath;
- this.volumeName = volumeName;
- this.deviceId = deviceId;
- this.chainInfo = chainInfo;
- }
-
- @Override
+ this.attach = attach;
+ this._managed = managed;
+ this.vmName = vmName;
+ this.pooltype = pooltype;
+ this.volumePath = volumePath;
+ this.volumeName = volumeName;
+ this.deviceId = deviceId;
+ this.chainInfo = chainInfo;
+ }
+
+ @Override
public boolean executeInSequence() {
return true;
}
- public boolean getAttach() {
- return attach;
- }
+ public boolean getAttach() {
+ return attach;
+ }
- public String getVmName() {
- return vmName;
- }
+ public String getVmName() {
+ return vmName;
+ }
- public StoragePoolType getPooltype() {
+ public StoragePoolType getPooltype() {
return pooltype;
}
@@ -77,13 +77,13 @@ public class AttachVolumeCommand extends Command {
this.pooltype = pooltype;
}
- public String getVolumePath() {
- return volumePath;
- }
+ public String getVolumePath() {
+ return volumePath;
+ }
- public String getVolumeName() {
+ public String getVolumeName() {
return volumeName;
- }
+ }
public Long getDeviceId() {
return deviceId;
@@ -109,61 +109,61 @@ public class AttachVolumeCommand extends Command {
_storageHost = storageHost;
}
- public String getStorageHost() {
- return _storageHost;
- }
+ public String getStorageHost() {
+ return _storageHost;
+ }
- public void setStoragePort(int storagePort) {
- _storagePort = storagePort;
- }
+ public void setStoragePort(int storagePort) {
+ _storagePort = storagePort;
+ }
- public int getStoragePort() {
- return _storagePort;
- }
+ public int getStoragePort() {
+ return _storagePort;
+ }
- public boolean isManaged() {
+ public boolean isManaged() {
return _managed;
}
- public void set_iScsiName(String iScsiName) {
- this._iScsiName = iScsiName;
- }
+ public void set_iScsiName(String iScsiName) {
+ this._iScsiName = iScsiName;
+ }
- public String get_iScsiName() {
- return _iScsiName;
- }
+ public String get_iScsiName() {
+ return _iScsiName;
+ }
- public void setChapInitiatorUsername(String chapInitiatorUsername) {
- _chapInitiatorUsername = chapInitiatorUsername;
- }
+ public void setChapInitiatorUsername(String chapInitiatorUsername) {
+ _chapInitiatorUsername = chapInitiatorUsername;
+ }
- public String getChapInitiatorUsername() {
- return _chapInitiatorUsername;
- }
+ public String getChapInitiatorUsername() {
+ return _chapInitiatorUsername;
+ }
- public void setChapInitiatorPassword(String chapInitiatorPassword) {
- _chapInitiatorPassword = chapInitiatorPassword;
- }
+ public void setChapInitiatorPassword(String chapInitiatorPassword) {
+ _chapInitiatorPassword = chapInitiatorPassword;
+ }
- public String getChapInitiatorPassword() {
- return _chapInitiatorPassword;
- }
+ public String getChapInitiatorPassword() {
+ return _chapInitiatorPassword;
+ }
- public void setChapTargetUsername(String chapTargetUsername) {
- _chapTargetUsername = chapTargetUsername;
- }
+ public void setChapTargetUsername(String chapTargetUsername) {
+ _chapTargetUsername = chapTargetUsername;
+ }
- public String getChapTargetUsername() {
- return _chapTargetUsername;
- }
+ public String getChapTargetUsername() {
+ return _chapTargetUsername;
+ }
- public void setChapTargetPassword(String chapTargetPassword) {
- _chapTargetPassword = chapTargetPassword;
- }
+ public void setChapTargetPassword(String chapTargetPassword) {
+ _chapTargetPassword = chapTargetPassword;
+ }
- public String getChapTargetPassword() {
- return _chapTargetPassword;
- }
+ public String getChapTargetPassword() {
+ return _chapTargetPassword;
+ }
public void setBytesReadRate(Long bytesReadRate) {
this.bytesReadRate = bytesReadRate;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/06f73092/core/test/org/apache/cloudstack/api/agent/test/AttachVolumeAnswerTest.java
----------------------------------------------------------------------
diff --git a/core/test/org/apache/cloudstack/api/agent/test/AttachVolumeAnswerTest.java b/core/test/org/apache/cloudstack/api/agent/test/AttachVolumeAnswerTest.java
index 9e43d9f..0b2bb1f 100644
--- a/core/test/org/apache/cloudstack/api/agent/test/AttachVolumeAnswerTest.java
+++ b/core/test/org/apache/cloudstack/api/agent/test/AttachVolumeAnswerTest.java
@@ -33,7 +33,7 @@ public class AttachVolumeAnswerTest {
String results = "";
AttachVolumeAnswer ava2 = new AttachVolumeAnswer(avc, results);
Long deviceId = 10L;
- AttachVolumeAnswer ava3 = new AttachVolumeAnswer(avc, deviceId, "");
+ AttachVolumeAnswer ava3 = new AttachVolumeAnswer(avc, deviceId);
@Test
public void testGetDeviceId() {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/06f73092/engine/schema/src/com/cloud/storage/DiskOfferingVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/DiskOfferingVO.java b/engine/schema/src/com/cloud/storage/DiskOfferingVO.java
index d9656b4..8cbda14 100755
--- a/engine/schema/src/com/cloud/storage/DiskOfferingVO.java
+++ b/engine/schema/src/com/cloud/storage/DiskOfferingVO.java
@@ -98,10 +98,10 @@ public class DiskOfferingVO implements DiskOffering {
private Boolean customizedIops;
@Column(name="min_iops")
- Long minIops;
+ private Long minIops;
@Column(name="max_iops")
- Long maxIops;
+ private Long maxIops;
@Column(name = "sort_key")
int sortKey;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/06f73092/engine/schema/src/com/cloud/storage/VolumeVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/VolumeVO.java b/engine/schema/src/com/cloud/storage/VolumeVO.java
index 7b54f3d..bd57f10 100755
--- a/engine/schema/src/com/cloud/storage/VolumeVO.java
+++ b/engine/schema/src/com/cloud/storage/VolumeVO.java
@@ -71,10 +71,10 @@ public class VolumeVO implements Volume {
Long size;
@Column(name = "min_iops")
- Long minIops;
+ private Long minIops;
@Column(name = "max_iops")
- Long maxIops;
+ private Long maxIops;
@Column(name = "folder")
String folder;
@@ -155,8 +155,9 @@ public class VolumeVO implements Volume {
String reservationId;
// Real Constructor
- public VolumeVO(Type type, String name, long dcId, long domainId, long accountId, long diskOfferingId, long size,
- Long minIops, Long maxIops, String iScsiName) {
+ public VolumeVO(Type type, String name, long dcId, long domainId,
+ long accountId, long diskOfferingId, long size,
+ Long minIops, Long maxIops, String iScsiName) {
this.volumeType = type;
this.name = name;
this.dataCenterId = dcId;
@@ -171,8 +172,10 @@ public class VolumeVO implements Volume {
this.uuid = UUID.randomUUID().toString();
}
- public VolumeVO(String name, long dcId, long podId, long accountId, long domainId, Long instanceId, String folder, String path,
- long size, Long minIops, Long maxIops, String iScsiName, Volume.Type vType) {
+ public VolumeVO(String name, long dcId, long podId, long accountId,
+ long domainId, Long instanceId, String folder, String path,
+ long size, Long minIops, Long maxIops, String iScsiName,
+ Volume.Type vType) {
this.name = name;
this.accountId = accountId;
this.domainId = domainId;
@@ -191,6 +194,27 @@ public class VolumeVO implements Volume {
this.uuid = UUID.randomUUID().toString();
}
+ public VolumeVO(String name, long dcId, long podId, long accountId,
+ long domainId, Long instanceId, String folder, String path,
+ long size, Volume.Type vType) {
+ this.name = name;
+ this.accountId = accountId;
+ this.domainId = domainId;
+ this.instanceId = instanceId;
+ this.folder = folder;
+ this.path = path;
+ this.size = size;
+ this.minIops = null;
+ this.maxIops = null;
+ this._iScsiName = null;
+ this.podId = podId;
+ this.dataCenterId = dcId;
+ this.volumeType = vType;
+ this.state = Volume.State.Allocated;
+ this.recreatable = false;
+ this.uuid = UUID.randomUUID().toString();
+ }
+
// Copy Constructor
public VolumeVO(Volume that) {
this(that.getName(), that.getDataCenterId(), that.getPodId(), that.getAccountId(), that.getDomainId(), that.getInstanceId(),
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/06f73092/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
index 372cc1b..1870736 100755
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
@@ -3972,7 +3972,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
throw new Exception("Unable to create a dummy VM for volume creation");
}
- vmMo.createDisk(volumeDatastorePath, (int)(dsMo.getSummary().getFreeSpace() / (1024L * 1024L)),
+ vmMo.createDisk(volumeDatastorePath, getMBsFromBytes(dsMo.getSummary().getFreeSpace()),
morDs, vmMo.getScsiDeviceControllerKey());
vmMo.detachDisk(volumeDatastorePath, false);
}
@@ -5054,7 +5054,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
synchronized (this) {
s_logger.info("Delete file if exists in datastore to clear the way for creating the volume. file: " + volumeDatastorePath);
VmwareHelper.deleteVolumeVmdkFiles(dsMo, vmdkName, dcMo);
- vmMo.createDisk(volumeDatastorePath, (int) (dskch.getSize() / (1024L * 1024L)), morDatastore, -1);
+ vmMo.createDisk(volumeDatastorePath, getMBsFromBytes(dskch.getSize()), morDatastore, -1);
vmMo.detachDisk(volumeDatastorePath, false);
}
@@ -5113,7 +5113,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
// s_logger.info("Delete file if exists in datastore to clear the way for creating the volume. file: " + volumeDatastorePath);
VmwareHelper.deleteVolumeVmdkFiles(dsMo, volumeUuid.toString(), dcMo);
- vmMo.createDisk(volumeDatastorePath, (int) (dskch.getSize() / (1024L * 1024L)), morDatastore, vmMo.getScsiDeviceControllerKey());
+ vmMo.createDisk(volumeDatastorePath, getMBsFromBytes(dskch.getSize()), morDatastore, vmMo.getScsiDeviceControllerKey());
vmMo.detachDisk(volumeDatastorePath, false);
}
@@ -5137,6 +5137,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
}
}
+ private static int getMBsFromBytes(long bytes) {
+ return (int)(bytes / (1024L * 1024L));
+ }
+
protected VirtualMachineMO prepareVolumeHostDummyVm(VmwareHypervisorHost hyperHost, DatastoreMO dsMo, String vmName) throws Exception {
assert (hyperHost != null);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/06f73092/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index c8e00da..1f4b434 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@ -6591,7 +6591,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
}
protected VDI handleSrAndVdiAttach(String iqn, String storageHostName,
- String chapInitiatorName, String chapInitiatorPassword) throws Exception {
+ String chapInitiatorName, String chapInitiatorPassword) throws Types.XenAPIException, XmlRpcException {
VDI vdi = null;
Connection conn = getConnection();
@@ -6612,7 +6612,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
vdir.virtualSize = sr.getPhysicalSize(conn) - sr.getPhysicalUtilisation(conn) - getMetadata(sr.getPhysicalSize(conn));
if (vdir.virtualSize < 0) {
- throw new Exception("VDI virtual size cannot be less than 0.");
+ throw new CloudRuntimeException("VDI virtual size cannot be less than 0.");
}
vdi = VDI.create(conn, vdir);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/06f73092/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidfirePrimaryDataStoreDriver.java
----------------------------------------------------------------------
diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidfirePrimaryDataStoreDriver.java b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidfirePrimaryDataStoreDriver.java
index 329f27f..df77d15 100644
--- a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidfirePrimaryDataStoreDriver.java
+++ b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidfirePrimaryDataStoreDriver.java
@@ -36,6 +36,7 @@ import com.cloud.agent.api.to.DataObjectType;
import com.cloud.agent.api.to.DataStoreTO;
import com.cloud.agent.api.to.DataTO;
import com.cloud.dc.dao.DataCenterDao;
+import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.exception.StorageUnavailableException;
import com.cloud.storage.Storage.StoragePoolType;
import com.cloud.storage.VolumeVO;
@@ -120,21 +121,16 @@ public class SolidfirePrimaryDataStoreDriver implements PrimaryDataStoreDriver {
private SolidFireUtil.SolidFireAccount createSolidFireAccount(String sfAccountName,
SolidFireConnection sfConnection) {
- try {
- String mVip = sfConnection.getManagementVip();
- int mPort = sfConnection.getManagementPort();
- String clusterAdminUsername = sfConnection.getClusterAdminUsername();
- String clusterAdminPassword = sfConnection.getClusterAdminPassword();
+ String mVip = sfConnection.getManagementVip();
+ int mPort = sfConnection.getManagementPort();
+ String clusterAdminUsername = sfConnection.getClusterAdminUsername();
+ String clusterAdminPassword = sfConnection.getClusterAdminPassword();
- long accountNumber = SolidFireUtil.createSolidFireAccount(mVip, mPort,
- clusterAdminUsername, clusterAdminPassword, sfAccountName);
+ long accountNumber = SolidFireUtil.createSolidFireAccount(mVip, mPort,
+ clusterAdminUsername, clusterAdminPassword, sfAccountName);
- return SolidFireUtil.getSolidFireAccountById(mVip, mPort,
- clusterAdminUsername, clusterAdminPassword, accountNumber);
- }
- catch (Exception ex) {
- throw new IllegalArgumentException(ex.getMessage());
- }
+ return SolidFireUtil.getSolidFireAccountById(mVip, mPort,
+ clusterAdminUsername, clusterAdminPassword, accountNumber);
}
private void updateCsDbWithAccountInfo(long csAccountId, SolidFireUtil.SolidFireAccount sfAccount) {
@@ -225,7 +221,6 @@ public class SolidfirePrimaryDataStoreDriver implements PrimaryDataStoreDriver {
}
private SolidFireUtil.SolidFireVolume createSolidFireVolume(VolumeInfo volumeInfo, SolidFireConnection sfConnection)
- throws StorageUnavailableException, Exception
{
String mVip = sfConnection.getManagementVip();
int mPort = sfConnection.getManagementPort();
@@ -248,11 +243,11 @@ public class SolidfirePrimaryDataStoreDriver implements PrimaryDataStoreDriver {
iops = new Iops(volumeInfo.getMinIops(), volumeInfo.getMaxIops());
}
- long sfVolumeId = SolidFireUtil.createSolidFireVolume(mVip, mPort, clusterAdminUsername, clusterAdminPassword,
- volumeInfo.getName(), sfAccountId, volumeInfo.getSize(), true,
- iops.getMinIops(), iops.getMaxIops(), iops.getBurstIops());
+ long sfVolumeId = SolidFireUtil.createSolidFireVolume(mVip, mPort, clusterAdminUsername, clusterAdminPassword,
+ volumeInfo.getName(), sfAccountId, volumeInfo.getSize(), true,
+ iops.getMinIops(), iops.getMaxIops(), iops.getBurstIops());
- return SolidFireUtil.getSolidFireVolume(mVip, mPort, clusterAdminUsername, clusterAdminPassword, sfVolumeId);
+ return SolidFireUtil.getSolidFireVolume(mVip, mPort, clusterAdminUsername, clusterAdminPassword, sfVolumeId);
}
private static class Iops
@@ -261,14 +256,14 @@ public class SolidfirePrimaryDataStoreDriver implements PrimaryDataStoreDriver {
private final long _maxIops;
private final long _burstIops;
- public Iops(long minIops, long maxIops) throws Exception
+ public Iops(long minIops, long maxIops) throws IllegalArgumentException
{
if (minIops <= 0 || maxIops <= 0) {
- throw new Exception("The 'Min IOPS' and 'Max IOPS' values must be greater than 0.");
+ throw new IllegalArgumentException("The 'Min IOPS' and 'Max IOPS' values must be greater than 0.");
}
if (minIops > maxIops) {
- throw new Exception("The 'Min IOPS' value cannot exceed the 'Max IOPS' value.");
+ throw new IllegalArgumentException("The 'Min IOPS' value cannot exceed the 'Max IOPS' value.");
}
_minIops = minIops;
@@ -299,7 +294,6 @@ public class SolidfirePrimaryDataStoreDriver implements PrimaryDataStoreDriver {
}
private void deleteSolidFireVolume(VolumeInfo volumeInfo, SolidFireConnection sfConnection)
- throws StorageUnavailableException, Exception
{
Long storagePoolId = volumeInfo.getPoolId();
@@ -318,15 +312,10 @@ public class SolidfirePrimaryDataStoreDriver implements PrimaryDataStoreDriver {
}
private String getSfAccountName(String csAccountUuid, long csAccountId) {
- return "CloudStack_" + csAccountUuid + "_" + getRandomNumber() + "_" + csAccountId;
- }
-
- private static long getRandomNumber()
- {
- return Math.round(Math.random() * 1000000000);
+ return "CloudStack_" + csAccountUuid + "_" + csAccountId;
}
- private boolean sfAccountExists(String sfAccountName, SolidFireConnection sfConnection) throws Exception {
+ private boolean sfAccountExists(String sfAccountName, SolidFireConnection sfConnection) {
String mVip = sfConnection.getManagementVip();
int mPort = sfConnection.getManagementPort();
String clusterAdminUsername = sfConnection.getClusterAdminUsername();
@@ -349,55 +338,43 @@ public class SolidfirePrimaryDataStoreDriver implements PrimaryDataStoreDriver {
String errMsg = null;
if (dataObject.getType() == DataObjectType.VOLUME) {
- try {
- VolumeInfo volumeInfo = (VolumeInfo)dataObject;
- AccountVO account = _accountDao.findById(volumeInfo.getAccountId());
- String sfAccountName = getSfAccountName(account.getUuid(), account.getAccountId());
+ VolumeInfo volumeInfo = (VolumeInfo)dataObject;
+ AccountVO account = _accountDao.findById(volumeInfo.getAccountId());
+ String sfAccountName = getSfAccountName(account.getUuid(), account.getAccountId());
- long storagePoolId = dataStore.getId();
- SolidFireConnection sfConnection = getSolidFireConnection(storagePoolId);
+ long storagePoolId = dataStore.getId();
+ SolidFireConnection sfConnection = getSolidFireConnection(storagePoolId);
- if (!sfAccountExists(sfAccountName, sfConnection)) {
- SolidFireUtil.SolidFireAccount sfAccount = createSolidFireAccount(sfAccountName,
- sfConnection);
+ if (!sfAccountExists(sfAccountName, sfConnection)) {
+ SolidFireUtil.SolidFireAccount sfAccount = createSolidFireAccount(sfAccountName,
+ sfConnection);
- updateCsDbWithAccountInfo(account.getId(), sfAccount);
- }
+ updateCsDbWithAccountInfo(account.getId(), sfAccount);
+ }
- SolidFireUtil.SolidFireVolume sfVolume = createSolidFireVolume(volumeInfo, sfConnection);
+ SolidFireUtil.SolidFireVolume sfVolume = createSolidFireVolume(volumeInfo, sfConnection);
- iqn = sfVolume.getIqn();
+ iqn = sfVolume.getIqn();
- VolumeVO volume = this._volumeDao.findById(volumeInfo.getId());
+ VolumeVO volume = this._volumeDao.findById(volumeInfo.getId());
- volume.set_iScsiName(iqn);
- volume.setFolder(String.valueOf(sfVolume.getId()));
- volume.setPoolType(StoragePoolType.IscsiLUN);
- volume.setPoolId(storagePoolId);
+ volume.set_iScsiName(iqn);
+ volume.setFolder(String.valueOf(sfVolume.getId()));
+ volume.setPoolType(StoragePoolType.IscsiLUN);
+ volume.setPoolId(storagePoolId);
- _volumeDao.update(volume.getId(), volume);
+ _volumeDao.update(volume.getId(), volume);
- StoragePoolVO storagePool = _storagePoolDao.findById(dataStore.getId());
+ StoragePoolVO storagePool = _storagePoolDao.findById(dataStore.getId());
- long capacityBytes = storagePool.getCapacityBytes();
- long usedBytes = storagePool.getUsedBytes();
+ long capacityBytes = storagePool.getCapacityBytes();
+ long usedBytes = storagePool.getUsedBytes();
- usedBytes += volumeInfo.getSize();
+ usedBytes += volumeInfo.getSize();
- if (usedBytes > capacityBytes) {
- usedBytes = capacityBytes;
- }
+ storagePool.setUsedBytes(usedBytes > capacityBytes ? capacityBytes : usedBytes);
- storagePool.setUsedBytes(usedBytes);
-
- _storagePoolDao.update(storagePoolId, storagePool);
- } catch (StorageUnavailableException e) {
- s_logger.error("Failed to create volume (StorageUnavailableException)", e);
- errMsg = e.toString();
- } catch (Exception e) {
- s_logger.error("Failed to create volume (Exception)", e);
- errMsg = e.toString();
- }
+ _storagePoolDao.update(storagePoolId, storagePool);
}
else {
errMsg = "Invalid DataObjectType (" + dataObject.getType() + ") passed to createAsync";
@@ -412,7 +389,7 @@ public class SolidfirePrimaryDataStoreDriver implements PrimaryDataStoreDriver {
callback.complete(result);
}
- private void deleteSolidFireAccount(long sfAccountId, SolidFireConnection sfConnection) throws Exception {
+ private void deleteSolidFireAccount(long sfAccountId, SolidFireConnection sfConnection) {
String mVip = sfConnection.getManagementVip();
int mPort = sfConnection.getManagementPort();
String clusterAdminUsername = sfConnection.getClusterAdminUsername();
@@ -433,7 +410,7 @@ public class SolidfirePrimaryDataStoreDriver implements PrimaryDataStoreDriver {
SolidFireUtil.deleteSolidFireAccount(mVip, mPort, clusterAdminUsername, clusterAdminPassword, sfAccountId);
}
- private boolean sfAccountHasVolume(long sfAccountId, SolidFireConnection sfConnection) throws Exception {
+ private boolean sfAccountHasVolume(long sfAccountId, SolidFireConnection sfConnection) {
String mVip = sfConnection.getManagementVip();
int mPort = sfConnection.getManagementPort();
String clusterAdminUsername = sfConnection.getClusterAdminUsername();
@@ -459,48 +436,36 @@ public class SolidfirePrimaryDataStoreDriver implements PrimaryDataStoreDriver {
String errMsg = null;
if (dataObject.getType() == DataObjectType.VOLUME) {
- try {
- VolumeInfo volumeInfo = (VolumeInfo)dataObject;
- AccountVO account = _accountDao.findById(volumeInfo.getAccountId());
- AccountDetailVO accountDetails = _accountDetailsDao.findDetail(account.getAccountId(), SolidFireUtil.ACCOUNT_ID);
- long sfAccountId = Long.parseLong(accountDetails.getValue());
+ VolumeInfo volumeInfo = (VolumeInfo)dataObject;
+ AccountVO account = _accountDao.findById(volumeInfo.getAccountId());
+ AccountDetailVO accountDetails = _accountDetailsDao.findDetail(account.getAccountId(), SolidFireUtil.ACCOUNT_ID);
+ long sfAccountId = Long.parseLong(accountDetails.getValue());
- long storagePoolId = dataStore.getId();
- SolidFireConnection sfConnection = getSolidFireConnection(storagePoolId);
+ long storagePoolId = dataStore.getId();
+ SolidFireConnection sfConnection = getSolidFireConnection(storagePoolId);
- deleteSolidFireVolume(volumeInfo, sfConnection);
+ deleteSolidFireVolume(volumeInfo, sfConnection);
- _volumeDao.deleteVolumesByInstance(volumeInfo.getId());
+ _volumeDao.deleteVolumesByInstance(volumeInfo.getId());
- if (!sfAccountHasVolume(sfAccountId, sfConnection)) {
- // delete the account from the SolidFire SAN
- deleteSolidFireAccount(sfAccountId, sfConnection);
+ if (!sfAccountHasVolume(sfAccountId, sfConnection)) {
+ // delete the account from the SolidFire SAN
+ deleteSolidFireAccount(sfAccountId, sfConnection);
- // delete the info in the account_details table
- // that's related to the SolidFire account
- _accountDetailsDao.deleteDetails(account.getAccountId());
- }
+ // delete the info in the account_details table
+ // that's related to the SolidFire account
+ _accountDetailsDao.deleteDetails(account.getAccountId());
+ }
- StoragePoolVO storagePool = _storagePoolDao.findById(storagePoolId);
+ StoragePoolVO storagePool = _storagePoolDao.findById(storagePoolId);
- long usedBytes = storagePool.getUsedBytes();
+ long usedBytes = storagePool.getUsedBytes();
- usedBytes -= volumeInfo.getSize();
+ usedBytes -= volumeInfo.getSize();
- if (usedBytes < 0) {
- usedBytes = 0;
- }
+ storagePool.setUsedBytes(usedBytes < 0 ? 0 : usedBytes);
- storagePool.setUsedBytes(usedBytes);
-
- _storagePoolDao.update(storagePoolId, storagePool);
- } catch (StorageUnavailableException e) {
- s_logger.error("Failed to create volume (StorageUnavailableException)", e);
- errMsg = e.toString();
- } catch (Exception e) {
- s_logger.error("Failed to create volume (Exception)", e);
- errMsg = e.toString();
- }
+ _storagePoolDao.update(storagePoolId, storagePool);
}
else {
errMsg = "Invalid DataObjectType (" + dataObject.getType() + ") passed to deleteAsync";
@@ -515,6 +480,7 @@ public class SolidfirePrimaryDataStoreDriver implements PrimaryDataStoreDriver {
@Override
public void copyAsync(DataObject srcdata, DataObject destData, AsyncCompletionCallback<CopyCommandResult> callback) {
+ throw new UnsupportedOperationException();
}
@Override
@@ -524,13 +490,16 @@ public class SolidfirePrimaryDataStoreDriver implements PrimaryDataStoreDriver {
@Override
public void revertSnapshot(SnapshotInfo snapshot, AsyncCompletionCallback<CommandResult> callback) {
+ throw new UnsupportedOperationException();
}
@Override
public void resize(DataObject data, AsyncCompletionCallback<CreateCmdResult> callback) {
+ throw new UnsupportedOperationException();
}
@Override
public void takeSnapshot(SnapshotInfo snapshot, AsyncCompletionCallback<CreateCmdResult> callback) {
+ throw new UnsupportedOperationException();
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/06f73092/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidfirePrimaryDataStoreProvider.java
----------------------------------------------------------------------
diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidfirePrimaryDataStoreProvider.java b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidfirePrimaryDataStoreProvider.java
index 28864ea..9c784ba 100644
--- a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidfirePrimaryDataStoreProvider.java
+++ b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidfirePrimaryDataStoreProvider.java
@@ -35,12 +35,11 @@ import com.cloud.utils.component.ComponentContext;
@Component
public class SolidfirePrimaryDataStoreProvider implements PrimaryDataStoreProvider {
- protected DataStoreLifeCycle lifecycle;
- protected PrimaryDataStoreDriver driver;
- protected HypervisorHostListener listener;
+ private DataStoreLifeCycle lifecycle;
+ private PrimaryDataStoreDriver driver;
+ private HypervisorHostListener listener;
SolidfirePrimaryDataStoreProvider() {
-
}
@Override
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/06f73092/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/util/SolidFireUtil.java
----------------------------------------------------------------------
diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/util/SolidFireUtil.java b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/util/SolidFireUtil.java
index 26766e8..3570dc0 100644
--- a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/util/SolidFireUtil.java
+++ b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/util/SolidFireUtil.java
@@ -18,7 +18,10 @@ package org.apache.cloudstack.storage.datastore.util;
import java.io.BufferedReader;
import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
import java.net.URI;
+import java.net.URISyntaxException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
@@ -35,6 +38,7 @@ import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.ClientProtocolException;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
@@ -42,12 +46,13 @@ import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.BasicClientConnectionManager;
+import com.cloud.utils.exception.CloudRuntimeException;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class SolidFireUtil
{
- public static final String PROVIDER_NAME = "SolidFire";
+ public static final String PROVIDER_NAME = "SolidFire";
public static final String MANAGEMENT_VIP = "mVip";
public static final String STORAGE_VIP = "sVip";
@@ -66,38 +71,38 @@ public class SolidFireUtil
public static final String CHAP_TARGET_USERNAME = "chapTargetUsername";
public static final String CHAP_TARGET_SECRET = "chapTargetSecret";
- public static long createSolidFireVolume(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword,
- String strSfVolumeName, long lSfAccountId, long lTotalSize, boolean bEnable512e,
- long lMinIops, long lMaxIops, long lBurstIops) throws Exception
- {
- final Gson gson = new GsonBuilder().create();
-
- VolumeToCreate volumeToCreate = new VolumeToCreate(strSfVolumeName, lSfAccountId, lTotalSize, bEnable512e,
- lMinIops, lMaxIops, lBurstIops);
-
- String strVolumeToCreateJson = gson.toJson(volumeToCreate);
-
- String strVolumeCreateResultJson = executeJsonRpc(strVolumeToCreateJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
-
- VolumeCreateResult volumeCreateResult = gson.fromJson(strVolumeCreateResultJson, VolumeCreateResult.class);
-
- verifyResult(volumeCreateResult.result, strVolumeCreateResultJson, gson);
-
- return volumeCreateResult.result.volumeID;
- }
-
- public static void deleteSolidFireVolume(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword, long lVolumeId) throws Exception
- {
- final Gson gson = new GsonBuilder().create();
-
- VolumeToDelete volumeToDelete = new VolumeToDelete(lVolumeId);
-
- String strVolumeToDeleteJson = gson.toJson(volumeToDelete);
-
- executeJsonRpc(strVolumeToDeleteJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
- }
+ public static long createSolidFireVolume(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword,
+ String strSfVolumeName, long lSfAccountId, long lTotalSize, boolean bEnable512e,
+ long lMinIops, long lMaxIops, long lBurstIops)
+ {
+ final Gson gson = new GsonBuilder().create();
+
+ VolumeToCreate volumeToCreate = new VolumeToCreate(strSfVolumeName, lSfAccountId, lTotalSize, bEnable512e,
+ lMinIops, lMaxIops, lBurstIops);
+
+ String strVolumeToCreateJson = gson.toJson(volumeToCreate);
+
+ String strVolumeCreateResultJson = executeJsonRpc(strVolumeToCreateJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
- public static void purgeSolidFireVolume(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword, long lVolumeId) throws Exception
+ VolumeCreateResult volumeCreateResult = gson.fromJson(strVolumeCreateResultJson, VolumeCreateResult.class);
+
+ verifyResult(volumeCreateResult.result, strVolumeCreateResultJson, gson);
+
+ return volumeCreateResult.result.volumeID;
+ }
+
+ public static void deleteSolidFireVolume(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword, long lVolumeId)
+ {
+ final Gson gson = new GsonBuilder().create();
+
+ VolumeToDelete volumeToDelete = new VolumeToDelete(lVolumeId);
+
+ String strVolumeToDeleteJson = gson.toJson(volumeToDelete);
+
+ executeJsonRpc(strVolumeToDeleteJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
+ }
+
+ public static void purgeSolidFireVolume(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword, long lVolumeId)
{
final Gson gson = new GsonBuilder().create();
@@ -108,31 +113,31 @@ public class SolidFireUtil
executeJsonRpc(strVolumeToPurgeJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
}
- public static SolidFireVolume getSolidFireVolume(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword, long lVolumeId) throws Exception
- {
- final Gson gson = new GsonBuilder().create();
-
- VolumeToGet volumeToGet = new VolumeToGet(lVolumeId);
-
- String strVolumeToGetJson = gson.toJson(volumeToGet);
-
- String strVolumeGetResultJson = executeJsonRpc(strVolumeToGetJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
-
- VolumeGetResult volumeGetResult = gson.fromJson(strVolumeGetResultJson, VolumeGetResult.class);
-
- verifyResult(volumeGetResult.result, strVolumeGetResultJson, gson);
-
- String strVolumeName = getVolumeName(volumeGetResult, lVolumeId);
- String strVolumeIqn = getVolumeIqn(volumeGetResult, lVolumeId);
- long lAccountId = getVolumeAccountId(volumeGetResult, lVolumeId);
- String strVolumeStatus = getVolumeStatus(volumeGetResult, lVolumeId);
-
- return new SolidFireVolume(lVolumeId, strVolumeName, strVolumeIqn, lAccountId, strVolumeStatus);
- }
+ public static SolidFireVolume getSolidFireVolume(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword, long lVolumeId)
+ {
+ final Gson gson = new GsonBuilder().create();
+
+ VolumeToGet volumeToGet = new VolumeToGet(lVolumeId);
+
+ String strVolumeToGetJson = gson.toJson(volumeToGet);
+
+ String strVolumeGetResultJson = executeJsonRpc(strVolumeToGetJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
+
+ VolumeGetResult volumeGetResult = gson.fromJson(strVolumeGetResultJson, VolumeGetResult.class);
- public static List<SolidFireVolume> getSolidFireVolumesForAccountId(String strSfMvip, int iSfPort,
- String strSfAdmin, String strSfPassword, long lAccountId) throws Exception
- {
+ verifyResult(volumeGetResult.result, strVolumeGetResultJson, gson);
+
+ String strVolumeName = getVolumeName(volumeGetResult, lVolumeId);
+ String strVolumeIqn = getVolumeIqn(volumeGetResult, lVolumeId);
+ long lAccountId = getVolumeAccountId(volumeGetResult, lVolumeId);
+ String strVolumeStatus = getVolumeStatus(volumeGetResult, lVolumeId);
+
+ return new SolidFireVolume(lVolumeId, strVolumeName, strVolumeIqn, lAccountId, strVolumeStatus);
+ }
+
+ public static List<SolidFireVolume> getSolidFireVolumesForAccountId(String strSfMvip, int iSfPort,
+ String strSfAdmin, String strSfPassword, long lAccountId)
+ {
final Gson gson = new GsonBuilder().create();
VolumesToGetForAccount volumesToGetForAccount = new VolumesToGetForAccount(lAccountId);
@@ -157,130 +162,135 @@ public class SolidFireUtil
private static final String ACTIVE = "active";
- public static class SolidFireVolume
- {
- private final long _id;
- private final String _name;
- private final String _iqn;
- private final long _accountId;
- private final String _status;
-
- public SolidFireVolume(long id, String name, String iqn,
- long accountId, String status)
- {
- _id = id;
- _name = name;
- _iqn = "/" + iqn + "/0";
- _accountId = accountId;
- _status = status;
- }
-
- public long getId()
- {
- return _id;
- }
-
- public String getName()
- {
- return _name;
- }
-
- public String getIqn()
- {
- return _iqn;
- }
-
- public long getAccountId()
- {
- return _accountId;
- }
-
- public boolean isActive()
- {
- return ACTIVE.equalsIgnoreCase(_status);
- }
-
- @Override
+ public static class SolidFireVolume
+ {
+ private final long _id;
+ private final String _name;
+ private final String _iqn;
+ private final long _accountId;
+ private final String _status;
+
+ public SolidFireVolume(long id, String name, String iqn,
+ long accountId, String status)
+ {
+ _id = id;
+ _name = name;
+ _iqn = "/" + iqn + "/0";
+ _accountId = accountId;
+ _status = status;
+ }
+
+ public long getId()
+ {
+ return _id;
+ }
+
+ public String getName()
+ {
+ return _name;
+ }
+
+ public String getIqn()
+ {
+ return _iqn;
+ }
+
+ public long getAccountId()
+ {
+ return _accountId;
+ }
+
+ public boolean isActive()
+ {
+ return ACTIVE.equalsIgnoreCase(_status);
+ }
+
+ @Override
public int hashCode() {
- return (int)_id;
+ return _iqn.hashCode();
}
-
+
@Override
public String toString() {
return _name;
}
-
+
@Override
public boolean equals(Object obj) {
- if (!(obj instanceof SolidFireVolume)) {
+ if (obj == null) {
return false;
}
-
+
+ if (!obj.getClass().equals(SolidFireVolume.class)) {
+ return false;
+ }
+
SolidFireVolume sfv = (SolidFireVolume)obj;
-
+
if (_id == sfv._id && _name.equals(sfv._name) &&
- _iqn.equals(sfv._iqn) && isActive() == sfv.isActive()) {
+ _iqn.equals(sfv._iqn) && _accountId == sfv._accountId &&
+ isActive() == sfv.isActive()) {
return true;
}
-
+
return false;
}
}
-
- public static long createSolidFireAccount(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword,
- String strAccountName) throws Exception
- {
- final Gson gson = new GsonBuilder().create();
-
- AccountToAdd accountToAdd = new AccountToAdd(strAccountName);
-
- String strAccountAddJson = gson.toJson(accountToAdd);
-
- String strAccountAddResultJson = executeJsonRpc(strAccountAddJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
-
- AccountAddResult accountAddResult = gson.fromJson(strAccountAddResultJson, AccountAddResult.class);
-
- verifyResult(accountAddResult.result, strAccountAddResultJson, gson);
-
- return accountAddResult.result.accountID;
- }
-
- public static void deleteSolidFireAccount(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword,
- long lAccountId) throws Exception
- {
- final Gson gson = new GsonBuilder().create();
-
- AccountToRemove accountToRemove = new AccountToRemove(lAccountId);
-
- String strAccountToRemoveJson = gson.toJson(accountToRemove);
-
- executeJsonRpc(strAccountToRemoveJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
- }
-
- public static SolidFireAccount getSolidFireAccountById(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword,
- long lSfAccountId) throws Exception
- {
- final Gson gson = new GsonBuilder().create();
-
- AccountToGetById accountToGetById = new AccountToGetById(lSfAccountId);
-
- String strAccountToGetByIdJson = gson.toJson(accountToGetById);
-
- String strAccountGetByIdResultJson = executeJsonRpc(strAccountToGetByIdJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
-
- AccountGetResult accountGetByIdResult = gson.fromJson(strAccountGetByIdResultJson, AccountGetResult.class);
-
- verifyResult(accountGetByIdResult.result, strAccountGetByIdResultJson, gson);
-
- String strSfAccountName = accountGetByIdResult.result.account.username;
- String strSfAccountInitiatorSecret = accountGetByIdResult.result.account.initiatorSecret;
- String strSfAccountTargetSecret = accountGetByIdResult.result.account.targetSecret;
-
- return new SolidFireAccount(lSfAccountId, strSfAccountName, strSfAccountInitiatorSecret, strSfAccountTargetSecret);
- }
- public static SolidFireAccount getSolidFireAccountByName(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword,
- String strSfAccountName) throws Exception
+ public static long createSolidFireAccount(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword,
+ String strAccountName)
+ {
+ final Gson gson = new GsonBuilder().create();
+
+ AccountToAdd accountToAdd = new AccountToAdd(strAccountName);
+
+ String strAccountAddJson = gson.toJson(accountToAdd);
+
+ String strAccountAddResultJson = executeJsonRpc(strAccountAddJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
+
+ AccountAddResult accountAddResult = gson.fromJson(strAccountAddResultJson, AccountAddResult.class);
+
+ verifyResult(accountAddResult.result, strAccountAddResultJson, gson);
+
+ return accountAddResult.result.accountID;
+ }
+
+ public static void deleteSolidFireAccount(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword,
+ long lAccountId)
+ {
+ final Gson gson = new GsonBuilder().create();
+
+ AccountToRemove accountToRemove = new AccountToRemove(lAccountId);
+
+ String strAccountToRemoveJson = gson.toJson(accountToRemove);
+
+ executeJsonRpc(strAccountToRemoveJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
+ }
+
+ public static SolidFireAccount getSolidFireAccountById(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword,
+ long lSfAccountId)
+ {
+ final Gson gson = new GsonBuilder().create();
+
+ AccountToGetById accountToGetById = new AccountToGetById(lSfAccountId);
+
+ String strAccountToGetByIdJson = gson.toJson(accountToGetById);
+
+ String strAccountGetByIdResultJson = executeJsonRpc(strAccountToGetByIdJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
+
+ AccountGetResult accountGetByIdResult = gson.fromJson(strAccountGetByIdResultJson, AccountGetResult.class);
+
+ verifyResult(accountGetByIdResult.result, strAccountGetByIdResultJson, gson);
+
+ String strSfAccountName = accountGetByIdResult.result.account.username;
+ String strSfAccountInitiatorSecret = accountGetByIdResult.result.account.initiatorSecret;
+ String strSfAccountTargetSecret = accountGetByIdResult.result.account.targetSecret;
+
+ return new SolidFireAccount(lSfAccountId, strSfAccountName, strSfAccountInitiatorSecret, strSfAccountTargetSecret);
+ }
+
+ public static SolidFireAccount getSolidFireAccountByName(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword,
+ String strSfAccountName)
{
final Gson gson = new GsonBuilder().create();
@@ -300,71 +310,75 @@ public class SolidFireUtil
return new SolidFireAccount(lSfAccountId, strSfAccountName, strSfAccountInitiatorSecret, strSfAccountTargetSecret);
}
-
- public static class SolidFireAccount
- {
- private final long _id;
- private final String _name;
- private final String _initiatorSecret;
- private final String _targetSecret;
-
- public SolidFireAccount(long id, String name, String initiatorSecret, String targetSecret)
- {
- _id = id;
- _name = name;
- _initiatorSecret = initiatorSecret;
- _targetSecret = targetSecret;
- }
-
- public long getId()
- {
- return _id;
- }
-
- public String getName()
- {
- return _name;
- }
-
- public String getInitiatorSecret()
- {
- return _initiatorSecret;
- }
-
- public String getTargetSecret()
- {
- return _targetSecret;
- }
-
- @Override
- public int hashCode() {
- return (int)_id;
- }
-
- @Override
- public String toString() {
- return _name;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof SolidFireAccount)) {
- return false;
- }
-
- SolidFireAccount sfa = (SolidFireAccount)obj;
-
- if (_id == sfa._id && _name.equals(sfa._name) &&
- _initiatorSecret.equals(sfa._initiatorSecret) &&
- _targetSecret.equals(sfa._targetSecret)) {
- return true;
- }
-
- return false;
- }
- }
- public static List<SolidFireVolume> getDeletedVolumes(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword) throws Exception
+ public static class SolidFireAccount
+ {
+ private final long _id;
+ private final String _name;
+ private final String _initiatorSecret;
+ private final String _targetSecret;
+
+ public SolidFireAccount(long id, String name, String initiatorSecret, String targetSecret)
+ {
+ _id = id;
+ _name = name;
+ _initiatorSecret = initiatorSecret;
+ _targetSecret = targetSecret;
+ }
+
+ public long getId()
+ {
+ return _id;
+ }
+
+ public String getName()
+ {
+ return _name;
+ }
+
+ public String getInitiatorSecret()
+ {
+ return _initiatorSecret;
+ }
+
+ public String getTargetSecret()
+ {
+ return _targetSecret;
+ }
+
+ @Override
+ public int hashCode() {
+ return (_id + _name).hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return _name;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+
+ if (!obj.getClass().equals(SolidFireAccount.class)) {
+ return false;
+ }
+
+ SolidFireAccount sfa = (SolidFireAccount)obj;
+
+ if (_id == sfa._id && _name.equals(sfa._name) &&
+ _initiatorSecret.equals(sfa._initiatorSecret) &&
+ _targetSecret.equals(sfa._targetSecret)) {
+ return true;
+ }
+
+ return false;
+ }
+ }
+
+ public static List<SolidFireVolume> getDeletedVolumes(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword)
{
final Gson gson = new GsonBuilder().create();
@@ -387,104 +401,104 @@ public class SolidFireUtil
return deletedVolumes;
}
-
- public static long createSolidFireVag(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword, String strVagName) throws Exception
- {
- final Gson gson = new GsonBuilder().create();
-
- VagToCreate vagToCreate = new VagToCreate(strVagName);
-
- String strVagCreateJson = gson.toJson(vagToCreate);
-
- String strVagCreateResultJson = executeJsonRpc(strVagCreateJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
-
- VagCreateResult vagCreateResult = gson.fromJson(strVagCreateResultJson, VagCreateResult.class);
-
- verifyResult(vagCreateResult.result, strVagCreateResultJson, gson);
-
- return vagCreateResult.result.volumeAccessGroupID;
- }
-
- public static void deleteSolidFireVag(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword, long lVagId) throws Exception
- {
- final Gson gson = new GsonBuilder().create();
-
- VagToDelete vagToDelete = new VagToDelete(lVagId);
-
- String strVagToDeleteJson = gson.toJson(vagToDelete);
-
- executeJsonRpc(strVagToDeleteJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
- }
-
- @SuppressWarnings("unused")
- private static final class VolumeToCreate
- {
- private final String method = "CreateVolume";
- private final VolumeToCreateParams params;
-
- private VolumeToCreate(final String strVolumeName, final long lAccountId, final long lTotalSize,
- final boolean bEnable512e, final long lMinIOPS, final long lMaxIOPS, final long lBurstIOPS)
- {
- params = new VolumeToCreateParams(strVolumeName, lAccountId, lTotalSize, bEnable512e,
- lMinIOPS, lMaxIOPS, lBurstIOPS);
- }
-
- private static final class VolumeToCreateParams
- {
- private final String name;
- private final long accountID;
- private final long totalSize;
- private final boolean enable512e;
- private final VolumeToCreateParamsQoS qos;
-
- private VolumeToCreateParams(final String strVolumeName, final long lAccountId, final long lTotalSize,
- final boolean bEnable512e, final long lMinIOPS, final long lMaxIOPS, final long lBurstIOPS)
- {
- name = strVolumeName;
- accountID = lAccountId;
- totalSize = lTotalSize;
- enable512e = bEnable512e;
-
- qos = new VolumeToCreateParamsQoS(lMinIOPS, lMaxIOPS, lBurstIOPS);
- }
-
- private static final class VolumeToCreateParamsQoS
- {
- private final long minIOPS;
- private final long maxIOPS;
- private final long burstIOPS;
-
- private VolumeToCreateParamsQoS(final long lMinIOPS, final long lMaxIOPS, final long lBurstIOPS)
- {
- minIOPS = lMinIOPS;
- maxIOPS = lMaxIOPS;
- burstIOPS = lBurstIOPS;
- }
- }
- }
- }
-
- @SuppressWarnings("unused")
- private static final class VolumeToDelete
- {
- private final String method = "DeleteVolume";
- private final VolumeToDeleteParams params;
-
- private VolumeToDelete(final long lVolumeId)
- {
- params = new VolumeToDeleteParams(lVolumeId);
- }
-
- private static final class VolumeToDeleteParams
- {
- private long volumeID;
-
- private VolumeToDeleteParams(final long lVolumeId)
- {
- volumeID = lVolumeId;
- }
- }
- }
+
+ public static long createSolidFireVag(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword, String strVagName)
+ {
+ final Gson gson = new GsonBuilder().create();
+
+ VagToCreate vagToCreate = new VagToCreate(strVagName);
+
+ String strVagCreateJson = gson.toJson(vagToCreate);
+
+ String strVagCreateResultJson = executeJsonRpc(strVagCreateJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
+
+ VagCreateResult vagCreateResult = gson.fromJson(strVagCreateResultJson, VagCreateResult.class);
+
+ verifyResult(vagCreateResult.result, strVagCreateResultJson, gson);
+
+ return vagCreateResult.result.volumeAccessGroupID;
+ }
+
+ public static void deleteSolidFireVag(String strSfMvip, int iSfPort, String strSfAdmin, String strSfPassword, long lVagId)
+ {
+ final Gson gson = new GsonBuilder().create();
+
+ VagToDelete vagToDelete = new VagToDelete(lVagId);
+
+ String strVagToDeleteJson = gson.toJson(vagToDelete);
+
+ executeJsonRpc(strVagToDeleteJson, strSfMvip, iSfPort, strSfAdmin, strSfPassword);
+ }
+
+ @SuppressWarnings("unused")
+ private static final class VolumeToCreate
+ {
+ private final String method = "CreateVolume";
+ private final VolumeToCreateParams params;
+
+ private VolumeToCreate(final String strVolumeName, final long lAccountId, final long lTotalSize,
+ final boolean bEnable512e, final long lMinIOPS, final long lMaxIOPS, final long lBurstIOPS)
+ {
+ params = new VolumeToCreateParams(strVolumeName, lAccountId, lTotalSize, bEnable512e,
+ lMinIOPS, lMaxIOPS, lBurstIOPS);
+ }
+
+ private static final class VolumeToCreateParams
+ {
+ private final String name;
+ private final long accountID;
+ private final long totalSize;
+ private final boolean enable512e;
+ private final VolumeToCreateParamsQoS qos;
+
+ private VolumeToCreateParams(final String strVolumeName, final long lAccountId, final long lTotalSize,
+ final boolean bEnable512e, final long lMinIOPS, final long lMaxIOPS, final long lBurstIOPS)
+ {
+ name = strVolumeName;
+ accountID = lAccountId;
+ totalSize = lTotalSize;
+ enable512e = bEnable512e;
+
+ qos = new VolumeToCreateParamsQoS(lMinIOPS, lMaxIOPS, lBurstIOPS);
+ }
+
+ private static final class VolumeToCreateParamsQoS
+ {
+ private final long minIOPS;
+ private final long maxIOPS;
+ private final long burstIOPS;
+
+ private VolumeToCreateParamsQoS(final long lMinIOPS, final long lMaxIOPS, final long lBurstIOPS)
+ {
+ minIOPS = lMinIOPS;
+ maxIOPS = lMaxIOPS;
+ burstIOPS = lBurstIOPS;
+ }
+ }
+ }
+ }
+
+ @SuppressWarnings("unused")
+ private static final class VolumeToDelete
+ {
+ private final String method = "DeleteVolume";
+ private final VolumeToDeleteParams params;
+
+ private VolumeToDelete(final long lVolumeId)
+ {
+ params = new VolumeToDeleteParams(lVolumeId);
+ }
+
+ private static final class VolumeToDeleteParams
+ {
+ private long volumeID;
+
+ private VolumeToDeleteParams(final long lVolumeId)
+ {
+ volumeID = lVolumeId;
+ }
+ }
+ }
@SuppressWarnings("unused")
private static final class ListDeletedVolumes
@@ -514,29 +528,29 @@ public class SolidFireUtil
}
}
- @SuppressWarnings("unused")
- private static final class VolumeToGet
- {
- private final String method = "ListActiveVolumes";
- private final VolumeToGetParams params;
-
- private VolumeToGet(final long lVolumeId)
- {
- params = new VolumeToGetParams(lVolumeId);
- }
-
- private static final class VolumeToGetParams
- {
- private final long startVolumeID;
- private final long limit = 1;
-
- private VolumeToGetParams(final long lVolumeId)
- {
- startVolumeID = lVolumeId;
- }
- }
- }
-
+ @SuppressWarnings("unused")
+ private static final class VolumeToGet
+ {
+ private final String method = "ListActiveVolumes";
+ private final VolumeToGetParams params;
+
+ private VolumeToGet(final long lVolumeId)
+ {
+ params = new VolumeToGetParams(lVolumeId);
+ }
+
+ private static final class VolumeToGetParams
+ {
+ private final long startVolumeID;
+ private final long limit = 1;
+
+ private VolumeToGetParams(final long lVolumeId)
+ {
+ startVolumeID = lVolumeId;
+ }
+ }
+ }
+
@SuppressWarnings("unused")
private static final class VolumesToGetForAccount
{
@@ -559,76 +573,76 @@ public class SolidFireUtil
}
}
- @SuppressWarnings("unused")
- private static final class AccountToAdd
- {
- private final String method = "AddAccount";
- private final AccountToAddParams params;
-
- private AccountToAdd(final String strAccountName)
- {
- params = new AccountToAddParams(strAccountName);
- }
-
- private static final class AccountToAddParams
- {
- private final String username;
-
- private AccountToAddParams(final String strAccountName)
- {
- username = strAccountName;
- }
- }
- }
-
- @SuppressWarnings("unused")
- private static final class AccountToRemove
- {
- private final String method = "RemoveAccount";
- private final AccountToRemoveParams params;
-
- private AccountToRemove(final long lAccountId)
- {
- params = new AccountToRemoveParams(lAccountId);
- }
-
- private static final class AccountToRemoveParams
- {
- private long accountID;
-
- private AccountToRemoveParams(final long lAccountId)
- {
- accountID = lAccountId;
- }
- }
- }
-
- @SuppressWarnings("unused")
- private static final class AccountToGetById
- {
- private final String method = "GetAccountByID";
- private final AccountToGetByIdParams params;
-
- private AccountToGetById(final long lAccountId)
- {
- params = new AccountToGetByIdParams(lAccountId);
- }
-
- private static final class AccountToGetByIdParams
- {
- private final long accountID;
-
- private AccountToGetByIdParams(final long lAccountId)
- {
- accountID = lAccountId;
- }
- }
- }
-
+ @SuppressWarnings("unused")
+ private static final class AccountToAdd
+ {
+ private final String method = "AddAccount";
+ private final AccountToAddParams params;
+
+ private AccountToAdd(final String strAccountName)
+ {
+ params = new AccountToAddParams(strAccountName);
+ }
+
+ private static final class AccountToAddParams
+ {
+ private final String username;
+
+ private AccountToAddParams(final String strAccountName)
+ {
+ username = strAccountName;
+ }
+ }
+ }
+
+ @SuppressWarnings("unused")
+ private static final class AccountToRemove
+ {
+ private final String method = "RemoveAccount";
+ private final AccountToRemoveParams params;
+
+ private AccountToRemove(final long lAccountId)
+ {
+ params = new AccountToRemoveParams(lAccountId);
+ }
+
+ private static final class AccountToRemoveParams
+ {
+ private long accountID;
+
+ private AccountToRemoveParams(final long lAccountId)
+ {
+ accountID = lAccountId;
+ }
+ }
+ }
+
+ @SuppressWarnings("unused")
+ private static final class AccountToGetById
+ {
+ private final String method = "GetAccountByID";
+ private final AccountToGetByIdParams params;
+
+ private AccountToGetById(final long lAccountId)
+ {
+ params = new AccountToGetByIdParams(lAccountId);
+ }
+
+ private static final class AccountToGetByIdParams
+ {
+ private final long accountID;
+
+ private AccountToGetByIdParams(final long lAccountId)
+ {
+ accountID = lAccountId;
+ }
+ }
+ }
+
@SuppressWarnings("unused")
private static final class AccountToGetByName
{
- private final String method = "GetAccountName";
+ private final String method = "GetAccountByName";
private final AccountToGetByNameParams params;
private AccountToGetByName(final String strUsername)
@@ -647,251 +661,271 @@ public class SolidFireUtil
}
}
- @SuppressWarnings("unused")
- private static final class VagToCreate
- {
- private final String method = "CreateVolumeAccessGroup";
- private final VagToCreateParams params;
-
- private VagToCreate(final String strVagName)
- {
- params = new VagToCreateParams(strVagName);
- }
-
- private static final class VagToCreateParams
- {
- private final String name;
-
- private VagToCreateParams(final String strVagName)
- {
- name = strVagName;
- }
- }
- }
-
- @SuppressWarnings("unused")
- private static final class VagToDelete
- {
- private final String method = "DeleteVolumeAccessGroup";
- private final VagToDeleteParams params;
-
- private VagToDelete(final long lVagId)
- {
- params = new VagToDeleteParams(lVagId);
- }
-
- private static final class VagToDeleteParams
- {
- private long volumeAccessGroupID;
-
- private VagToDeleteParams(final long lVagId)
- {
- volumeAccessGroupID = lVagId;
- }
- }
- }
-
- private static final class VolumeCreateResult
- {
- private Result result;
-
- private static final class Result
- {
- private long volumeID;
- }
- }
-
- private static final class VolumeGetResult
- {
- private Result result;
-
- private static final class Result
- {
- private Volume[] volumes;
-
- private static final class Volume
- {
- private long volumeID;
- private String name;
- private String iqn;
- private long accountID;
- private String status;
- }
- }
- }
-
- private static final class AccountAddResult
- {
- private Result result;
-
- private static final class Result
- {
- private long accountID;
- }
- }
-
- private static final class AccountGetResult
- {
- private Result result;
-
- private static final class Result
- {
- private Account account;
-
- private static final class Account
- {
- private long accountID;
- private String username;
- private String initiatorSecret;
- private String targetSecret;
- }
- }
- }
-
- private static final class VagCreateResult
- {
- private Result result;
-
- private static final class Result
- {
- private long volumeAccessGroupID;
- }
- }
-
- private static final class JsonError
- {
- private Error error;
-
- private static final class Error
- {
- private String message;
- }
- }
-
- private static DefaultHttpClient getHttpClient(int iPort) throws NoSuchAlgorithmException, KeyManagementException {
- SSLContext sslContext = SSLContext.getInstance("SSL");
- X509TrustManager tm = new X509TrustManager() {
- public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException {
+ @SuppressWarnings("unused")
+ private static final class VagToCreate
+ {
+ private final String method = "CreateVolumeAccessGroup";
+ private final VagToCreateParams params;
+
+ private VagToCreate(final String strVagName)
+ {
+ params = new VagToCreateParams(strVagName);
+ }
+
+ private static final class VagToCreateParams
+ {
+ private final String name;
+
+ private VagToCreateParams(final String strVagName)
+ {
+ name = strVagName;
}
+ }
+ }
+
+ @SuppressWarnings("unused")
+ private static final class VagToDelete
+ {
+ private final String method = "DeleteVolumeAccessGroup";
+ private final VagToDeleteParams params;
- public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException {
+ private VagToDelete(final long lVagId)
+ {
+ params = new VagToDeleteParams(lVagId);
+ }
+
+ private static final class VagToDeleteParams
+ {
+ private long volumeAccessGroupID;
+
+ private VagToDeleteParams(final long lVagId)
+ {
+ volumeAccessGroupID = lVagId;
}
+ }
+ }
+
+ private static final class VolumeCreateResult
+ {
+ private Result result;
- public X509Certificate[] getAcceptedIssuers() {
- return null;
+ private static final class Result
+ {
+ private long volumeID;
+ }
+ }
+
+ private static final class VolumeGetResult
+ {
+ private Result result;
+
+ private static final class Result
+ {
+ private Volume[] volumes;
+
+ private static final class Volume
+ {
+ private long volumeID;
+ private String name;
+ private String iqn;
+ private long accountID;
+ private String status;
}
- };
-
- sslContext.init(null, new TrustManager[] { tm }, new SecureRandom());
-
- SSLSocketFactory socketFactory = new SSLSocketFactory(sslContext, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
- SchemeRegistry registry = new SchemeRegistry();
-
- registry.register(new Scheme("https", iPort, socketFactory));
-
- BasicClientConnectionManager mgr = new BasicClientConnectionManager(registry);
- DefaultHttpClient client = new DefaultHttpClient();
-
- return new DefaultHttpClient(mgr, client.getParams());
- }
-
- private static String executeJsonRpc(String strJsonToExecute, String strMvip, int iPort,
- String strAdmin, String strPassword) throws Exception
- {
- DefaultHttpClient httpClient = null;
- StringBuilder sb = new StringBuilder();
-
- try
- {
- StringEntity input = new StringEntity(strJsonToExecute);
-
- input.setContentType("application/json");
-
- httpClient = getHttpClient(iPort);
-
- URI uri = new URI("https://" + strMvip + ":" + iPort + "/json-rpc/1.0");
- AuthScope authScope = new AuthScope(uri.getHost(), uri.getPort(), AuthScope.ANY_SCHEME);
- UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(strAdmin, strPassword);
-
- httpClient.getCredentialsProvider().setCredentials(authScope, credentials);
-
- HttpPost postRequest = new HttpPost(uri);
-
- postRequest.setEntity(input);
-
- HttpResponse response = httpClient.execute(postRequest);
-
- if (!isSuccess(response.getStatusLine().getStatusCode()))
- {
- throw new RuntimeException("Failed on JSON-RPC API call. HTTP error code = " + response.getStatusLine().getStatusCode());
- }
-
- BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
-
- String strOutput;
-
-
- while ((strOutput = br.readLine()) != null)
- {
- sb.append(strOutput);
- }
- } finally {
- if (httpClient != null) {
- try {
- httpClient.getConnectionManager().shutdown();
- } catch (Throwable t) {}
- }
- }
-
- return sb.toString();
- }
-
- private static boolean isSuccess(int iCode) {
- return iCode >= 200 && iCode < 300;
- }
-
- private static void verifyResult(Object obj, String strJson, Gson gson) throws IllegalStateException
- {
- if (obj != null)
- {
- return;
- }
-
- JsonError jsonError = gson.fromJson(strJson, JsonError.class);
-
- if (jsonError != null)
- {
- throw new IllegalStateException(jsonError.error.message);
- }
-
- throw new IllegalStateException("Problem with the following JSON: " + strJson);
- }
-
- private static String getVolumeName(VolumeGetResult volumeGetResult, long lVolumeId) throws Exception
- {
- if (volumeGetResult.result.volumes != null && volumeGetResult.result.volumes.length == 1 &&
- volumeGetResult.result.volumes[0].volumeID == lVolumeId)
- {
- return volumeGetResult.result.volumes[0].name;
- }
-
- throw new Exception("Could not determine the name of the volume, " +
- "but the volume was created with an ID of " + lVolumeId + ".");
- }
-
- private static String getVolumeIqn(VolumeGetResult volumeGetResult, long lVolumeId) throws Exception
- {
- if (volumeGetResult.result.volumes != null && volumeGetResult.result.volumes.length == 1 &&
- volumeGetResult.result.volumes[0].volumeID == lVolumeId)
- {
- return volumeGetResult.result.volumes[0].iqn;
- }
-
- throw new Exception("Could not determine the IQN of the volume, " +
- "but the volume was created with an ID of " + lVolumeId + ".");
- }
+ }
+ }
+
+ private static final class AccountAddResult
+ {
+ private Result result;
+
+ private static final class Result
+ {
+ private long accountID;
+ }
+ }
+
+ private static final class AccountGetResult
+ {
+ private Result result;
+
+ private static final class Result
+ {
+ private Account account;
+
+ private static final class Account
+ {
+ private long accountID;
+ private String username;
+ private String initiatorSecret;
+ private String targetSecret;
+ }
+ }
+ }
+
+ private static final class VagCreateResult
+ {
+ private Result result;
+
+ private static final class Result
+ {
+ private long volumeAccessGroupID;
+ }
+ }
+
+ private static final class JsonError
+ {
+ private Error error;
+
+ private static final class Error
+ {
+ private String message;
+ }
+ }
+
+ private static DefaultHttpClient getHttpClient(int iPort) {
+ try {
+ SSLContext sslContext = SSLContext.getInstance("SSL");
+ X509TrustManager tm = new X509TrustManager() {
+ public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException {
+ }
+
+ public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException {
+ }
+
+ public X509Certificate[] getAcceptedIssuers() {
+ return null;
+ }
+ };
+
+ sslContext.init(null, new TrustManager[] { tm }, new SecureRandom());
+
+ SSLSocketFactory socketFactory = new SSLSocketFactory(sslContext, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
+ SchemeRegistry registry = new SchemeRegistry();
+
+ registry.register(new Scheme("https", iPort, socketFactory));
+
+ BasicClientConnectionManager mgr = new BasicClientConnectionManager(registry);
+ DefaultHttpClient client = new DefaultHttpClient();
+
+ return new DefaultHttpClient(mgr, client.getParams());
+ }
+ catch (NoSuchAlgorithmException ex) {
+ throw new CloudRuntimeException(ex.getMessage());
+ }
+ catch (KeyManagementException ex) {
+ throw new CloudRuntimeException(ex.getMessage());
+ }
+ }
+
+ private static String executeJsonRpc(String strJsonToExecute, String strMvip, int iPort,
+ String strAdmin, String strPassword)
+ {
+ DefaultHttpClient httpClient = null;
+ StringBuilder sb = new StringBuilder();
+
+ try
+ {
+ StringEntity input = new StringEntity(strJsonToExecute);
+
+ input.setContentType("application/json");
+
+ httpClient = getHttpClient(iPort);
+
+ URI uri = new URI("https://" + strMvip + ":" + iPort + "/json-rpc/1.0");
+ AuthScope authScope = new AuthScope(uri.getHost(), uri.getPort(), AuthScope.ANY_SCHEME);
+ UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(strAdmin, strPassword);
+
+ httpClient.getCredentialsProvider().setCredentials(authScope, credentials);
+
+ HttpPost postRequest = new HttpPost(uri);
+
+ postRequest.setEntity(input);
+
+ HttpResponse response = httpClient.execute(postRequest);
+
+ if (!isSuccess(response.getStatusLine().getStatusCode()))
+ {
+ throw new CloudRuntimeException("Failed on JSON-RPC API call. HTTP error code = " + response.getStatusLine().getStatusCode());
+ }
+
+ BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
+
+ String strOutput;
+
+ while ((strOutput = br.readLine()) != null)
+ {
+ sb.append(strOutput);
+ }
+ }
+ catch (UnsupportedEncodingException ex) {
+ throw new CloudRuntimeException(ex.getMessage());
+ }
+ catch (ClientProtocolException ex) {
+ throw new CloudRuntimeException(ex.getMessage());
+ }
+ catch (IOException ex) {
+ throw new CloudRuntimeException(ex.getMessage());
+ }
+ catch (URISyntaxException ex) {
+ throw new CloudRuntimeException(ex.getMessage());
+ }
+ finally {
+ if (httpClient != null) {
+ try {
+ httpClient.getConnectionManager().shutdown();
+ } catch (Exception t) {}
+ }
+ }
+
+ return sb.toString();
+ }
+
+ private static boolean isSuccess(int iCode) {
+ return iCode >= 200 && iCode < 300;
+ }
+
+ private static void verifyResult(Object obj, String strJson, Gson gson) throws IllegalStateException
+ {
+ if (obj != null)
+ {
+ return;
+ }
+
+ JsonError jsonError = gson.fromJson(strJson, JsonError.class);
+
+ if (jsonError != null)
+ {
+ throw new IllegalStateException(jsonError.error.message);
+ }
+
+ throw new IllegalStateException("Problem with the following JSON: " + strJson);
+ }
+
+ private static String getVolumeName(VolumeGetResult volumeGetResult, long lVolumeId)
+ {
+ if (volumeGetResult.result.volumes != null && volumeGetResult.result.volumes.length == 1 &&
+ volumeGetResult.result.volumes[0].volumeID == lVolumeId)
+ {
+ return volumeGetResult.result.volumes[0].name;
+ }
+
+ throw new CloudRuntimeException("Could not determine the name of the volume, " +
+ "but the volume was created with an ID of " + lVolumeId + ".");
+ }
+
+ private static String getVolumeIqn(VolumeGetResult volumeGetResult, long lVolumeId)
+ {
+ if (volumeGetResult.result.volumes != null && volumeGetResult.result.volumes.length == 1 &&
+ volumeGetResult.result.volumes[0].volumeID == lVolumeId)
+ {
+ return volumeGetResult.result.volumes[0].iqn;
+ }
+
+ throw new CloudRuntimeException("Could not determine the IQN of the volume, " +
+ "but the volume was created with an ID of " + lVolumeId + ".");
+ }
- private static long getVolumeAccountId(VolumeGetResult volumeGetResult, long lVolumeId) throws Exception
+ private static long getVolumeAccountId(VolumeGetResult volumeGetResult, long lVolumeId)
{
if (volumeGetResult.result.volumes != null && volumeGetResult.result.volumes.length == 1 &&
volumeGetResult.result.volumes[0].volumeID == lVolumeId)
@@ -899,11 +933,11 @@ public class SolidFireUtil
return volumeGetResult.result.volumes[0].accountID;
}
- throw new Exception("Could not determine the volume's account ID, " +
+ throw new CloudRuntimeException("Could not determine the volume's account ID, " +
"but the volume was created with an ID of " + lVolumeId + ".");
}
- private static String getVolumeStatus(VolumeGetResult volumeGetResult, long lVolumeId) throws Exception
+ private static String getVolumeStatus(VolumeGetResult volumeGetResult, long lVolumeId)
{
if (volumeGetResult.result.volumes != null && volumeGetResult.result.volumes.length == 1 &&
volumeGetResult.result.volumes[0].volumeID == lVolumeId)
@@ -911,7 +945,7 @@ public class SolidFireUtil
return volumeGetResult.result.volumes[0].status;
}
- throw new Exception("Could not determine the status of the volume, " +
+ throw new CloudRuntimeException("Could not determine the status of the volume, " +
"but the volume was created with an ID of " + lVolumeId + ".");
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/06f73092/server/src/com/cloud/storage/VolumeManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeManagerImpl.java b/server/src/com/cloud/storage/VolumeManagerImpl.java
index 4b76dff..c2678fc 100644
--- a/server/src/com/cloud/storage/VolumeManagerImpl.java
+++ b/server/src/com/cloud/storage/VolumeManagerImpl.java
@@ -740,7 +740,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
txn.start();
VolumeVO volume = new VolumeVO(volumeName, zoneId, -1, -1, -1,
- new Long(-1), null, null, 0, null, null, null, Volume.Type.DATADISK);
+ new Long(-1), null, null, 0, Volume.Type.DATADISK);
volume.setPoolId(null);
volume.setDataCenterId(zoneId);
volume.setPodId(null);
@@ -1012,7 +1012,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
txn.start();
VolumeVO volume = new VolumeVO(userSpecifiedName, -1, -1, -1, -1,
- new Long(-1), null, null, 0, null, null, null, Volume.Type.DATADISK);
+ new Long(-1), null, null, 0, Volume.Type.DATADISK);
volume.setPoolId(null);
volume.setDataCenterId(zoneId);
volume.setPodId(null);