ovs.db.idl: Actually use Idl.__modify_row()'s return value.
authorBen Pfaff <blp@nicira.com>
Tue, 23 Aug 2011 16:26:29 +0000 (09:26 -0700)
committerBen Pfaff <blp@nicira.com>
Wed, 24 Aug 2011 18:57:43 +0000 (11:57 -0700)
Idl.__parse_row_update() assumed that every change that the database server
sent down actually modified the database.  This is generally true, but
since Idl.__modify_row() already returns whether there was a change, we
might as well use it.

Reported-by: Reid Price <reid@nicira.com>
python/ovs/db/idl.py

index 2a04a98f4322e1beeaac9c4f352fafeef40d917c..abb7a444a438c7cba2fed672b28a694f9184831a 100644 (file)
@@ -222,32 +222,37 @@ class Idl:
     def __parse_row_update(self, table, uuid, old, new):
         """Returns True if a column changed, False otherwise."""
         row = self.data[table.name].get(uuid)
+        changed = False
         if not new:
             # Delete row.
             if row:
                 del self.data[table.name][uuid]
+                changed = True
             else:
                 # XXX rate-limit
                 logging.warning("cannot delete missing row %s from table %s"
                                 % (uuid, table.name))
-                return False
         elif not old:
             # Insert row.
             if not row:
                 row = self.__create_row(table, uuid)
+                changed = True
             else:
                 # XXX rate-limit
                 logging.warning("cannot add existing row %s to table %s"
                                 % (uuid, table.name))
-            self.__modify_row(table, row, new)
+            if self.__modify_row(table, row, new):
+                changed = True
         else:
             if not row:
                 row = self.__create_row(table, uuid)
+                changed = True
                 # XXX rate-limit
                 logging.warning("cannot modify missing row %s in table %s"
                                 % (uuid, table_name))
-            self.__modify_row(table, row, new)
-        return True
+            if self.__modify_row(table, row, new):
+                changed = True
+        return changed
 
     def __modify_row(self, table, row, row_json):
         changed = False