package org.ovirt.engine.core.vdsbroker.vdsbroker;
import java.util.Map;
import org.ovirt.engine.core.common.errors.EngineError;
import org.ovirt.engine.core.common.vdscommands.ConnectStoragePoolVDSCommandParameters;
import org.ovirt.engine.core.vdsbroker.storage.StoragePoolDomainHelper;
public class ConnectStoragePoolVDSCommand<P extends ConnectStoragePoolVDSCommandParameters>
extends VdsBrokerCommand<P> {
public ConnectStoragePoolVDSCommand(P parameters) {
super(parameters);
}
public void connectStoragePool() {
Map<String, String> storageDomains = StoragePoolDomainHelper.buildStoragePoolDomainsMap
(getParameters().getStorageDomains());
log.info("Executing with domain map: {}", storageDomains);
status = getBroker().connectStoragePool(
getParameters().getStoragePoolId().toString(),
getParameters().getVds().getVdsSpmId(),
getParameters().getStoragePoolId().toString(),
getParameters().getMasterDomainId().toString(),
getParameters().getStoragePool().getMasterDomainVersion(),
storageDomains);
}
@Override
protected void executeVdsBrokerCommand() {
connectStoragePool();
proceedProxyReturnValue();
}
protected void proceedProxyReturnValue() {
proceedConnectProxyReturnValue();
}
// Don't throw exception on errors except StoragePoolMasterNotFound for
// master domain failure treatment
protected void proceedConnectProxyReturnValue() {
EngineError returnStatus = getReturnValueFromStatus(getReturnStatus());
switch (returnStatus) {
case Done:
case StoragePoolMasterNotFound:
case StoragePoolTooManyMasters:
case StoragePoolWrongMaster:
super.proceedProxyReturnValue();
break;
case ReleaseLockFailure:
case AcquireHostIdFailure:
case ReleaseHostIdFailure:
VDSExceptionBase outEx = new VDSErrorException(String.format("Failed in vdscommand %1$s, error = %2$s",
getCommandName(), getReturnStatus().message));
initializeVdsError(returnStatus);
getVDSReturnValue().setSucceeded(false);
throw outEx;
default:
getVDSReturnValue().setSucceeded(false);
initializeVdsError(returnStatus);
break;
}
}
}