Liron Aravot has uploaded a new change for review. Change subject: core: avoid reconstructs based on stale data ......................................................................
core: avoid reconstructs based on stale data IrsBrokerCommand._updatingTimer_Elapsed is triggered by a timer, loads the storage pool from the db and then perform GetStoragePoolInfo vds command. The master version received from vdsm and from the db are being compared - if they are different reconstruct command is being executed because of the version difference. There's no garuntee that recovery didn't run after the storage pool data has been loaded from the DB but before we added a new reconstruct operation to the queue. The proposed solution adds a check to verify whether to master version has changed since we first loaded it, if it did it means that recovery operation ran meanwhile and that we shouldn't perform reconstruct. Change-Id: Ib2dd69b1766ab92be7428c8973590709a52d5d48 Bug-Url: https://bugzilla.redhat.com/888259 Signed-off-by: Liron Aravot <[email protected]> --- M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java 1 file changed, 17 insertions(+), 10 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/64/10764/1 diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java index 3e44df5..8aa1b2f 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java @@ -310,7 +310,7 @@ && domainPoolMap.getstatus() != StorageDomainStatus.Locked) { // and the domain is not master in the VDSM if (!((data.getstorage_domain_type() == StorageDomainType.Master) || (data.getstorage_domain_type() == StorageDomainType.Unknown))) { - reconstructMasterDomainNotInSync(data.getstorage_pool_id().getValue(), + reconstructMasterDomainNotInSync(storagePool, domainFromDb.getId(), "Mismatch between master in DB and VDSM", MessageFormat.format("Master domain is not in sync between DB and VDSM. " @@ -428,7 +428,7 @@ * @param logMessage * The log message to write in the log. */ - private void reconstructMasterDomainNotInSync(final Guid storagePoolId, + private void reconstructMasterDomainNotInSync(final storage_pool storagePool, final Guid masterDomainId, final String exceptionMessage, final String logMessage) { @@ -438,16 +438,23 @@ new Callable<EventResult>() { @Override public EventResult call() { - log.warnFormat(logMessage); + storage_pool storagePoolDb = DbFacade.getInstance().getStoragePoolDao() + .get(_storagePoolId); + // means that no reconstruct/recovery operation ran before the event execution. + if (storagePoolDb != null + && storagePoolDb.getmaster_domain_version() == storagePool.getmaster_domain_version()) { + log.warnFormat(logMessage); - AuditLogableBase logable = new AuditLogableBase(mCurrentVdsId); - logable.setStorageDomainId(masterDomainId); - AuditLogDirector.log(logable, AuditLogType.SYSTEM_MASTER_DOMAIN_NOT_IN_SYNC); + AuditLogableBase logable = new AuditLogableBase(mCurrentVdsId); + logable.setStorageDomainId(masterDomainId); + AuditLogDirector.log(logable, AuditLogType.SYSTEM_MASTER_DOMAIN_NOT_IN_SYNC); - return ResourceManager.getInstance() - .getEventListener() - .masterDomainNotOperational(masterDomainId, storagePoolId); - + return ResourceManager.getInstance() + .getEventListener() + .masterDomainNotOperational(masterDomainId, storagePool.getId()); + } else { + return new EventResult(true, EventType.RECONSTRUCT); + } } }); throw new IRSNoMasterDomainException(exceptionMessage); -- To view, visit http://gerrit.ovirt.org/10764 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib2dd69b1766ab92be7428c8973590709a52d5d48 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liron Aravot <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
