diff --git a/ovsdbapp/backend/ovs_idl/connection.py b/ovsdbapp/backend/ovs_idl/connection.py index b370435f..d231609a 100644 --- a/ovsdbapp/backend/ovs_idl/connection.py +++ b/ovsdbapp/backend/ovs_idl/connection.py @@ -209,13 +209,25 @@ class OvsdbIdl(idl.Idl): schema = schema_helper.get_idl_schema() self._db = schema - self.tables = schema.tables - for table in schema.tables.values(): + removed = self.tables.keys() - schema.tables.keys() + added = schema.tables.keys() - self.tables.keys() + + # stop monitoring removed tables + for table in removed: + self.cond_change(table, [False]) + del self.tables[table] + + # add new tables as Idl.__init__ does + for table in (schema.tables[table] for table in added): + self.tables[table.name] = table for column in table.columns.values(): if not hasattr(column, 'alert'): column.alert = True table.need_table = False table.rows = custom_index.IndexedRows(table) table.idl = self - table.condition = [True] + try: + table.condition = idl.ConditionState() + except AttributeError: + table.condition = [True] table.cond_changed = False diff --git a/ovsdbapp/tests/functional/backend/ovs_idl/test_connection.py b/ovsdbapp/tests/functional/backend/ovs_idl/test_connection.py index 41749e8d..00d226c4 100644 --- a/ovsdbapp/tests/functional/backend/ovs_idl/test_connection.py +++ b/ovsdbapp/tests/functional/backend/ovs_idl/test_connection.py @@ -64,6 +64,9 @@ class TestOvsdbIdl(base.FunctionalTestCase): for table in tables: valid_func(table, self.idl.tables) + # ensure that the Idl still works after we update the tables + self.idl.run() + def test_add_new_table(self): tables = ["Port", "Interface"]