Daniel Erez has uploaded a new change for review.

Change subject: core: adding ExtendCinderDisk command and callback
......................................................................

core: adding ExtendCinderDisk command and callback

Introducing ExtendCinderDiskCommand and
ExtendCinderDiskCommandCallback.

Change-Id: I03e0b6993d52f27f6241aeb7ad9a8b01326883d0
Bug-Url: https://bugzilla.redhat.com/1185826
Signed-off-by: Daniel Erez <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendCinderDiskCommand.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendCinderDiskCommandCallback.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
3 files changed, 155 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/99/39199/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendCinderDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendCinderDiskCommand.java
new file mode 100644
index 0000000..0476819
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendCinderDiskCommand.java
@@ -0,0 +1,72 @@
+package org.ovirt.engine.core.bll.storage;
+
+import org.ovirt.engine.core.bll.InternalCommandAttribute;
+import org.ovirt.engine.core.bll.UpdateVmDiskCommand;
+import org.ovirt.engine.core.bll.context.CommandContext;
+import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallback;
+import org.ovirt.engine.core.common.action.UpdateVmDiskParameters;
+import org.ovirt.engine.core.common.businessentities.storage.CinderDisk;
+import org.ovirt.engine.core.common.utils.Pair;
+import org.ovirt.engine.core.compat.Guid;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Collections;
+import java.util.Map;
+
+@InternalCommandAttribute
+public class ExtendCinderDiskCommand<T extends UpdateVmDiskParameters> extends 
UpdateVmDiskCommand<T> {
+
+    private static final Logger log = 
LoggerFactory.getLogger(ExtendCinderDiskCommand.class);
+
+    public ExtendCinderDiskCommand(T parameters) {
+        super(parameters);
+    }
+
+    public ExtendCinderDiskCommand(T parameters, CommandContext 
commandContext) {
+        super(parameters);
+    }
+
+    @Override
+    public void executeCommand() {
+        CinderDisk cinderDisk = (CinderDisk) getNewDisk();
+        getCinderBroker().extendDisk(cinderDisk, (int) getNewDiskSizeInGB());
+
+        persistCommand(getParameters().getParentCommand(), true);
+        getReturnValue().setActionReturnValue(cinderDisk.getId());
+        setSucceeded(true);
+    }
+
+    protected void performDiskUpdate() {
+        CinderDisk cinderDisk = (CinderDisk) getNewDisk();
+        getImageDao().updateImageSize(cinderDisk.getImageId(), 
cinderDisk.getSize());
+        performDiskUpdate(true);
+    }
+
+    @Override
+    public CommandCallback getCallback() {
+        return new ExtendCinderDiskCommandCallback();
+    }
+
+    @Override
+    public boolean canDoAction() {
+        return true;
+    }
+
+    @Override
+    protected Map<String, Pair<String, String>> getExclusiveLocks() {
+        return Collections.emptyMap();
+    }
+
+    @Override
+    protected Map<String, Pair<String, String>> getSharedLocks() {
+        return Collections.emptyMap();
+    }
+
+    @Override
+    public Guid getStorageDomainId() {
+        CinderDisk cinderDisk = (CinderDisk) getNewDisk();
+        return cinderDisk.getStorageIds().get(0);
+    }
+
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendCinderDiskCommandCallback.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendCinderDiskCommandCallback.java
new file mode 100644
index 0000000..f29dd03
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ExtendCinderDiskCommandCallback.java
@@ -0,0 +1,82 @@
+package org.ovirt.engine.core.bll.storage;
+
+import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil;
+import org.ovirt.engine.core.common.AuditLogType;
+import org.ovirt.engine.core.common.action.UpdateVmDiskParameters;
+import org.ovirt.engine.core.common.businessentities.storage.CinderDisk;
+import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
+import org.ovirt.engine.core.common.businessentities.storage.ImageStatus;
+import org.ovirt.engine.core.compat.CommandStatus;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
+
+import java.util.List;
+
+public class ExtendCinderDiskCommandCallback extends 
AbstractCinderDiskCommandCallback<ExtendCinderDiskCommand<UpdateVmDiskParameters>>
 {
+
+    @Override
+    public void doPolling(Guid cmdId, List<Guid> childCmdIds) {
+        super.doPolling(cmdId, childCmdIds);
+
+        ImageStatus imageStatus = getCinderBroker().getDiskStatus(getDiskId());
+        DiskImage disk = getDisk();
+        if (imageStatus != null && imageStatus != disk.getImageStatus()) {
+            switch (imageStatus) {
+                case OK:
+                    getCommand().setCommandStatus(CommandStatus.SUCCEEDED);
+                    break;
+                case ILLEGAL:
+                    getCommand().setCommandStatus(CommandStatus.FAILED);
+                    break;
+            }
+        }
+    }
+
+    @Override
+    public void onFailed(Guid cmdId, List<Guid> childCmdIds) {
+        super.onFailed(cmdId, childCmdIds);
+
+        getCommand().unlockImageInDb();
+        log.error("Failed extending disk. ID: {}", getDiskId());
+        updateAuditLog(AuditLogType.USER_EXTEND_DISK_SIZE_FAILURE, 
getCommand().getNewDiskSizeInGB());
+
+        getCommand().endAction();
+        CommandCoordinatorUtil.removeAllCommandsInHierarchy(cmdId);
+    }
+
+    @Override
+    public void onSucceeded(Guid cmdId, List<Guid> childCmdIds) {
+        super.onSucceeded(cmdId, childCmdIds);
+
+        getCommand().performDiskUpdate();
+        log.error("Disk has been successfully extended. ID: {}", getDiskId());
+        updateAuditLog(AuditLogType.USER_EXTEND_DISK_SIZE_SUCCESS, 
getCommand().getNewDiskSizeInGB());
+
+        getCommand().endAction();
+        CommandCoordinatorUtil.removeAllCommandsInHierarchy(cmdId);
+    }
+
+    private void updateAuditLog(AuditLogType auditLogType, Long 
imageSizeInGigabytes) {
+        getCommand().addCustomValue("DiskAlias", getDisk().getDiskAlias());
+        getCommand().addCustomValue("NewSize", 
String.valueOf(imageSizeInGigabytes));
+        new AuditLogDirector().log(getCommand(), auditLogType);
+    }
+
+    @Override
+    protected Guid getDiskId() {
+        return getCommand().getParameters().getDiskId();
+    }
+
+    @Override
+    protected CinderDisk getDisk() {
+        if (disk == null) {
+            disk = (CinderDisk) getCommand().getDiskDao().get(getDiskId());
+        }
+        return disk;
+    }
+
+    @Override
+    protected CinderBroker getCinderBroker() {
+        return getCommand().getCinderBroker();
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
index b71fdaf..c52954a 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
@@ -427,6 +427,7 @@
     // Cinder
     AddCinderDisk(3200, ActionGroup.CONFIGURE_VM_STORAGE, false, 
QuotaDependency.NONE),
     RemoveCinderDisk(3201, QuotaDependency.STORAGE),
+    ExtendCinderDisk(3202, ActionGroup.CONFIGURE_VM_STORAGE, false, 
QuotaDependency.NONE),
 
     // Host Devices
     RefreshHostDevices(4000, ActionGroup.MANIPULATE_HOST, false, 
QuotaDependency.NONE);


-- 
To view, visit https://gerrit.ovirt.org/39199
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I03e0b6993d52f27f6241aeb7ad9a8b01326883d0
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Daniel Erez <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to