Mark Wu has uploaded a new change for review.

Change subject: Support importing iso domain on localfs
......................................................................

Support importing iso domain on localfs

Change-Id: Id04af5e4f43d4d96c5ddc316af73ee4a81384b52
Signed-off-by: Mark Wu <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddExistingLocalStorageDomainCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HSMGetStorageDomainInfoVDSCommand.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
5 files changed, 296 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/16/12916/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddExistingLocalStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddExistingLocalStorageDomainCommand.java
new file mode 100644
index 0000000..b9abc26
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddExistingLocalStorageDomainCommand.java
@@ -0,0 +1,71 @@
+package org.ovirt.engine.core.bll.storage;
+
+import org.apache.commons.lang.StringUtils;
+
+import org.ovirt.engine.core.bll.Backend;
+import org.ovirt.engine.core.common.action.StorageDomainManagementParameter;
+import 
org.ovirt.engine.core.common.action.StorageServerConnectionParametersBase;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.businessentities.SANState;
+import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
+import org.ovirt.engine.core.common.utils.Pair;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.VdcBllMessages;
+
+public class AddExistingLocalStorageDomainCommand<T extends 
StorageDomainManagementParameter> extends
+        AddLocalStorageDomainCommand<T> {
+
+    /**
+     * Constructor for command creation when compensation is applied on startup
+     *
+     * @param commandId
+     */
+    protected AddExistingLocalStorageDomainCommand(Guid commandId) {
+        super(commandId);
+    }
+
+    public AddExistingLocalStorageDomainCommand(T parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected boolean CanAddDomain() {
+        return CheckExistingStorageDomain();
+    }
+
+    @Override
+    protected void executeCommand() {
+        if (StringUtils.isEmpty(getStorageDomain().getStorage())) {
+            getStorageDomain().setStorage(
+                    (String) Backend
+                            .getInstance()
+                            .runInternalAction(
+                                    VdcActionType.AddStorageServerConnection,
+                                    new 
StorageServerConnectionParametersBase(getStorageDomain().getStorageStaticData()
+                                            .getConnection(), 
getVds().getId())).getActionReturnValue());
+        }
+        AddStorageDomainInDb();
+        UpdateStorageDomainDynamicFromIrs();
+        setSucceeded(true);
+    }
+
+    @Override
+    protected boolean 
ConcreteCheckExistingStorageDomain(Pair<StorageDomainStatic, SANState> domain) {
+        boolean returnValue = false;
+        StorageDomainStatic domainFromIrs = domain.getFirst();
+        if 
(StringUtils.isEmpty(getStorageDomain().getStorageStaticData().getStorage())
+                && StringUtils.isEmpty(domainFromIrs.getStorage()) && 
domainFromIrs.getConnection() != null
+                && getStorageDomain().getStorageStaticData().getConnection() 
!= null) {
+            returnValue = 
(StringUtils.equals(domainFromIrs.getConnection().getconnection(), 
getStorageDomain()
+                    .getStorageStaticData().getConnection().getconnection()));
+        } else if 
(!StringUtils.isEmpty(getStorageDomain().getStorageStaticData().getStorage())
+                && !StringUtils.isEmpty(domainFromIrs.getStorage())) {
+            returnValue = (StringUtils.equals(domainFromIrs.getStorage(), 
getStorageDomain().getStorageStaticData()
+                    .getStorage()));
+        }
+        if (!returnValue) {
+            
addCanDoActionMessage(VdcBllMessages.ERROR_CANNOT_ADD_EXISTING_STORAGE_DOMAIN_CONNECTION_DATA_ILLEGAL);
+        }
+        return returnValue;
+    }
+}
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 04bd8a5..9b6f2af 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
@@ -205,6 +205,7 @@
     UpdateStoragePool(958, ActionGroup.EDIT_STORAGE_POOL_CONFIGURATION, 
QuotaDependency.NONE),
     FenceVdsManualy(959, ActionGroup.MANIPUTLATE_HOST, false, 
QuotaDependency.NONE),
     AddExistingNFSStorageDomain(960, ActionGroup.CREATE_STORAGE_DOMAIN, 
QuotaDependency.NONE),
+    AddExistingLocalStorageDomain(961, ActionGroup.CREATE_STORAGE_DOMAIN, 
QuotaDependency.NONE),
     AddStorageServerConnection(1000, ActionGroup.CREATE_STORAGE_DOMAIN, 
QuotaDependency.NONE),
     DisconnectStorageServerConnection(1002, ActionGroup.CREATE_STORAGE_DOMAIN, 
QuotaDependency.NONE),
     RemoveStorageServerConnection(1003, ActionGroup.CREATE_STORAGE_DOMAIN, 
QuotaDependency.NONE),
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HSMGetStorageDomainInfoVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HSMGetStorageDomainInfoVDSCommand.java
index 985d8e9..d6ad570 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HSMGetStorageDomainInfoVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HSMGetStorageDomainInfoVDSCommand.java
@@ -54,14 +54,15 @@
                     
StorageFormatType.forValue(xmlRpcStruct.getItem("version").toString()));
         }
         if (sdStatic.getStorageType() != StorageType.UNKNOWN) {
-            if (sdStatic.getStorageType() == StorageType.NFS && 
xmlRpcStruct.contains("remotePath")) {
+            if ((sdStatic.getStorageType() == StorageType.NFS || 
sdStatic.getStorageType() == StorageType.LOCALFS)
+                && xmlRpcStruct.contains("remotePath")) {
                 String path = xmlRpcStruct.getItem("remotePath").toString();
                 List<StorageServerConnections> connections = 
DbFacade.getInstance()
                         
.getStorageServerConnectionDao().getAllForStorage(path);
                 if (connections.isEmpty()) {
                     sdStatic.setConnection(new StorageServerConnections());
                     sdStatic.getConnection().setconnection(path);
-                    sdStatic.getConnection().setstorage_type(StorageType.NFS);
+                    
sdStatic.getConnection().setstorage_type(sdStatic.getStorageType());
                 } else {
                     sdStatic.setStorage(connections.get(0).getid());
                     sdStatic.setConnection(connections.get(0));
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
index 9d4c52d..e7ef715 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
@@ -1613,6 +1613,7 @@
     public static void GetExistingStorageDomainList(AsyncQuery aQuery,
             Guid hostId,
             StorageDomainType domainType,
+            StorageType storageType,
             String path) {
         aQuery.converterCallback = new IAsyncConverter() {
             @Override
@@ -1623,7 +1624,7 @@
         };
 
         Frontend.RunQuery(VdcQueryType.GetExistingStorageDomainList, new 
GetExistingStorageDomainListParameters(hostId,
-                StorageType.NFS,
+                storageType,
                 domainType,
                 path), aQuery);
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
index b08f73e..07f4a2a 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
@@ -196,6 +196,7 @@
     public IStorageModel storageModel;
     public NGuid storageId;
     public StorageServerConnections nfsConnection;
+    public StorageServerConnections localConnection;
     public StorageServerConnections connection;
     public Guid hostId = new Guid();
     public String path;
@@ -587,6 +588,9 @@
         NfsStorageModel tempVar = new NfsStorageModel();
         tempVar.setRole(StorageDomainType.ISO);
         items.add(tempVar);
+        LocalStorageModel tempVar1 = new LocalStorageModel();
+        tempVar1.setRole(StorageDomainType.ISO);
+        items.add(tempVar1);
         NfsStorageModel tempVar2 = new NfsStorageModel();
         tempVar2.setRole(StorageDomainType.ImportExport);
         items.add(tempVar2);
@@ -635,6 +639,15 @@
             Task.Create(this,
                     new ArrayList<Object>(Arrays.asList(new Object[] { 
"ImportNfs", //$NON-NLS-1$
                             host.getId(), nfsModel.getPath().getEntity(), 
nfsModel.getRole() }))).Run();
+        }
+        else if (model.getSelectedItem() instanceof LocalStorageModel)
+        {
+            LocalStorageModel localModel = (LocalStorageModel) 
model.getSelectedItem();
+            localModel.setMessage(null);
+
+            Task.Create(this,
+                    new ArrayList<Object>(Arrays.asList(new Object[] { 
"ImportLocal", //$NON-NLS-1$
+                            host.getId(), localModel.getPath().getEntity(), 
localModel.getRole() }))).Run();
         }
         else
         {
@@ -1783,6 +1796,7 @@
                                     }),
                                     hostId,
                                     domainType,
+                                    StorageType.NFS,
                                     path);
                         }
                         else
@@ -1857,6 +1871,206 @@
             new Object[] {context, isSucceeded, model, message});
     }
 
+
+    private void ImportLocalStorage(TaskContext context)
+    {
+        this.context = context;
+
+        ArrayList<Object> data = (ArrayList<Object>) context.getState();
+        StorageModel model = (StorageModel) getWindow();
+
+        storageModel = model.getSelectedItem();
+        hostId = (Guid) data.get(1);
+        path = (String) data.get(2);
+        domainType = (StorageDomainType) data.get(3);
+
+        ImportLocalStorageInit();
+    }
+
+    public void ImportLocalStorageInit()
+    {
+        if (localConnection != null)
+        {
+            // Clean local connection
+            Frontend.RunAction(VdcActionType.DisconnectStorageServerConnection,
+                new StorageServerConnectionParametersBase(localConnection, 
hostId),
+                new IFrontendActionAsyncCallback() {
+                    @Override
+                    public void Executed(FrontendActionAsyncResult result) {
+
+                        StorageListModel storageListModel = (StorageListModel) 
result.getState();
+                        VdcReturnValueBase returnVal = result.getReturnValue();
+                        boolean success = returnVal != null && 
returnVal.getSucceeded();
+                        if (success) {
+                            storageListModel.localConnection = null;
+                        }
+                        storageListModel.ImportLocalStoragePostInit();
+
+                    }
+                },
+                this);
+        }
+        else
+        {
+            ImportLocalStoragePostInit();
+        }
+    }
+
+    public void ImportLocalStoragePostInit()
+    {
+        // Check storage domain existence
+        AsyncDataProvider.GetStorageDomainsByConnection(new AsyncQuery(this, 
new INewAsyncCallback() {
+            @Override
+            public void OnSuccess(Object target, Object returnValue) {
+
+                StorageListModel storageListModel = (StorageListModel) target;
+                ArrayList<StorageDomain> storages = (ArrayList<StorageDomain>) 
returnValue;
+
+                if (storages != null && storages.size() > 0) {
+
+                    String storageName = storages.get(0).getStorageName();
+                    OnFinish(storageListModel.context,
+                        false,
+                        storageListModel.storageModel,
+                        
ConstantsManager.getInstance().getMessages().importFailedDomainAlreadyExistStorageMsg(storageName));
+                } else {
+                    StorageServerConnections tempVar = new 
StorageServerConnections();
+                    storageModel = storageListModel.storageModel;
+                    LocalStorageModel nfsModel = (LocalStorageModel) 
storageModel;
+
+                    tempVar.setconnection(storageListModel.path);
+                    tempVar.setstorage_type(StorageType.LOCALFS);
+                    storageListModel.localConnection = tempVar;
+                    storageListModel.ImportLocalStorageConnect();
+                }
+            }
+        }), null, path);
+    }
+
+    public void ImportLocalStorageConnect()
+    {
+        Frontend.RunAction(VdcActionType.AddStorageServerConnection, new 
StorageServerConnectionParametersBase(localConnection, hostId),
+            new IFrontendActionAsyncCallback() {
+                @Override
+                public void Executed(FrontendActionAsyncResult result) {
+
+                    StorageListModel storageListModel = (StorageListModel) 
result.getState();
+                        VdcReturnValueBase returnVal = result.getReturnValue();
+                        boolean success = returnVal != null && 
returnVal.getSucceeded();
+                        if (success)
+                        {
+                            AsyncDataProvider.GetExistingStorageDomainList(new 
AsyncQuery(storageListModel,
+                                    new INewAsyncCallback() {
+                                        @Override
+                                        public void OnSuccess(Object target, 
Object returnValue) {
+
+                                            StorageListModel storageListModel1 
= (StorageListModel) target;
+                                            ArrayList<StorageDomain> domains = 
(ArrayList<StorageDomain>) returnValue;
+                                            if (domains != null)
+                                            {
+                                                if (domains.isEmpty())
+                                                {
+                                                    
PostImportLocalStorage(storageListModel1.context,
+                                                            false,
+                                                            
storageListModel1.storageModel,
+                                                            
ConstantsManager.getInstance()
+                                                                    
.getConstants()
+                                                                    
.thereIsNoStorageDomainUnderTheSpecifiedPathMsg());
+                                                }
+                                                else
+                                                {
+                                                    
storageListModel1.ImportLocalStorageAddDomain(domains);
+                                                }
+                                            }
+                                            else
+                                            {
+                                                
PostImportLocalStorage(storageListModel1.context,
+                                                        false,
+                                                        
storageListModel1.storageModel,
+                                                        
ConstantsManager.getInstance()
+                                                                .getConstants()
+                                                                
.failedToRetrieveExistingStorageDomainInformationMsg());
+                                            }
+
+                                        }
+                                    }),
+                                    hostId,
+                                    domainType,
+                                    StorageType.LOCALFS,
+                                    path);
+                        }
+                        else
+                        {
+                            PostImportLocalStorage(storageListModel.context,
+                                    false,
+                                    storageListModel.storageModel,
+                                    ConstantsManager.getInstance()
+                                            .getConstants()
+                                            
.failedToRetrieveExistingStorageDomainInformationMsg());
+                        }
+
+                    }
+                },
+                this);
+    }
+
+    public void ImportLocalStorageAddDomain(ArrayList<StorageDomain> domains)
+    {
+        StorageDomain sdToAdd = Linq.FirstOrDefault(domains);
+        StorageDomainStatic sdsToAdd = sdToAdd == null ? null : 
sdToAdd.getStorageStaticData();
+
+        StorageDomainManagementParameter params = new 
StorageDomainManagementParameter(sdsToAdd);
+        params.setVdsId(hostId);
+        Frontend.RunAction(VdcActionType.AddExistingLocalStorageDomain, 
params, new IFrontendActionAsyncCallback() {
+            @Override
+            public void Executed(FrontendActionAsyncResult result) {
+
+                Object[] array = (Object[]) result.getState();
+                StorageListModel storageListModel = (StorageListModel) 
array[0];
+                StorageDomain sdToAdd1 = (StorageDomain) array[1];
+                VdcReturnValueBase returnVal = result.getReturnValue();
+
+                boolean success = returnVal != null && 
returnVal.getSucceeded();
+                if (success) {
+
+                    StorageModel model = (StorageModel) 
storageListModel.getWindow();
+                    storage_pool dataCenter = (storage_pool) 
model.getDataCenter().getSelectedItem();
+                    if 
(!dataCenter.getId().equals(StorageModel.UnassignedDataCenterId)) {
+                        
storageListModel.AttachStorageToDataCenter(sdToAdd1.getId(), 
dataCenter.getId());
+                    }
+                    PostImportLocalStorage(storageListModel.context, true, 
storageListModel.storageModel, null);
+
+                } else {
+                    PostImportLocalStorage(storageListModel.context, false, 
storageListModel.storageModel, ""); //$NON-NLS-1$
+                }
+            }
+        }, new Object[] {this, sdToAdd});
+    }
+
+    public void PostImportLocalStorage(TaskContext context, boolean 
isSucceeded, IStorageModel model, String message)
+    {
+        Frontend.RunAction(VdcActionType.DisconnectStorageServerConnection,
+            new StorageServerConnectionParametersBase(localConnection, hostId),
+            new IFrontendActionAsyncCallback() {
+                @Override
+                public void Executed(FrontendActionAsyncResult result) {
+
+                    VdcReturnValueBase returnValue = result.getReturnValue();
+                    boolean success = returnValue != null && 
returnValue.getSucceeded();
+                    if (success) {
+                        localConnection = null;
+                    }
+                    Object[] array = (Object[]) result.getState();
+                    OnFinish((TaskContext) array[0],
+                        (Boolean) array[1],
+                        (IStorageModel) array[2],
+                        (String) array[3]);
+
+                }
+            },
+            new Object[] {context, isSucceeded, model, message});
+    }
+
     @Override
     public void run(TaskContext context)
     {
@@ -1883,6 +2097,10 @@
         {
             ImportNfsStorage(context);
         }
+        else if (StringHelper.stringsEqual(key, "ImportLocal")) //$NON-NLS-1$
+        {
+            ImportLocalStorage(context);
+        }
         else if (StringHelper.stringsEqual(key, "Finish")) //$NON-NLS-1$
         {
             getWindow().StopProgress();
@@ -1898,6 +2116,7 @@
         }
     }
 
+
     private SystemTreeItemModel systemTreeSelectedItem;
 
     @Override


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

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

Reply via email to