)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"bf22d07818c5f44e3da41231ba51bf8fbc5cc5f4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"26fb2de0_361faeaa","updated":"2023-03-03 17:38:22.000000000","message":"@stephenfin can you think of a good way we could maybe have this run in CI against 1.4 **and** 2.0?  there\u0027d ideally be two different jobs right?   We will need a real SQLAlchemy 2.0 job in any case if we want to be running on both 1.4 and 2.0 at the same time.","commit_id":"3519168e74cb6ade68fd1aff359b36bb316d2582"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"f330f9ed6227ed48105d9edd6ad17af6c3b0f6ef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4eeedd39_f8d490ba","updated":"2023-03-04 15:50:41.000000000","message":"this is working, the \"native\" preping tests ran which means SQLAlchemy 2.0.5dev got installed , tests passed\n\noslo_db.tests.sqlalchemy.test_exc_filters.MySQLNativePrePingTests.test_mysql_galera_non_primary_disconnected [0.173444s] ... ok\noslo_db.tests.sqlalchemy.test_exc_filters.PostgreSQLNativePrePingTests.test_postgresql_ping_listener_disconnected [0.424670s] ... ok\n\nso on the SQLAlchemy side I can merge my pre-ping updates here and get ready for 2.0.5","commit_id":"3519168e74cb6ade68fd1aff359b36bb316d2582"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"4457f5b50313cb832f62c5af062f6c039a86d04f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3586e781_4e28da3f","updated":"2023-03-21 23:51:41.000000000","message":"OK this is all split up now, so I just have to get all these pep8 errors, somehow without using Black (that I think openstack didn\u0027t manage to get onto ?)....OK !","commit_id":"a41c34add8df3482f941950800ce85deb0a69398"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4dc2f9b6c0b61ec29c216021776ee27454aa8596","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"399bdfc9_270b11d5","in_reply_to":"3586e781_4e28da3f","updated":"2023-03-22 11:23:46.000000000","message":"Thanks. I\u0027ve tried to get black adopted. No success so far 😞 We do have pre-commit though, which can be handy to highlight issues as you go.\n\n  pip install --user pre-commit\n  pre-commit install","commit_id":"a41c34add8df3482f941950800ce85deb0a69398"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c0dc248367486bc22d638ad45334759b138b73e1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"95ca6cfb_92efaf2e","in_reply_to":"399bdfc9_270b11d5","updated":"2023-03-22 11:24:00.000000000","message":"Fixed the issues for you also.","commit_id":"a41c34add8df3482f941950800ce85deb0a69398"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"13b821e0029bcb70f71d8c51ea6b0684f08bcf18","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"04d0ebb6_49e75a94","in_reply_to":"95ca6cfb_92efaf2e","updated":"2023-03-22 13:00:53.000000000","message":"thanks!!","commit_id":"a41c34add8df3482f941950800ce85deb0a69398"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0f1318e399e2e1aa554968f89e9ab133fd240424","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"83a93020_914833f8","updated":"2023-04-04 12:46:34.000000000","message":"Can I rebase this patch?","commit_id":"e12f759f6dac97863c9a5e907ab478856475c775"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"78a92c6370b83ae5104510059a9163884edf8b08","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"a54434a1_61e9fd90","in_reply_to":"83a93020_914833f8","updated":"2023-04-04 12:59:19.000000000","message":"yes.  I thought I had gotten to it but apparently not.  thanks","commit_id":"e12f759f6dac97863c9a5e907ab478856475c775"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"292304836cfb4d7e33ceb775be6b3e495f24ec41","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"d4967ae4_42a297bc","updated":"2023-04-05 12:37:26.000000000","message":"Will bump to +2 once I get https://review.opendev.org/c/openstack/oslo.db/+/879546/ passing.\n\nPerhaps I should roll that ahead of this, make it non-voting, then switch it to voting in this change? I might do that once we get it passing...","commit_id":"7bf46a197b065de97b645475feeb5f5c5a98c6b1"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"470d257f46aae671ba2c0896561340c52caa7380","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"b3e8095b_c2a431ec","updated":"2023-04-06 13:37:14.000000000","message":"has one merge artifact to fix then everything else is good","commit_id":"7bf46a197b065de97b645475feeb5f5c5a98c6b1"}],"oslo_db/sqlalchemy/compat/__init__.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8d2b40810fd52b6475260b9c5c944c8ff7699bda","unresolved":true,"context_lines":[{"line_number":9,"context_line":"        return value"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"_vers \u003d tuple("},{"line_number":12,"context_line":"    [_safe_int(x) for x in re.findall(r\"(\\d+|[abc]\\d)\", __version__)]"},{"line_number":13,"context_line":")"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"sqla_2 \u003d _vers \u003e\u003d (2, )"}],"source_content_type":"text/x-python","patch_set":4,"id":"79449b85_74b0884d","line":12,"updated":"2023-03-09 15:18:08.000000000","message":"Can we use importlib.metadata for this?","commit_id":"3519168e74cb6ade68fd1aff359b36bb316d2582"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"92998d711f022b0829e0700c7e7b7720a36a6710","unresolved":false,"context_lines":[{"line_number":9,"context_line":"        return value"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"_vers \u003d tuple("},{"line_number":12,"context_line":"    [_safe_int(x) for x in re.findall(r\"(\\d+|[abc]\\d)\", __version__)]"},{"line_number":13,"context_line":")"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"sqla_2 \u003d _vers \u003e\u003d (2, )"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba37ca3b_d8241484","line":12,"in_reply_to":"0db0b048_60157fe0","updated":"2023-03-21 18:12:36.000000000","message":"looks like we have oslo_utils.versionutils","commit_id":"3519168e74cb6ade68fd1aff359b36bb316d2582"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"1eba66818750e43285059b77442ebc8a63c145be","unresolved":true,"context_lines":[{"line_number":9,"context_line":"        return value"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"_vers \u003d tuple("},{"line_number":12,"context_line":"    [_safe_int(x) for x in re.findall(r\"(\\d+|[abc]\\d)\", __version__)]"},{"line_number":13,"context_line":")"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"sqla_2 \u003d _vers \u003e\u003d (2, )"}],"source_content_type":"text/x-python","patch_set":4,"id":"0db0b048_60157fe0","line":12,"in_reply_to":"79449b85_74b0884d","updated":"2023-03-09 15:40:15.000000000","message":"we can use whatever version parsing thing openstack likes to use. I\u0027ve used importlib.metadata but does it return a Version object?  that would be fine (didn\u0027t know it did that)","commit_id":"3519168e74cb6ade68fd1aff359b36bb316d2582"}],"oslo_db/sqlalchemy/engines.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8d2b40810fd52b6475260b9c5c944c8ff7699bda","unresolved":true,"context_lines":[{"line_number":89,"context_line":"        # run the select again to re-validate the Connection."},{"line_number":90,"context_line":"        LOG.exception("},{"line_number":91,"context_line":"            \u0027Database connection was found disconnected; reconnecting\u0027)"},{"line_number":92,"context_line":"        if hasattr(connection, \"rollback\"):"},{"line_number":93,"context_line":"            connection.rollback()"},{"line_number":94,"context_line":"        connection.scalar(select(1))"},{"line_number":95,"context_line":"    finally:"}],"source_content_type":"text/x-python","patch_set":4,"id":"aba35154_ed736647","line":92,"updated":"2023-03-09 15:18:08.000000000","message":"Can we instead check for \u0027compat.sqla_2\u0027, assuming this is a 2.0 thing? It\u0027ll be a good prompt to remove this conditional eventually.\n\nLater: do we actually need this? This will never trigger on 2.0, since we\u0027ll use native there","commit_id":"3519168e74cb6ade68fd1aff359b36bb316d2582"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"1eba66818750e43285059b77442ebc8a63c145be","unresolved":true,"context_lines":[{"line_number":89,"context_line":"        # run the select again to re-validate the Connection."},{"line_number":90,"context_line":"        LOG.exception("},{"line_number":91,"context_line":"            \u0027Database connection was found disconnected; reconnecting\u0027)"},{"line_number":92,"context_line":"        if hasattr(connection, \"rollback\"):"},{"line_number":93,"context_line":"            connection.rollback()"},{"line_number":94,"context_line":"        connection.scalar(select(1))"},{"line_number":95,"context_line":"    finally:"}],"source_content_type":"text/x-python","patch_set":4,"id":"c773dbcb_4ccd260b","line":92,"in_reply_to":"aba35154_ed736647","updated":"2023-03-09 15:40:15.000000000","message":"yes this can be the compat.sqla_2 check.\n\nLater: at the moment, I am still testing this routine on SQLAlchemy 2 as well, even though it\u0027s not used by engines.create_engine()..  I think as long as this function is here, assuming it doesnt raise NotImplementedError for sqla_2, it should do the right thing.    That is, it should either work if used, or complain loudly if not supported.","commit_id":"3519168e74cb6ade68fd1aff359b36bb316d2582"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"92998d711f022b0829e0700c7e7b7720a36a6710","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        # run the select again to re-validate the Connection."},{"line_number":90,"context_line":"        LOG.exception("},{"line_number":91,"context_line":"            \u0027Database connection was found disconnected; reconnecting\u0027)"},{"line_number":92,"context_line":"        if hasattr(connection, \"rollback\"):"},{"line_number":93,"context_line":"            connection.rollback()"},{"line_number":94,"context_line":"        connection.scalar(select(1))"},{"line_number":95,"context_line":"    finally:"}],"source_content_type":"text/x-python","patch_set":4,"id":"22dc3ed6_d45396df","line":92,"in_reply_to":"c773dbcb_4ccd260b","updated":"2023-03-21 18:12:36.000000000","message":"this now comes from ralonsoh\u0027s patch","commit_id":"3519168e74cb6ade68fd1aff359b36bb316d2582"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8d2b40810fd52b6475260b9c5c944c8ff7699bda","unresolved":true,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    max_pool_size \u003d kw.get(\"max_pool_size\", None)"},{"line_number":262,"context_line":"    max_overflow \u003d kw.get(\"max_overflow\", None)"},{"line_number":263,"context_line":"    pool_timeout \u003d kw.get(\"pool_timeout\", None)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    pool_class \u003d url.get_dialect().get_pool_class(url)"},{"line_number":266,"context_line":"    if issubclass(pool_class, pool.QueuePool):"}],"source_content_type":"text/x-python","patch_set":4,"id":"297fa715_40600d66","line":263,"updated":"2023-03-09 15:18:08.000000000","message":"Could you add a note about why this is needed?","commit_id":"3519168e74cb6ade68fd1aff359b36bb316d2582"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"1eba66818750e43285059b77442ebc8a63c145be","unresolved":true,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    max_pool_size \u003d kw.get(\"max_pool_size\", None)"},{"line_number":262,"context_line":"    max_overflow \u003d kw.get(\"max_overflow\", None)"},{"line_number":263,"context_line":"    pool_timeout \u003d kw.get(\"pool_timeout\", None)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    pool_class \u003d url.get_dialect().get_pool_class(url)"},{"line_number":266,"context_line":"    if issubclass(pool_class, pool.QueuePool):"}],"source_content_type":"text/x-python","patch_set":4,"id":"943c26d7_bbe35da8","line":263,"in_reply_to":"297fa715_40600d66","updated":"2023-03-09 15:40:15.000000000","message":"Yes, I had to change the calling interface of _init_connection_args() so that the kw can be modified in place, to support the fact that SQLite uses QueuePool on SQLAlchemy 2, which we want to switch back to NullPool to avoid lots more weird regressions.  Previously the kw were passed here as `**kw`.","commit_id":"3519168e74cb6ade68fd1aff359b36bb316d2582"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"92998d711f022b0829e0700c7e7b7720a36a6710","unresolved":false,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    max_pool_size \u003d kw.get(\"max_pool_size\", None)"},{"line_number":262,"context_line":"    max_overflow \u003d kw.get(\"max_overflow\", None)"},{"line_number":263,"context_line":"    pool_timeout \u003d kw.get(\"pool_timeout\", None)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    pool_class \u003d url.get_dialect().get_pool_class(url)"},{"line_number":266,"context_line":"    if issubclass(pool_class, pool.QueuePool):"}],"source_content_type":"text/x-python","patch_set":4,"id":"79044523_3b510b36","line":263,"in_reply_to":"943c26d7_bbe35da8","updated":"2023-03-21 18:12:36.000000000","message":"added a note","commit_id":"3519168e74cb6ade68fd1aff359b36bb316d2582"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"1eba66818750e43285059b77442ebc8a63c145be","unresolved":true,"context_lines":[{"line_number":283,"context_line":"    elif issubclass(pool_class, pool.QueuePool):"},{"line_number":284,"context_line":"        # SQLAlchemy 2.0 uses QueuePool for sqlite file DBs; put NullPool"},{"line_number":285,"context_line":"        # back to avoid compatibility issues"},{"line_number":286,"context_line":"        kw.pop(\"max_pool_size\", None)"},{"line_number":287,"context_line":"        kw.pop(\"max_overflow\", None)"},{"line_number":288,"context_line":"        engine_args.pop(\"max_pool_size\", None)"},{"line_number":289,"context_line":"        engine_args.pop(\"max_overflow\", None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"523eb336_ec117133","line":286,"updated":"2023-03-09 15:40:15.000000000","message":"we need to pop the QueuePool arguments here because we are changing the pool class.","commit_id":"3519168e74cb6ade68fd1aff359b36bb316d2582"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"92998d711f022b0829e0700c7e7b7720a36a6710","unresolved":false,"context_lines":[{"line_number":283,"context_line":"    elif issubclass(pool_class, pool.QueuePool):"},{"line_number":284,"context_line":"        # SQLAlchemy 2.0 uses QueuePool for sqlite file DBs; put NullPool"},{"line_number":285,"context_line":"        # back to avoid compatibility issues"},{"line_number":286,"context_line":"        kw.pop(\"max_pool_size\", None)"},{"line_number":287,"context_line":"        kw.pop(\"max_overflow\", None)"},{"line_number":288,"context_line":"        engine_args.pop(\"max_pool_size\", None)"},{"line_number":289,"context_line":"        engine_args.pop(\"max_overflow\", None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"cf505e58_c153b8b9","line":286,"in_reply_to":"523eb336_ec117133","updated":"2023-03-21 18:12:36.000000000","message":"Done","commit_id":"3519168e74cb6ade68fd1aff359b36bb316d2582"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"470d257f46aae671ba2c0896561340c52caa7380","unresolved":true,"context_lines":[{"line_number":90,"context_line":"            connection.rollback()"},{"line_number":91,"context_line":"        connection.scalar(select(1))"},{"line_number":92,"context_line":"    finally:"},{"line_number":93,"context_line":"        if hasattr(connection, \"rollback\"):"},{"line_number":94,"context_line":"            connection.rollback()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        connection.should_close_with_result \u003d save_should_close_with_result"}],"source_content_type":"text/x-python","patch_set":11,"id":"5bdcf3f8_e87518e3","line":93,"updated":"2023-04-06 13:37:14.000000000","message":"oops looks like a merge artifact, rollback being called twice here","commit_id":"7bf46a197b065de97b645475feeb5f5c5a98c6b1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"14126f7becda9fe9feeef3e35b0a4d33464ce362","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            connection.rollback()"},{"line_number":91,"context_line":"        connection.scalar(select(1))"},{"line_number":92,"context_line":"    finally:"},{"line_number":93,"context_line":"        if hasattr(connection, \"rollback\"):"},{"line_number":94,"context_line":"            connection.rollback()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        connection.should_close_with_result \u003d save_should_close_with_result"}],"source_content_type":"text/x-python","patch_set":11,"id":"31ff32c9_fc8903ae","line":93,"in_reply_to":"5bdcf3f8_e87518e3","updated":"2023-04-06 13:55:19.000000000","message":"Done","commit_id":"7bf46a197b065de97b645475feeb5f5c5a98c6b1"}],"oslo_db/sqlalchemy/provision.py":[{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"3b956ba7ee25fedd9a6c9c1af433102f49d43f85","unresolved":true,"context_lines":[{"line_number":581,"context_line":"        return \"postgresql+psycopg2://openstack_citest:openstack_citest@localhost/postgres\"  # noqa: E501"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def create_named_database(self, engine, ident, conditional\u003dFalse):"},{"line_number":584,"context_line":"        with engine.connect().execution_options("},{"line_number":585,"context_line":"            isolation_level\u003d\"AUTOCOMMIT\","},{"line_number":586,"context_line":"        ) as conn:"},{"line_number":587,"context_line":"            if not conditional or not self.database_exists(conn, ident):"}],"source_content_type":"text/x-python","patch_set":9,"id":"b6d8eafa_5668b019","line":584,"updated":"2023-04-04 13:00:15.000000000","message":"needs the begin() thing here also","commit_id":"e12f759f6dac97863c9a5e907ab478856475c775"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"500097827e4e8b7c0aa2ba3e9e18b9787826884e","unresolved":false,"context_lines":[{"line_number":581,"context_line":"        return \"postgresql+psycopg2://openstack_citest:openstack_citest@localhost/postgres\"  # noqa: E501"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def create_named_database(self, engine, ident, conditional\u003dFalse):"},{"line_number":584,"context_line":"        with engine.connect().execution_options("},{"line_number":585,"context_line":"            isolation_level\u003d\"AUTOCOMMIT\","},{"line_number":586,"context_line":"        ) as conn:"},{"line_number":587,"context_line":"            if not conditional or not self.database_exists(conn, ident):"}],"source_content_type":"text/x-python","patch_set":9,"id":"ed9d75fb_6c00f69e","line":584,"in_reply_to":"2ed21df5_be3f0466","updated":"2023-04-06 13:24:47.000000000","message":"oh there\u0027s no begin() inside here, that\u0027s why.  it\u0027s fine as is, sorry I was just going from the other gerrit involving this file","commit_id":"e12f759f6dac97863c9a5e907ab478856475c775"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44f02e5c5397a7da08f06f65f507a41522bdc8ef","unresolved":true,"context_lines":[{"line_number":581,"context_line":"        return \"postgresql+psycopg2://openstack_citest:openstack_citest@localhost/postgres\"  # noqa: E501"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def create_named_database(self, engine, ident, conditional\u003dFalse):"},{"line_number":584,"context_line":"        with engine.connect().execution_options("},{"line_number":585,"context_line":"            isolation_level\u003d\"AUTOCOMMIT\","},{"line_number":586,"context_line":"        ) as conn:"},{"line_number":587,"context_line":"            if not conditional or not self.database_exists(conn, ident):"}],"source_content_type":"text/x-python","patch_set":9,"id":"2ed21df5_be3f0466","line":584,"in_reply_to":"b6d8eafa_5668b019","updated":"2023-04-06 08:57:51.000000000","message":"This seems to work fine with or without this:\n\n  \u003e\u003e\u003e import sqlalchemy                                                                                                                                         \n  \u003e\u003e\u003e from sqlalchemy.engine import url as sa_url                                                                                                               \n  \u003e\u003e\u003e url \u003d sa_url.make_url(\u0027postgresql+psycopg2://openstack_citest:openstack_citest@localhost/postgres\u0027)                                                       \n  \u003e\u003e\u003e eng \u003d sqlalchemy.create_engine(url)\n\nWith:\n\n  \u003e\u003e\u003e with eng.connect().execution_options(isolation_level\u003d\u0027AUTOCOMMIT\u0027) as conn, conn.begin():\n  ...     conn.exec_driver_sql(\u0027CREATE DATABASE openstack_citest\u0027)\n  ... \n  \u003csqlalchemy.engine.cursor.CursorResult object at 0x7f8b01e178c0\u003e\n\nWithout:\n\n  \u003e\u003e\u003e with eng.connect().execution_options(isolation_level\u003d\u0027AUTOCOMMIT\u0027) as conn:\n  ...     conn.exec_driver_sql(\u0027DROP DATABASE openstack_citest\u0027)\n  ... \n  \u003csqlalchemy.engine.cursor.CursorResult object at 0x7f8b01e17620\u003e\n\n(To confirm they\u0027re doing something)\n\n  \u003e\u003e\u003e with eng.connect().execution_options(isolation_level\u003d\u0027AUTOCOMMIT\u0027) as conn:\n  ...     conn.exec_driver_sql(\u0027DROP DATABASE openstack_citest\u0027)\n  ... \n  Traceback (most recent call last):\n    File \"/tmp/venv/lib64/python3.11/site-packages/sqlalchemy/engine/base.py\", line 1964, in _exec_single_context\n      self.dialect.do_execute(\n    File \"/tmp/venv/lib64/python3.11/site-packages/sqlalchemy/engine/default.py\", line 748, in do_execute\n      cursor.execute(statement, parameters)\n  psycopg2.errors.InvalidCatalogName: database \"openstack_citest\" does not exist\n   ...\n\nSo what do we want to do here?","commit_id":"e12f759f6dac97863c9a5e907ab478856475c775"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"3b956ba7ee25fedd9a6c9c1af433102f49d43f85","unresolved":true,"context_lines":[{"line_number":588,"context_line":"                conn.exec_driver_sql(\"CREATE DATABASE %s\" % ident)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    def drop_named_database(self, engine, ident, conditional\u003dFalse):"},{"line_number":591,"context_line":"        with engine.connect().execution_options("},{"line_number":592,"context_line":"            isolation_level\u003d\"AUTOCOMMIT\","},{"line_number":593,"context_line":"        ) as conn:"},{"line_number":594,"context_line":"            self._close_out_database_users(conn, ident)"}],"source_content_type":"text/x-python","patch_set":9,"id":"844bd09c_2896f506","line":591,"updated":"2023-04-04 13:00:15.000000000","message":"and here","commit_id":"e12f759f6dac97863c9a5e907ab478856475c775"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"500097827e4e8b7c0aa2ba3e9e18b9787826884e","unresolved":false,"context_lines":[{"line_number":588,"context_line":"                conn.exec_driver_sql(\"CREATE DATABASE %s\" % ident)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    def drop_named_database(self, engine, ident, conditional\u003dFalse):"},{"line_number":591,"context_line":"        with engine.connect().execution_options("},{"line_number":592,"context_line":"            isolation_level\u003d\"AUTOCOMMIT\","},{"line_number":593,"context_line":"        ) as conn:"},{"line_number":594,"context_line":"            self._close_out_database_users(conn, ident)"}],"source_content_type":"text/x-python","patch_set":9,"id":"67a6e991_088a0b7a","line":591,"in_reply_to":"844bd09c_2896f506","updated":"2023-04-06 13:24:47.000000000","message":"Done","commit_id":"e12f759f6dac97863c9a5e907ab478856475c775"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"470d257f46aae671ba2c0896561340c52caa7380","unresolved":false,"context_lines":[{"line_number":585,"context_line":"            isolation_level\u003d\"AUTOCOMMIT\","},{"line_number":586,"context_line":"        ) as conn:"},{"line_number":587,"context_line":"            if not conditional or not self.database_exists(conn, ident):"},{"line_number":588,"context_line":"                with conn.begin():"},{"line_number":589,"context_line":"                    conn.exec_driver_sql(\"CREATE DATABASE %s\" % ident)"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"    def drop_named_database(self, engine, ident, conditional\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":11,"id":"70bbf948_898b2aad","side":"PARENT","line":588,"updated":"2023-04-06 13:37:14.000000000","message":"ah OK, I removed the begin() here.  we\u0027re in autocommit for this operation in PG so there\u0027s no transactional commands needed","commit_id":"da4f13e7345653eba8aab5b8aceeaeff7367989e"}],"tox.ini":[{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"fefa5ca1fff4c479bc4412e5672655c519029eb3","unresolved":true,"context_lines":[{"line_number":25,"context_line":"commands \u003d"},{"line_number":26,"context_line":"  # TODO(zzzeek) some way to test with both SQLA 1.4 and 2.0 in one run but not"},{"line_number":27,"context_line":"  # overwriting the same test folder would be nice"},{"line_number":28,"context_line":"  python -m pip install sqlalchemy\u003e\u003d2.0.7"},{"line_number":29,"context_line":"  {env:PIFPAF_MYSQL:} {env:PIFPAF_POSTGRESQL:} {env:BASECOMMAND:} {posargs}"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""}],"source_content_type":"text/x-properties","patch_set":9,"id":"768f46f0_da1fb170","line":28,"updated":"2023-03-22 12:45:35.000000000","message":"@stephenfin how do we want to approach this part?   I think for this to be done correctly, the tox jobs need to either run two separate suites for either SQLAlchemy or we have to add new tox jobs for SQLAlchemy 2.0.  The latter is likely what would be done, how to make that happen?","commit_id":"e12f759f6dac97863c9a5e907ab478856475c775"},{"author":{"_account_id":11816,"name":"mike_mp@zzzcomputing.com","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"c6844a146ed66b4f57b60db753966567594bd24c","unresolved":true,"context_lines":[{"line_number":25,"context_line":"commands \u003d"},{"line_number":26,"context_line":"  # TODO(zzzeek) some way to test with both SQLA 1.4 and 2.0 in one run but not"},{"line_number":27,"context_line":"  # overwriting the same test folder would be nice"},{"line_number":28,"context_line":"  python -m pip install sqlalchemy\u003e\u003d2.0.7"},{"line_number":29,"context_line":"  {env:PIFPAF_MYSQL:} {env:PIFPAF_POSTGRESQL:} {env:BASECOMMAND:} {posargs}"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""}],"source_content_type":"text/x-properties","patch_set":9,"id":"bcbb87b9_1554abdb","line":28,"in_reply_to":"432c70e8_427a786f","updated":"2023-03-22 14:27:57.000000000","message":"dont know \"u-c bump\" term .    should i leave this here and +2 the patch or remove it first then +2 ?","commit_id":"e12f759f6dac97863c9a5e907ab478856475c775"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"48eaae4a4312b0ff8d6fab0107d0be5e45a2844a","unresolved":true,"context_lines":[{"line_number":25,"context_line":"commands \u003d"},{"line_number":26,"context_line":"  # TODO(zzzeek) some way to test with both SQLA 1.4 and 2.0 in one run but not"},{"line_number":27,"context_line":"  # overwriting the same test folder would be nice"},{"line_number":28,"context_line":"  python -m pip install sqlalchemy\u003e\u003d2.0.7"},{"line_number":29,"context_line":"  {env:PIFPAF_MYSQL:} {env:PIFPAF_POSTGRESQL:} {env:BASECOMMAND:} {posargs}"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""}],"source_content_type":"text/x-properties","patch_set":9,"id":"432c70e8_427a786f","line":28,"in_reply_to":"768f46f0_da1fb170","updated":"2023-03-22 13:10:09.000000000","message":"We\u0027ll get this automatically once the upper-constraints bump patch merges. Until then, I think we need a new job, yes. We can leave a TODO to remove it once the u-c bump merges, naturally.","commit_id":"e12f759f6dac97863c9a5e907ab478856475c775"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44f02e5c5397a7da08f06f65f507a41522bdc8ef","unresolved":false,"context_lines":[{"line_number":25,"context_line":"commands \u003d"},{"line_number":26,"context_line":"  # TODO(zzzeek) some way to test with both SQLA 1.4 and 2.0 in one run but not"},{"line_number":27,"context_line":"  # overwriting the same test folder would be nice"},{"line_number":28,"context_line":"  python -m pip install sqlalchemy\u003e\u003d2.0.7"},{"line_number":29,"context_line":"  {env:PIFPAF_MYSQL:} {env:PIFPAF_POSTGRESQL:} {env:BASECOMMAND:} {posargs}"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""}],"source_content_type":"text/x-properties","patch_set":9,"id":"00ef229b_1134a93f","line":28,"in_reply_to":"89325d79_b9c789e2","updated":"2023-04-06 08:57:51.000000000","message":"Done","commit_id":"e12f759f6dac97863c9a5e907ab478856475c775"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3ad6072fafd1f907e65632082ca9ffb1a1b485a3","unresolved":true,"context_lines":[{"line_number":25,"context_line":"commands \u003d"},{"line_number":26,"context_line":"  # TODO(zzzeek) some way to test with both SQLA 1.4 and 2.0 in one run but not"},{"line_number":27,"context_line":"  # overwriting the same test folder would be nice"},{"line_number":28,"context_line":"  python -m pip install sqlalchemy\u003e\u003d2.0.7"},{"line_number":29,"context_line":"  {env:PIFPAF_MYSQL:} {env:PIFPAF_POSTGRESQL:} {env:BASECOMMAND:} {posargs}"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""}],"source_content_type":"text/x-properties","patch_set":9,"id":"89325d79_b9c789e2","line":28,"in_reply_to":"bcbb87b9_1554abdb","updated":"2023-03-22 19:05:52.000000000","message":"Sorry, upper-constraint bump.\n\nI\u0027d rather we fixed this here rather than potentially merge it and forget about it. This should do the trick.\n\n  # TODO(zzzeek): Remove this when upper-constraints allows sqlalchemy 2.x\n  [tox:py{3,38,39,310}-sqla2]\n  description \u003d\n    Run unit tests with SQLAlchemy 2.x\n  commands \u003d\n    python -m pip install sqlalchemy\u003e\u003d2.0.7\n    {[testenv]commands}\n\nThe zuul configuration shouldn\u0027t be too tricky then. Just a case of deriving from openstack-tox or whatever it\u0027s called. I can take a look later this week if you don\u0027t beat me to it.","commit_id":"e12f759f6dac97863c9a5e907ab478856475c775"}]}
