Francesco Romani has uploaded a new change for review.

Change subject: janitorial: use contextmanagers for semaphores
......................................................................

janitorial: use contextmanagers for semaphores

Since python 2.6, threading.Semaphores can be used as context managers,
leading to neater and shorter code.
This patch changes the code to do that.

Change-Id: Ifa1d4c8866263a612bbfa2ef706f91d6fdca7a6b
Signed-off-by: Francesco Romani <from...@redhat.com>
---
M mom/GuestManager.py
M mom/GuestMonitor.py
M mom/Monitor.py
3 files changed, 43 insertions(+), 52 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/mom refs/changes/87/31587/1

diff --git a/mom/GuestManager.py b/mom/GuestManager.py
index 0035ae4..fc3244d 100644
--- a/mom/GuestManager.py
+++ b/mom/GuestManager.py
@@ -43,9 +43,8 @@
         we are not already tracking.  The GuestMonitor constructor might block
         so don't hold guests_sem while calling it.
         """
-        self.guests_sem.acquire()
-        spawn_list = set(domain_list) - set(self.guests)
-        self.guests_sem.release()
+        with self.guests_sem:
+            spawn_list = set(domain_list) - set(self.guests)
         for id in spawn_list:
             info = self.hypervisor_iface.getVmInfo(id)
             if info is None:
@@ -66,12 +65,11 @@
         Wait for GuestMonitors to exit
         """
         while True:
-            self.guests_sem.acquire()
-            if len(self.guests) > 0:
-                (id, thread) = self.guests.popitem()
-            else:
-                id = None
-            self.guests_sem.release()
+            with self.guests_sem:
+                if len(self.guests) > 0:
+                    (id, thread) = self.guests.popitem()
+                else:
+                    id = None
             if id is not None:
                 thread.join(0)
             else:
@@ -81,16 +79,15 @@
         """
         Check for stale and/or deceased threads and remove them.
         """
-        self.guests_sem.acquire()
-        for (id, thread) in self.guests.items():
-            # Check if the thread has died
-            if not thread.isAlive():
-                del self.guests[id]
-            # Check if the domain has ended according to hypervisor interface
-            elif id not in domain_list:
-                thread.terminate()
-                del self.guests[id]
-        self.guests_sem.release()
+        with self.guests_sem:
+            for (id, (mon, thread)) in self.guests.items():
+                # Check if the thread has died
+                if not thread.isAlive():
+                    del self.guests[id]
+                # Check if the domain has ended according to hypervisor 
interface
+                elif id not in domain_list:
+                    thread.terminate()
+                    del self.guests[id]
 
     def interrogate(self):
         """
@@ -98,12 +95,11 @@
         Return: A dictionary of Entities, indexed by guest id
         """
         ret = {}
-        self.guests_sem.acquire()
-        for (id, monitor) in self.guests.items():
-            entity = monitor.interrogate()
-            if entity is not None:
-                ret[id] = entity
-        self.guests_sem.release()
+        with self.guests_sem:
+            for (id, monitor) in self.guests.items():
+                entity = monitor.interrogate()
+                if entity is not None:
+                    ret[id] = entity
         return ret
 
     def run(self):
@@ -124,11 +120,10 @@
 
     def rpc_get_active_guests(self):
         ret = []
-        self.guests_sem.acquire()
-        for (id, monitor) in self.guests.items():
-            if monitor.isReady():
-                name = monitor.getGuestName()
-                if name is not None:
-                    ret.append(name)
-        self.guests_sem.release()
+        with self.guests_sem:
+            for (id, monitor) in self.guests.items():
+                if monitor.isReady():
+                    name = monitor.getGuestName()
+                    if name is not None:
+                        ret.append(name)
         return ret
diff --git a/mom/GuestMonitor.py b/mom/GuestMonitor.py
index b6a34e1..bb8aa86 100644
--- a/mom/GuestMonitor.py
+++ b/mom/GuestMonitor.py
@@ -35,10 +35,9 @@
         self.setName("GuestMonitor-%s" % info['name'])
         Monitor.__init__(self, config, self.getName())
         self.setDaemon(True)
-        self.data_sem.acquire()
-        self.properties.update(info)
-        self.properties['hypervisor_iface'] = hypervisor_iface
-        self.data_sem.release()
+        with self.data_sem:
+            self.properties.update(info)
+            self.properties['hypervisor_iface'] = hypervisor_iface
 
         collector_list = self.config.get('guest', 'collectors')
         self.collectors = Collector.get_collectors(collector_list,
diff --git a/mom/Monitor.py b/mom/Monitor.py
index 7cb0649..57aaeea 100644
--- a/mom/Monitor.py
+++ b/mom/Monitor.py
@@ -112,11 +112,10 @@
         for k in self.optional_fields:
             data.setdefault(k, None)
 
-        self.data_sem.acquire()
-        self.statistics.append(data)
-        if len(self.statistics) > self.config.getint('main', 
'sample-history-length'):
-            self.statistics.popleft()
-        self.data_sem.release()
+        with self.data_sem:
+            self.statistics.append(data)
+            if len(self.statistics) > self.config.getint('main', 
'sample-history-length'):
+                self.statistics.popleft()
         self._set_ready()
 
         if self.plotter is not None:
@@ -133,13 +132,12 @@
         if self.ready is not True:
             return None
         ret = Entity(monitor=self)
-        self.data_sem.acquire()
-        for prop in self.properties.keys():
-            ret._set_property(prop, self.properties[prop])
-        for var in self.variables.keys():
-            ret._set_variable(var, self.variables[var])
-        ret._set_statistics(self.statistics)
-        self.data_sem.release()
+        with self.data_sem:
+            for prop in self.properties.keys():
+                ret._set_property(prop, self.properties[prop])
+            for var in self.variables.keys():
+                ret._set_variable(var, self.variables[var])
+            ret._set_statistics(self.statistics)
         ret._finalize()
         return ret
 
@@ -147,10 +145,9 @@
         """
         Update the variables array to store any updates from an Entity
         """
-        self.data_sem.acquire()
-        for (var, val) in variables.items():
-            self.variables[var] = val
-        self.data_sem.release()
+        with self.data_sem:
+            for (var, val) in variables.items():
+                self.variables[var] = val
 
     def terminate(self):
         """


-- 
To view, visit http://gerrit.ovirt.org/31587
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifa1d4c8866263a612bbfa2ef706f91d6fdca7a6b
Gerrit-PatchSet: 1
Gerrit-Project: mom
Gerrit-Branch: master
Gerrit-Owner: Francesco Romani <from...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to