Skip to content
Merged
Changes from 2 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,39 @@ 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) {
SpApiResponse resp;
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);
return resp;
}

private static SpApiResponse updateVolumeByOffering(VolumeObject vol, ResizeVolumePayload payload, SpConnectionDesc conn, String name) {
SpApiResponse resp;
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);
return resp;
}

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