package org.ovirt.engine.core.bll.storage.pool; import java.util.List; import org.ovirt.engine.core.bll.Backend; import org.ovirt.engine.core.bll.storage.connection.StorageHelperDirector; import org.ovirt.engine.core.common.businessentities.StorageDomain; 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.businessentities.VdsSpmStatus; 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 AfterDeactivateSingleAsyncOperation extends ActivateDeactivateSingleAsyncOperation { private static final Logger log = LoggerFactory.getLogger(AfterDeactivateSingleAsyncOperation.class); private final boolean isLastMaster; private Guid masterStorageDomainId = Guid.Empty; private List<StoragePoolIsoMap> storagePoolIsoMap; public AfterDeactivateSingleAsyncOperation(List<VDS> vdss, StorageDomain domain, StoragePool storagePool, boolean isLastMaster, Guid newMasterStorageDomain) { super(vdss, domain, storagePool); this.isLastMaster = isLastMaster; if (masterStorageDomainId != null && !masterStorageDomainId.equals(Guid.Empty)) { this.masterStorageDomainId = newMasterStorageDomain; } else { this.masterStorageDomainId = DbFacade.getInstance().getStorageDomainDao() .getMasterStorageDomainIdForPool(getStoragePool().getId()); } storagePoolIsoMap = DbFacade.getInstance() .getStoragePoolIsoMapDao().getAllForStoragePool(getStoragePool().getId()); } @Override public void execute(int iterationId) { try { log.info("After deactivate treatment vds '{}', pool '{}'", getVdss().get(iterationId).getName(), getStoragePool().getName()); if (!isLastMaster) { Backend.getInstance().getResourceManager().runVdsCommand( VDSCommandType.ConnectStoragePool, new ConnectStoragePoolVDSCommandParameters( getVdss().get(iterationId), getStoragePool(), masterStorageDomainId, storagePoolIsoMap, true)); } if (getVdss().get(iterationId).getSpmStatus() == VdsSpmStatus.None) { StorageHelperDirector.getInstance().getItem(getStorageDomain().getStorageType()) .disconnectStorageFromDomainByVdsId(getStorageDomain(), getVdss().get(iterationId).getId()); } } catch (RuntimeException e) { log.error("Failed to refresh storagePool. Host '{}' to storage pool '{}': {}", getVdss().get(iterationId).getName(), getStoragePool().getName(), e.getMessage()); log.debug("Exception", e); } } }