From a46f09ffc59ba69c5b63b2fb61b319267d3e7273 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Mon, 29 Jan 2018 18:25:19 -0500 Subject: [PATCH] Reverse role of synchronous_reader Repaired the "synchronous_reader" modifier of enginefacade so that it refers to the "writer" engine when set to True, thereby allowing "synchronous" behavior with the writer. When set to False, this is "asynchronous", so this should be associated with the async engines. The flag had the reverse behavior previously. Change-Id: Id7fea7562ba90eb710176d497af103303f230531 Closes-bug: #1746116 (cherry picked from commit 5ca329884d492d78e623e2313142238eb256f1a6) --- oslo_db/sqlalchemy/enginefacade.py | 6 ++++-- oslo_db/tests/sqlalchemy/test_enginefacade.py | 18 +++++++++--------- ...ix_synchronous_reader-ca442ca9f07470ec.yaml | 8 ++++++++ 3 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 releasenotes/notes/fix_synchronous_reader-ca442ca9f07470ec.yaml diff --git a/oslo_db/sqlalchemy/enginefacade.py b/oslo_db/sqlalchemy/enginefacade.py index 752c6cab..22c5935e 100644 --- a/oslo_db/sqlalchemy/enginefacade.py +++ b/oslo_db/sqlalchemy/enginefacade.py @@ -388,7 +388,8 @@ class _TransactionFactory(object): self._start() if mode is _WRITER: return self._writer_engine.connect() - elif self.synchronous_reader or mode is _ASYNC_READER: + elif mode is _ASYNC_READER or \ + (mode is _READER and not self.synchronous_reader): return self._reader_engine.connect() else: return self._writer_engine.connect() @@ -403,7 +404,8 @@ class _TransactionFactory(object): kw['bind'] = bind if mode is _WRITER: return self._writer_maker(**kw) - elif self.synchronous_reader or mode is _ASYNC_READER: + elif mode is _ASYNC_READER or \ + (mode is _READER and not self.synchronous_reader): return self._reader_maker(**kw) else: return self._writer_maker(**kw) diff --git a/oslo_db/tests/sqlalchemy/test_enginefacade.py b/oslo_db/tests/sqlalchemy/test_enginefacade.py index 303a8dd8..5ca5f91c 100644 --- a/oslo_db/tests/sqlalchemy/test_enginefacade.py +++ b/oslo_db/tests/sqlalchemy/test_enginefacade.py @@ -135,15 +135,15 @@ class MockFacadeTest(oslo_test_base.BaseTestCase): async_reader_maker = writer_maker if self.synchronous_reader: - reader_conn = async_reader_conn - reader_engine = async_reader_engine - reader_session = async_reader_session - reader_maker = async_reader_maker - else: reader_conn = writer_conn reader_engine = writer_engine reader_session = writer_session reader_maker = writer_maker + else: + reader_conn = async_reader_conn + reader_engine = async_reader_engine + reader_session = async_reader_session + reader_maker = async_reader_maker self.connections = AssertDataSource( writer_conn, reader_conn, async_reader_conn @@ -236,9 +236,9 @@ class MockFacadeTest(oslo_test_base.BaseTestCase): async_reader_engine = writer_engine if self.synchronous_reader: - reader_engine = async_reader_engine - else: reader_engine = writer_engine + else: + reader_engine = async_reader_engine engines = AssertDataSource( writer_engine, reader_engine, async_reader_engine) @@ -333,9 +333,9 @@ class MockFacadeTest(oslo_test_base.BaseTestCase): async_reader_maker = writer_maker if self.synchronous_reader: - reader_maker = async_reader_maker - else: reader_maker = writer_maker + else: + reader_maker = async_reader_maker makers = AssertDataSource( writer_maker, diff --git a/releasenotes/notes/fix_synchronous_reader-ca442ca9f07470ec.yaml b/releasenotes/notes/fix_synchronous_reader-ca442ca9f07470ec.yaml new file mode 100644 index 00000000..c842b7d1 --- /dev/null +++ b/releasenotes/notes/fix_synchronous_reader-ca442ca9f07470ec.yaml @@ -0,0 +1,8 @@ +--- +fixes: + - | + Repaired the "synchronous_reader" modifier of enginefacade so that it + refers to the "writer" engine when set to True, thereby allowing + "synchronous" behavior with the writer. When set to False, this is + "asynchronous", so this should be associated with the async engines. + The flag had the reverse behavior previously.