package org.ovirt.engine.core.bll.storage; import java.util.List; import org.ovirt.engine.core.bll.Backend; import org.ovirt.engine.core.bll.InternalCommandAttribute; import org.ovirt.engine.core.common.action.StoragePoolParametersBase; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.common.businessentities.storage_server_connections; import org.ovirt.engine.core.common.vdscommands.ConnectStorageServerVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.compat.LogCompat; import org.ovirt.engine.core.compat.LogFactoryCompat; import org.ovirt.engine.core.dal.VdcBllMessages; /** * Connect host to all Storage server connections in Storage pool. We * considering that connection failed only if data domains failed to connect. If * Iso/Export domains failed to connect - only log it. */ // C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET // attributes: @InternalCommandAttribute public class ConnectHostToStoragePoolServersCommand<T extends StoragePoolParametersBase> extends ConnectHostToStoragePooServerCommandBase<T> { private static LogCompat log = LogFactoryCompat.getLog(ConnectHostToStoragePoolServersCommand.class); public ConnectHostToStoragePoolServersCommand(T parameters) { super(parameters); setVdsId(parameters.getVdsId()); } @Override protected void executeCommand() { setSucceeded(ConnectStorageServer(getStoragePool().getstorage_pool_type(), getConnections())); if (getNeedToConnectIso()) { if (!ConnectStorageServer(getIsoType(), getIsoConnections())) { log.infoFormat("Failed to connect host {0} to StoragePool {1} Iso domain/s connections", getVds() .getvds_name(), getStoragePool().getname()); } } if (getNeedToConnectExport()) { if (!ConnectStorageServer(getExportType(), getExportConnections())) { log.infoFormat("Failed to connect host {0} to StoragePool {1} Export domain/s connections", getVds() .getvds_name(), getStoragePool().getname()); } } } @Override protected boolean canDoAction() { boolean returnValue = CheckStoragePool() && CheckStoragePoolStatusNotEqual(StoragePoolStatus.Uninitialized, VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_POOL_STATUS_ILLEGAL) && InitializeVds(); if (returnValue) { InitConnectionList(); if (!getParameters().getSuppressCheck()) { if (!ValidConnection(getStoragePool().getstorage_pool_type(), getConnections())) { addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_CONNECTION); returnValue = false; } else { if (getIsoConnections() != null && getIsoConnections().size() != 0) { setNeedToConnectIso(ValidConnection(getIsoType(), getIsoConnections())); if (!getNeedToConnectIso()) { log.infoFormat( "Failed to validated connections for host {0} to StoragePool {1} Iso domain/s connections", getVds().getvds_name(), getStoragePool().getname()); } } if (getExportConnections() != null && getExportConnections().size() != 0) { setNeedToConnectExport(ValidConnection(getExportType(), getExportConnections())); if (!getNeedToConnectExport()) { log.infoFormat( "Failed to validated connections for host {0} to StoragePool {1} Export domain/s connections", getVds().getvds_name(), getStoragePool().getname()); } } } } } return returnValue; } protected boolean ConnectStorageServer(StorageType type, List<storage_server_connections> connections) { boolean connectSucceeded = true; if (connections != null && connections.size() > 0) { java.util.HashMap<String, String> retValues = (java.util.HashMap<String, String>) Backend .getInstance() .getResourceManager() .RunVdsCommand( VDSCommandType.ConnectStorageServer, new ConnectStorageServerVDSCommandParameters(getVds().getvds_id(), getStoragePool().getId(), type, connections)).getReturnValue(); connectSucceeded = StorageHelperDirector.getInstance().getItem(type).IsConnectSucceeded(retValues, connections); log.infoFormat("Host {0} storage connection was {1} ", getVds().getvds_name(), connectSucceeded ? "succeeded" : "failed"); } return connectSucceeded; } protected boolean ValidConnection(StorageType type, List<storage_server_connections> connections) { return (connections != null && (connections.isEmpty() || StorageHelperDirector.getInstance().getItem(type) .ValidateStoragePoolConnectionsInHost(getVds(), connections, getStoragePool().getId()))); } }