This patch removes a useless conversion to/from JSON in the processing of any 'modify' operations inside the process_update2 method in Python IDL implementation.
Previous code will make resources creation take longer as the number of elements in the row grows because of that JSON conversion. This patch eliminates it and now the time remains consant regardless of the database contents improving performance and scaling. Reported-by: Daniel Alvarez Sanchez <dalva...@redhat.com> Reported-at: https://mail.openvswitch.org/pipermail/ovs-discuss/2018-February/046263.html Signed-off-by: Daniel Alvarez <dalva...@redhat.com> --- python/ovs/db/idl.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/python/ovs/db/idl.py b/python/ovs/db/idl.py index 60548bcf5..5a4d129c0 100644 --- a/python/ovs/db/idl.py +++ b/python/ovs/db/idl.py @@ -518,10 +518,8 @@ class Idl(object): if not row: raise error.Error('Modify non-existing row') - old_row_diff_json = self.__apply_diff(table, row, - row_update['modify']) - self.notify(ROW_UPDATE, row, - Row.from_json(self, table, uuid, old_row_diff_json)) + old_row = self.__apply_diff(table, row, row_update['modify']) + self.notify(ROW_UPDATE, row, Row(self, table, uuid, old_row)) changed = True else: raise error.Error('<row-update> unknown operation', @@ -584,7 +582,7 @@ class Idl(object): row_update[column.name] = self.__column_name(column) def __apply_diff(self, table, row, row_diff): - old_row_diff_json = {} + old_row = {} for column_name, datum_diff_json in six.iteritems(row_diff): column = table.columns.get(column_name) if not column: @@ -601,12 +599,12 @@ class Idl(object): % (column_name, table.name, e)) continue - old_row_diff_json[column_name] = row._data[column_name].to_json() + old_row[column_name] = row._data[column_name].copy() datum = row._data[column_name].diff(datum_diff) if datum != row._data[column_name]: row._data[column_name] = datum - return old_row_diff_json + return old_row def __row_update(self, table, row, row_json): changed = False -- 2.13.5 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev