Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -412,13 +412,14 @@ private String resizeVolume(DataObject data, String path, VolumeObject vol) {
if (err == null && needResize) {
err = notifyQemuForTheNewSize(data, err, vol, payload);
}

if (err != null) {
// try restoring volume to its initial size
SpApiResponse response = StorPoolUtil.volumeUpdate(name, oldSize, true, oldMaxIops, conn);
if (response.getError() != null) {
logger.debug(String.format("Could not resize StorPool volume %s back to its original size. Error: %s", name, response.getError()));
}
} else {
updateVolumeWithTheNewSize(vol, payload);
}
} catch (Exception e) {
logger.debug("sending resize command failed", e);
Expand All @@ -427,6 +428,17 @@ private String resizeVolume(DataObject data, String path, VolumeObject vol) {
return err;
}

private void updateVolumeWithTheNewSize(VolumeObject vol, ResizeVolumePayload payload) {
vol.setSize(payload.newSize);
vol.update();
if (payload.newMaxIops != null) {
VolumeVO volume = volumeDao.findById(vol.getId());
volume.setMaxIops(payload.newMaxIops);
volumeDao.update(volume.getId(), volume);
}
updateStoragePool(vol.getPoolId(), payload.newSize - vol.getSize());
}

private String notifyQemuForTheNewSize(DataObject data, String err, VolumeObject vol, ResizeVolumePayload payload)
throws StorageUnavailableException {
StoragePool pool = (StoragePool)data.getDataStore();
Expand Down Expand Up @@ -455,37 +467,34 @@ private String updateStorPoolVolume(VolumeObject vol, ResizeVolumePayload payloa
}
SpApiResponse resp = new SpApiResponse();
if (tier != null || template != null) {
Map<String, String> tags = StorPoolHelper.addStorPoolTags(null, null, null, null, tier);
StorPoolVolumeDef spVolume = new StorPoolVolumeDef(name, payload.newSize, tags, null, null, template, null, null,
payload.shrinkOk);
resp = StorPoolUtil.volumeUpdate(spVolume, conn);
resp = updateVolumeByStorPoolQoS(payload, conn, name, tier, template);
} else {
long maxIops = payload.newMaxIops == null ? Long.valueOf(0) : payload.newMaxIops;

StorPoolVolumeDef spVolume = new StorPoolVolumeDef(name, payload.newSize, null, null, maxIops, null, null, null,
payload.shrinkOk);
StorPoolUtil.spLog(
"StorpoolPrimaryDataStoreDriverImpl.resize: name=%s, uuid=%s, oldSize=%d, newSize=%s, shrinkOk=%s, maxIops=%s",
name, vol.getUuid(), vol.getSize(), payload.newSize, payload.shrinkOk, maxIops);

resp = StorPoolUtil.volumeUpdate(spVolume, conn);
resp = updateVolumeByOffering(vol, payload, conn, name);
}
if (resp.getError() != null) {
err = String.format("Could not resize StorPool volume %s. Error: %s", name, resp.getError());
} else {
vol.setSize(payload.newSize);
vol.update();
if (payload.newMaxIops != null) {
VolumeVO volume = volumeDao.findById(vol.getId());
volume.setMaxIops(payload.newMaxIops);
volumeDao.update(volume.getId(), volume);
}

updateStoragePool(vol.getPoolId(), payload.newSize - vol.getSize());
}
return err;
}

private static SpApiResponse updateVolumeByStorPoolQoS(ResizeVolumePayload payload, SpConnectionDesc conn, String name, String tier, String template) {
Map<String, String> tags = StorPoolHelper.addStorPoolTags(null, null, null, null, tier);
StorPoolVolumeDef spVolume = new StorPoolVolumeDef(name, payload.newSize, tags, null, null, template, null, null,
payload.shrinkOk);
return StorPoolUtil.volumeUpdate(spVolume, conn);
}

private static SpApiResponse updateVolumeByOffering(VolumeObject vol, ResizeVolumePayload payload, SpConnectionDesc conn, String name) {
long maxIops = payload.newMaxIops == null ? Long.valueOf(0) : payload.newMaxIops;

StorPoolVolumeDef spVolume = new StorPoolVolumeDef(name, payload.newSize, null, null, maxIops, null, null, null,
payload.shrinkOk);
StorPoolUtil.spLog(
"StorpoolPrimaryDataStoreDriverImpl.resize: name=%s, uuid=%s, oldSize=%d, newSize=%s, shrinkOk=%s, maxIops=%s",
name, vol.getUuid(), vol.getSize(), payload.newSize, payload.shrinkOk, maxIops);
return StorPoolUtil.volumeUpdate(spVolume, conn);
}

@Override
public void deleteAsync(DataStore dataStore, DataObject data, AsyncCompletionCallback<CommandResult> callback) {
String err = null;
Expand Down
Loading