Maor Lipchuk has uploaded a new change for review.

Change subject: core: Use coco for add cinder disk command
......................................................................

core: Use coco for add cinder disk command

Adding a new command for add Cinder disk and use the coco infrastructure
to create a new Disk

Change-Id: I087453ddfae71b8ee94a248f1456faf8c9ed9ede
Signed-off-by: Maor Lipchuk <mlipc...@redhat.com>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddCinderDiskCommand.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddCinderDiskCommandCallback.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
4 files changed, 138 insertions(+), 56 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/45/36345/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddCinderDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddCinderDiskCommand.java
new file mode 100644
index 0000000..2b1fa22
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddCinderDiskCommand.java
@@ -0,0 +1,103 @@
+package org.ovirt.engine.core.bll;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+import org.ovirt.engine.core.bll.context.CommandContext;
+import org.ovirt.engine.core.bll.provider.storage.OpenStackVolumeProviderProxy;
+import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallBack;
+import org.ovirt.engine.core.bll.utils.PermissionSubject;
+import org.ovirt.engine.core.bll.utils.VmDeviceUtils;
+import org.ovirt.engine.core.common.VdcObjectType;
+import org.ovirt.engine.core.common.action.AddDiskParameters;
+import org.ovirt.engine.core.common.businessentities.CinderDisk;
+import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType;
+import org.ovirt.engine.core.common.businessentities.VmDeviceId;
+import org.ovirt.engine.core.common.businessentities.VolumeFormat;
+import org.ovirt.engine.core.common.businessentities.VolumeType;
+import org.ovirt.engine.core.common.businessentities.image_storage_domain_map;
+import org.ovirt.engine.core.common.utils.VmDeviceType;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.utils.transaction.TransactionMethod;
+import org.ovirt.engine.core.utils.transaction.TransactionSupport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@InternalCommandAttribute
+public class AddCinderDiskCommand<T extends AddDiskParameters> extends 
AddDiskCommand<T> {
+
+    private static final Logger log = 
LoggerFactory.getLogger(MergeCommand.class);
+
+    public AddCinderDiskCommand(T parameters) {
+        super(parameters);
+    }
+
+    public AddCinderDiskCommand(T parameters, CommandContext cmdContext) {
+        super(parameters, cmdContext);
+    }
+
+    @Override
+    public void executeCommand() {
+        OpenStackVolumeProviderProxy proxy = getVolumeProviderProxy();
+
+        final CinderDisk cinderDisk = new CinderDisk();
+        cinderDisk.setDiskAlias(getDiskAlias());
+        cinderDisk.setSize(getParameters().getDiskInfo().getSize());
+
+        String newVolumeId = proxy.createVolumeFromDiskImage(cinderDisk);
+        cinderDisk.setId(Guid.createGuidFromString(newVolumeId));
+        cinderDisk.setImageId(Guid.createGuidFromString(newVolumeId));
+        cinderDisk.setBoot(getParameters().getDiskInfo().isBoot());
+        
cinderDisk.setDiskInterface(getParameters().getDiskInfo().getDiskInterface());
+        cinderDisk.setDiskAlias(getParameters().getDiskInfo().getDiskAlias());
+        
cinderDisk.setDiskDescription(getParameters().getDiskInfo().getDiskDescription());
+        cinderDisk.setShareable(getParameters().getDiskInfo().isShareable());
+        cinderDisk.setStorageIds(new 
ArrayList<>(Arrays.asList(getParameters().getStorageDomainId())));
+        cinderDisk.setSize(getParameters().getDiskInfo().getSize());
+        cinderDisk.setVolumeType(VolumeType.Unassigned);
+        cinderDisk.setvolumeFormat(VolumeFormat.RAW);
+        cinderDisk.setCreationDate(new Date());
+        cinderDisk.setLastModified(new Date());
+        cinderDisk.setActive(true);
+        // cinderDisk.setImageStatus(ImageStatus.LOCKED);
+        // cinderDisk.setVmSnapshotId(getParameters().getVmSnapshotId());
+
+        TransactionSupport.executeInNewTransaction(new 
TransactionMethod<Void>() {
+            @Override
+            public Void runInTransaction() {
+                getBaseDiskDao().save(cinderDisk);
+                getImageDao().save(cinderDisk.getImage());
+                getImageStorageDomainMapDao().save(new 
image_storage_domain_map(cinderDisk.getImageId(),
+                        cinderDisk.getStorageIds().get(0), 
cinderDisk.getQuotaId(), cinderDisk.getDiskProfileId()));
+
+                if (getVm() != null) {
+                    VmDeviceUtils.addManagedDevice(new 
VmDeviceId(cinderDisk.getId(), getVmId()),
+                            VmDeviceGeneralType.DISK,
+                            VmDeviceType.DISK,
+                            null,
+                            shouldDiskBePlugged(),
+                            Boolean.TRUE.equals(cinderDisk.getReadOnly()),
+                            null);
+                }
+                return null;
+            }
+        });
+        getReturnValue().setActionReturnValue(cinderDisk.getId());
+        plugDiskToVmIfNeeded();
+    }
+
+    @Override
+    public List<PermissionSubject> getPermissionCheckSubjects() {
+        return Collections.singletonList(new 
PermissionSubject(getParameters().getStorageDomainId(),
+                VdcObjectType.Storage,
+                getActionType().getActionGroup()));
+    }
+
+    @Override
+    public CommandCallBack getCallBack() {
+        return new AddCinderDiskCommandCallback();
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddCinderDiskCommandCallback.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddCinderDiskCommandCallback.java
new file mode 100644
index 0000000..6d56e22
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddCinderDiskCommandCallback.java
@@ -0,0 +1,24 @@
+package org.ovirt.engine.core.bll;
+
+import java.util.List;
+
+import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil;
+import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallBack;
+import org.ovirt.engine.core.common.action.AddDiskParameters;
+import org.ovirt.engine.core.compat.Guid;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AddCinderDiskCommandCallback extends CommandCallBack {
+    private static final Logger log = 
LoggerFactory.getLogger(MergeCommandCallback.class);
+
+    @Override
+    public void doPolling(Guid cmdId, List<Guid> childCmdIds) {
+        Integer shtut = new Integer(5);
+        shtut.intValue();
+    }
+
+    private AddCinderDiskCommand<AddDiskParameters> getCommand(Guid cmdId) {
+        return (AddCinderDiskCommand<AddDiskParameters>) 
CommandCoordinatorUtil.retrieveCommand(cmdId);
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
index be10303..4b59e99 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
@@ -1,21 +1,19 @@
 package org.ovirt.engine.core.bll;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
-import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.bll.context.CommandContext;
 import org.ovirt.engine.core.bll.profiles.DiskProfileHelper;
-import org.ovirt.engine.core.bll.provider.storage.OpenStackVolumeProviderProxy;
 import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter;
 import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter;
 import org.ovirt.engine.core.bll.quota.QuotaStorageDependent;
 import org.ovirt.engine.core.bll.storage.StorageDomainCommandBase;
 import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
+import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.utils.VmDeviceUtils;
 import org.ovirt.engine.core.bll.validator.DiskValidator;
@@ -29,7 +27,6 @@
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
 import org.ovirt.engine.core.common.asynctasks.EntityInfo;
 import org.ovirt.engine.core.common.businessentities.ActionGroup;
-import org.ovirt.engine.core.common.businessentities.CinderDisk;
 import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
@@ -47,9 +44,6 @@
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType;
 import org.ovirt.engine.core.common.businessentities.VmDeviceId;
-import org.ovirt.engine.core.common.businessentities.VolumeFormat;
-import org.ovirt.engine.core.common.businessentities.VolumeType;
-import org.ovirt.engine.core.common.businessentities.image_storage_domain_map;
 import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
@@ -411,7 +405,7 @@
         setSucceeded(true);
     }
 
-    private boolean shouldDiskBePlugged() {
+    protected boolean shouldDiskBePlugged() {
         return getVm().getStatus() == VMStatus.Down && 
!Boolean.FALSE.equals(getParameters().getPlugDiskToVm());
     }
 
@@ -475,52 +469,10 @@
     }
 
     private void createDiskBasedOnCinder() {
-        OpenStackVolumeProviderProxy proxy = getVolumeProviderProxy();
-
-        final CinderDisk cinderDisk = new CinderDisk();
-        cinderDisk.setDiskAlias(getDiskAlias());
-        cinderDisk.setSize(getParameters().getDiskInfo().getSize());
-
-        String newVolumeId = proxy.createVolumeFromDiskImage(cinderDisk);
-        cinderDisk.setId(Guid.createGuidFromString(newVolumeId));
-        cinderDisk.setImageId(Guid.createGuidFromString(newVolumeId));
-        cinderDisk.setBoot(getParameters().getDiskInfo().isBoot());
-        
cinderDisk.setDiskInterface(getParameters().getDiskInfo().getDiskInterface());
-        cinderDisk.setDiskAlias(getParameters().getDiskInfo().getDiskAlias());
-        
cinderDisk.setDiskDescription(getParameters().getDiskInfo().getDiskDescription());
-        cinderDisk.setShareable(getParameters().getDiskInfo().isShareable());
-        cinderDisk.setStorageIds(new 
ArrayList<>(Arrays.asList(getParameters().getStorageDomainId())));
-        cinderDisk.setSize(getParameters().getDiskInfo().getSize());
-        cinderDisk.setVolumeType(VolumeType.Unassigned);
-        cinderDisk.setvolumeFormat(VolumeFormat.RAW);
-        cinderDisk.setCreationDate(new Date());
-        cinderDisk.setLastModified(new Date());
-        cinderDisk.setActive(true);
-        //cinderDisk.setImageStatus(ImageStatus.LOCKED);
-        //cinderDisk.setVmSnapshotId(getParameters().getVmSnapshotId());
-
-        TransactionSupport.executeInNewTransaction(new 
TransactionMethod<Void>() {
-            @Override
-            public Void runInTransaction() {
-                getBaseDiskDao().save(cinderDisk);
-                getImageDao().save(cinderDisk.getImage());
-                getImageStorageDomainMapDao().save(new 
image_storage_domain_map(cinderDisk.getImageId(),
-                        cinderDisk.getStorageIds().get(0), 
cinderDisk.getQuotaId(), cinderDisk.getDiskProfileId()));
-
-                if (getVm() != null) {
-                    VmDeviceUtils.addManagedDevice(new 
VmDeviceId(cinderDisk.getId(), getVmId()),
-                            VmDeviceGeneralType.DISK,
-                            VmDeviceType.DISK,
-                            null,
-                            shouldDiskBePlugged(),
-                            Boolean.TRUE.equals(cinderDisk.getReadOnly()),
-                            null);
-                }
-                return null;
-            }
-        });
-        getReturnValue().setActionReturnValue(cinderDisk.getId());
-        plugDiskToVmIfNeeded();
+        CommandCoordinatorUtil.executeAsyncCommand(
+                VdcActionType.AddCinderDisk,
+                getParameters(),
+                cloneContextAndDetachFromParent());
         setSucceeded(true);
     }
 
@@ -654,7 +606,7 @@
         super.endSuccessfully();
     }
 
-    private void plugDiskToVmIfNeeded() {
+    protected void plugDiskToVmIfNeeded() {
         if (Boolean.TRUE.equals(getParameters().getPlugDiskToVm()) && getVm() 
!= null &&  getVm().getStatus() != VMStatus.Down)    {
             HotPlugDiskToVmParameters params = new 
HotPlugDiskToVmParameters(getVmId(), getParameters().getDiskInfo().getId());
             params.setShouldBeLogged(false);
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 3165e6b..3cba91d 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
@@ -399,7 +399,10 @@
     // Mac Pool
     AddMacPool(3100, ActionGroup.CREATE_MAC_POOL, false, QuotaDependency.NONE),
     UpdateMacPool(3101, ActionGroup.EDIT_MAC_POOL, false, 
QuotaDependency.NONE),
-    RemoveMacPool(3102, ActionGroup.DELETE_MAC_POOL, false, 
QuotaDependency.NONE);
+    RemoveMacPool(3102, ActionGroup.DELETE_MAC_POOL, false, 
QuotaDependency.NONE),
+
+    // Cinder
+    AddCinderDisk(3200, ActionGroup.CONFIGURE_VM_STORAGE, false, 
QuotaDependency.NONE);
 
     private int intValue;
     private ActionGroup actionGroup;


-- 
To view, visit http://gerrit.ovirt.org/36345
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I087453ddfae71b8ee94a248f1456faf8c9ed9ede
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Maor Lipchuk <mlipc...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to