diff --git a/ovsdbapp/backend/ovs_idl/connection.py b/ovsdbapp/backend/ovs_idl/connection.py index 8dcef205..fe59cf66 100644 --- a/ovsdbapp/backend/ovs_idl/connection.py +++ b/ovsdbapp/backend/ovs_idl/connection.py @@ -21,7 +21,6 @@ from ovs import poller from six.moves import queue as Queue from ovsdbapp.backend.ovs_idl import idlutils -from ovsdbapp import exceptions if os.name == 'nt': from ovsdbapp.backend.ovs_idl.windows import connection_utils @@ -116,8 +115,8 @@ class Connection(object): return True def queue_txn(self, txn): - if not self._is_running: - raise exceptions.NotConnectedError(txn=txn) + # Even if we aren't started, we can queue a transaction and it will + # run when we are started self.txns.put(txn) diff --git a/ovsdbapp/exceptions.py b/ovsdbapp/exceptions.py index dfca7782..ca5f9c0a 100644 --- a/ovsdbapp/exceptions.py +++ b/ovsdbapp/exceptions.py @@ -59,7 +59,3 @@ class OvsdbConnectionUnavailable(OvsdbAppException): "'%(error)s'. Verify that the OVS and OVN services are " "available and that the 'ovn_nb_connection' and " "'ovn_sb_connection' configuration options are correct.") - - -class NotConnectedError(OvsdbAppException): - message = "Cannot commit transaction %(txn)s. Not connected" diff --git a/ovsdbapp/tests/functional/schema/open_vswitch/test_impl_idl.py b/ovsdbapp/tests/functional/schema/open_vswitch/test_impl_idl.py index 76003cfc..a2706882 100644 --- a/ovsdbapp/tests/functional/schema/open_vswitch/test_impl_idl.py +++ b/ovsdbapp/tests/functional/schema/open_vswitch/test_impl_idl.py @@ -104,11 +104,12 @@ class TestOvsdbIdl(base.FunctionalTestCase): def test_connection_reconnect(self): self.api.ovsdb_connection.stop() existsCmd = self.api.br_exists(self.brname) - self.assertRaises(exc.NotConnectedError, - existsCmd.execute, check_error=True) + txn = self.api.create_transaction(check_error=True) + txn.add(existsCmd) + self.api.ovsdb_connection.queue_txn(txn) self.api.ovsdb_connection.start() - exists = self.api.br_exists(self.brname).execute(check_error=True) - self.assertFalse(exists) + result = txn.results.get(timeout=self.api.ovsdb_connection.timeout) + self.assertEqual(result, [False]) def test_connection_disconnect_timeout(self): _is_running_mock = mock.PropertyMock(return_value=True)