Piotr Kliczewski has uploaded a new change for review. Change subject: events: VM status update ......................................................................
events: VM status update Change-Id: I3fb17e714390d07b215f1251d18fca9195c38565 Signed-off-by: pkliczewski <[email protected]> --- M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java 2 files changed, 51 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/58/37758/1 diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java index c8e6547..f802b67 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java @@ -244,6 +244,7 @@ vdsManager.updateDynamicData(vds.getDynamicData()); } vdsManager.scheduleJobs(); + vdsManager.subscribeEvents(); vdsManagersDict.put(vds.getId(), vdsManager); log.info("VDS '{}' was added to the Resource Manager", vds.getId()); @@ -256,6 +257,7 @@ public void RemoveVds(Guid vdsId, boolean newHost) { VdsManager vdsManager = GetVdsManager(vdsId, newHost); if (vdsManager != null) { + vdsManager.unsubscribeEvents(); vdsManager.dispose(); vdsManagersDict.remove(vdsId); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java index 15522c8..b9b4145 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsManager.java @@ -6,6 +6,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -24,6 +25,7 @@ import org.ovirt.engine.core.common.businessentities.VdsNumaNode; import org.ovirt.engine.core.common.businessentities.VdsSpmStatus; import org.ovirt.engine.core.common.businessentities.VdsStatistics; +import org.ovirt.engine.core.common.businessentities.VmDynamic; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.locks.LockingGroup; @@ -40,6 +42,7 @@ import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase; +import org.ovirt.engine.core.dao.VmDynamicDAO; import org.ovirt.engine.core.di.Injector; import org.ovirt.engine.core.utils.NumaUtils; import org.ovirt.engine.core.utils.crypt.EngineEncryptionUtils; @@ -58,6 +61,8 @@ import org.ovirt.engine.core.vdsbroker.vdsbroker.VDSNetworkException; import org.ovirt.engine.core.vdsbroker.vdsbroker.VDSRecoveringException; import org.ovirt.engine.core.vdsbroker.vdsbroker.entities.VmInternalData; +import org.ovirt.vdsm.jsonrpc.client.events.EventSubscriber; +import org.reactivestreams.Subscription; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -86,6 +91,7 @@ private HostMonitoring hostMonitoring; private boolean monitoringNeeded; private List<Pair<VM, VmInternalData>> lastVmsList = Collections.emptyList(); + private Subscription subscription; private VdsManager(VDS vds) { log.info("Entered VdsManager constructor"); @@ -155,6 +161,45 @@ refreshRate, refreshRate, TimeUnit.MILLISECONDS); + } + + public void subscribeEvents() { + ResourceManager.getInstance().subscribe(new EventSubscriber(this.cachedVds.getHostName() + ".*.VM_Status.*") { + + private VmDynamicDAO dao = DbFacade.getInstance().getVmDynamicDao(); + + @Override + public void onSubscribe(Subscription sub) { + subscription = sub; + subscription.request(1); + } + + @Override + public void onNext(Map<String, Object> map) { + Set<String> keys = map.keySet(); + if (keys == null || keys.isEmpty()) + return; + + for (String key: keys) { + VmDynamic vmDynamic = this.dao.get(Guid.createGuidFromString(key)); + int newStatus = (int) map.get(key); + VMStatus previousStatus = vmDynamic.getStatus(); + if (newStatus != previousStatus.getValue()) { + vmDynamic.setStatus(VMStatus.forValue(newStatus)); + this.dao.update(vmDynamic); + } + } + subscription.request(1); + } + + @Override + public void onError(Throwable t) { + } + + @Override + public void onComplete() { + } + }); } private void initVdsBroker() { @@ -762,6 +807,10 @@ AuditLogDirector.log(logable, AuditLogType.VDS_HOST_NOT_RESPONDING_CONNECTING); } + public void unsubscribeEvents() { + this.subscription.cancel(); + } + public void dispose() { log.info("vdsManager::disposing"); SchedulerUtilQuartzImpl.getInstance().deleteJob(onTimerJobId); -- To view, visit http://gerrit.ovirt.org/37758 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3fb17e714390d07b215f1251d18fca9195c38565 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Piotr Kliczewski <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
