python: Fix writing to non-"alert" column for newly inserted row.
authorSumit Garg <sumit@extremenetworks.com>
Thu, 25 Jun 2015 15:51:42 +0000 (08:51 -0700)
committerBen Pfaff <blp@nicira.com>
Thu, 25 Jun 2015 15:54:29 +0000 (08:54 -0700)
When 'alert' was turned off on a column, the code was erroring out when
value for that column was being set in a newly inserted row. This is
because the row._data was None at this time.

It seems that new rows are not initialized to defaults and that's why the
NULL error happens.  IMO a newly inserted row should automatically get
intialized to default values.  This new behavior can be implemented as a
separate improvement sometime in the future.

For now, I don't see an issue with adding the additional check. This new
check can continue as-is even after the new behavior is implemented.

Signed-off-by: Sumit Garg <sumit@extremenetworks.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
python/ovs/db/idl.py

index a6584a8..f074dbf 100644 (file)
@@ -1074,7 +1074,7 @@ class Transaction(object):
         # transaction only does writes of existing values, without making any
         # real changes, we will drop the whole transaction later in
         # ovsdb_idl_txn_commit().)
-        if not column.alert and row._data.get(column.name) == datum:
+        if not column.alert and row._data and row._data.get(column.name) == datum:
             new_value = row._changes.get(column.name)
             if new_value is None or new_value == datum:
                 return