use of org.ovirt.engine.core.common.eventqueue.Event in project ovirt-engine by oVirt.
the class EventQueueMonitor method submitTaskInternal.
private FutureTask<EventResult> submitTaskInternal(Event event, Callable<EventResult> callable) {
FutureTask<EventResult> task = null;
Guid storagePoolId = event.getStoragePoolId();
ReentrantLock lock = getPoolLock(storagePoolId);
lock.lock();
try {
Event currentEvent = poolCurrentEventMap.get(storagePoolId);
if (currentEvent != null) {
switch(currentEvent.getEventType()) {
case RECOVERY:
if (event.getEventType() == EventType.VDSCONNECTTOPOOL || event.getEventType() == EventType.VDSCLEARCACHE || event.getEventType() == EventType.DOMAINFAILOVER) {
task = addTaskToQueue(event, callable, storagePoolId, isEventShouldBeFirst(event));
} else {
log.debug("Current event was skipped because of recovery is running now for pool '{}', event '{}'", storagePoolId, event);
}
break;
case RECONSTRUCT:
if (event.getEventType() == EventType.VDSCONNECTTOPOOL || event.getEventType() == EventType.RECOVERY || event.getEventType() == EventType.DOMAINFAILOVER || event.getEventType() == EventType.VDSCLEARCACHE) {
task = addTaskToQueue(event, callable, storagePoolId, isEventShouldBeFirst(event));
} else {
log.debug("Current event was skipped because of reconstruct is running now for pool '{}', event '{}'", storagePoolId, event);
}
break;
default:
task = addTaskToQueue(event, callable, storagePoolId, isEventShouldBeFirst(event));
break;
}
} else {
task = addTaskToQueue(event, callable, storagePoolId, false);
poolCurrentEventMap.put(storagePoolId, event);
ThreadPoolUtil.execute(new InternalEventQueueThread(storagePoolId, lock, poolsEventsMap, poolCurrentEventMap));
}
} finally {
lock.unlock();
}
return task;
}
use of org.ovirt.engine.core.common.eventqueue.Event in project ovirt-engine by oVirt.
the class IrsProxy method queueDomainMaintenanceCheck.
public void queueDomainMaintenanceCheck(final StorageDomain domain, final StoragePool pool) {
getEventQueue().submitEventAsync(new Event(storagePoolId, domain.getId(), null, EventType.DOMAINFAILOVER, ""), () -> {
Collection<Guid> vdsConnectedToPool = getVdsConnectedToPool(storagePoolId);
Set<Guid> vdsDomInMaintenance = _domainsInMaintenance.get(domain.getId());
if (vdsConnectedToPool.isEmpty() || (vdsDomInMaintenance != null && vdsDomInMaintenance.containsAll(vdsConnectedToPool))) {
log.info("Moving domain '{}' to maintenance", domain.getId());
storagePoolIsoMapDao.updateStatus(domain.getStoragePoolIsoMapData().getId(), StorageDomainStatus.Maintenance);
AuditLogable logable = new AuditLogableImpl();
logable.setStorageDomainId(domain.getId());
logable.setStorageDomainName(domain.getName());
logable.setStoragePoolId(pool.getId());
logable.setStoragePoolName(pool.getName());
auditLogDirector.log(logable, AuditLogType.STORAGE_DOMAIN_MOVED_TO_MAINTENANCE);
}
return null;
});
}
use of org.ovirt.engine.core.common.eventqueue.Event in project ovirt-engine by oVirt.
the class IrsProxy method reconstructMasterDomainNotInSync.
/**
* Reconstructs the master domain when the old domain is not in sync.
*
* @param storagePoolId
* The storage pool id.
* @param masterDomain
* The master domain.
* @param exceptionMessage
* The message of the exception to throw.
* @param logMessage
* The log message to write in the log.
*/
private void reconstructMasterDomainNotInSync(final Guid storagePoolId, final StorageDomainStatic masterDomain, final String exceptionMessage, final String logMessage) {
getEventQueue().submitEventSync(new Event(this.storagePoolId, masterDomain.getId(), null, EventType.RECONSTRUCT, "Reconstruct caused by failure to execute spm command"), () -> {
log.warn(logMessage);
AuditLogable logable = new AuditLogableImpl();
logable.setVdsId(currentVdsId);
logable.setVdsName(vdsStaticDao.get(currentVdsId).getName());
logable.setStorageDomainId(masterDomain.getId());
logable.setStorageDomainName(masterDomain.getName());
auditLogDirector.log(logable, AuditLogType.SYSTEM_MASTER_DOMAIN_NOT_IN_SYNC);
return getEventListener().masterDomainNotOperational(masterDomain.getId(), storagePoolId, false, true);
});
throw new IRSNoMasterDomainException(exceptionMessage);
}
use of org.ovirt.engine.core.common.eventqueue.Event in project ovirt-engine by oVirt.
the class IrsProxy method addDomainData.
public void addDomainData(final Guid domainId) {
getEventQueue().submitEventAsync(new Event(storagePoolId, domainId, null, EventType.DOMAINFAILOVER, ""), () -> {
EventResult result = null;
if (domainsInProblem.containsKey(domainId)) {
log.info("starting processDomainRecovery for domain '{}'.", getDomainIdTuple(domainId));
result = processDomainRecovery(domainId);
}
timersMap.remove(domainId);
return result;
});
}
use of org.ovirt.engine.core.common.eventqueue.Event in project ovirt-engine by oVirt.
the class RecoveryStoragePoolCommand method executeCommand.
@Override
protected void executeCommand() {
StorageDomain newMasterDomain = loadTargetedMasterDomain();
if (storageHelperDirector.getItem(newMasterDomain.getStorageType()).connectStorageToDomainByVdsId(newMasterDomain, getVds().getId())) {
getEventQueue().submitEventSync(new Event(getParameters().getStoragePoolId(), getParameters().getNewMasterDomainId(), null, EventType.RECOVERY, ""), () -> {
getParameters().setStorageDomainId(getMasterDomainIdFromDb());
StoragePoolIsoMap domainPoolMap = new StoragePoolIsoMap(getParameters().getNewMasterDomainId(), getParameters().getStoragePoolId(), StorageDomainStatus.Active);
storagePoolIsoMapDao.save(domainPoolMap);
getParameters().setVdsId(getVds().getId());
ActionReturnValue returnVal = runInternalAction(ActionType.ReconstructMasterDomain, getParameters(), cloneContextAndDetachFromParent());
boolean reconstructVerbExecuted = (returnVal.getActionReturnValue() != null) ? (Boolean) returnVal.getActionReturnValue() : false;
storagePoolDao.updateStatus(getStoragePool().getId(), StoragePoolStatus.NonResponsive);
if (!reconstructVerbExecuted) {
storagePoolIsoMapDao.remove(domainPoolMap.getId());
}
if (returnVal.getSucceeded()) {
updateStorageDomainFormatIfNeeded(loadTargetedMasterDomain());
}
setSucceeded(returnVal.getSucceeded());
return new EventResult(reconstructVerbExecuted, EventType.RECONSTRUCT);
});
} else {
getReturnValue().setFault(new EngineFault(new EngineException(EngineError.StorageServerConnectionError, "Failed to connect storage"), EngineError.StorageServerConnectionError));
}
}
Aggregations