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

Reply via email to