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
