package org.ovirt.engine.core.bll.storage.pool;
import java.util.List;
import org.ovirt.engine.core.bll.Backend;
import org.ovirt.engine.core.common.businessentities.StorageDomain;
import org.ovirt.engine.core.common.businessentities.StorageDomainType;
import org.ovirt.engine.core.common.businessentities.StoragePool;
import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.vdscommands.ConnectStoragePoolVDSCommandParameters;
import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RefreshPoolSingleAsyncOperation extends ActivateDeactivateSingleAsyncOperation {
private static final Logger log = LoggerFactory.getLogger(RefreshPoolSingleAsyncOperation.class);
private final List<Guid> vdsIdsToSetNonOperational;
private Guid masterStorageDomainId;
private List<StoragePoolIsoMap> storagePoolIsoMap;
public RefreshPoolSingleAsyncOperation(List<VDS> vdss, StorageDomain domain,
StoragePool storagePool, List<Guid> vdssIdsToSetNonoperational) {
super(vdss, domain, storagePool);
vdsIdsToSetNonOperational = vdssIdsToSetNonoperational;
masterStorageDomainId = DbFacade.getInstance().getStorageDomainDao()
.getMasterStorageDomainIdForPool(getStoragePool().getId());
storagePoolIsoMap = DbFacade.getInstance()
.getStoragePoolIsoMapDao().getAllForStoragePool(getStoragePool().getId());
}
@Override
public void execute(int iterationId) {
try {
if (getStorageDomain() != null &&
getStorageDomain().getStorageDomainType() == StorageDomainType.Master) {
try {
Backend.getInstance()
.getResourceManager()
.runVdsCommand(
VDSCommandType.ConnectStoragePool,
new ConnectStoragePoolVDSCommandParameters(getVdss().get(iterationId),
getStoragePool(), masterStorageDomainId, storagePoolIsoMap));
} catch (Exception e) {
log.error("Could not connect vds '{}' to pool '{}' - moving host to non-operational: {}",
getVdss().get(iterationId).getName(),
getStoragePool().getName(),
e.getMessage());
log.debug("Exception", e);
synchronized (vdsIdsToSetNonOperational) {
vdsIdsToSetNonOperational.add(getVdss().get(iterationId).getId());
}
}
} else {
Backend.getInstance().getResourceManager().runVdsCommand(
VDSCommandType.ConnectStoragePool,
new ConnectStoragePoolVDSCommandParameters(getVdss().get(iterationId), getStoragePool(),
masterStorageDomainId, storagePoolIsoMap, true));
log.info("Refreshed vds '{}' in pool '{}'", getVdss().get(iterationId).getName(),
getStoragePool().getName());
}
} catch (RuntimeException e) {
log.error("Failed to connect/refresh storagePool. Host '{}' to storage pool '{}': {}",
getVdss().get(iterationId).getName(),
getStoragePool().getName(),
e.getMessage());
log.debug("Exception", e);
}
}
}