)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"80e656ca37432c01f0abfc89d5004905dbe5f80d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"using alembic the framwork can\u0027t be used exactly. This is based on the"},{"line_number":12,"context_line":"in-progress patch from subunit2sql doing the same with alembic. [1]"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"[1] https://review.openstack.org/124938"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I6e330f9e5a0fdbd5fd46a9b090b109b99d194bb0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"5a5ae5dd_ecdaa84b","line":14,"range":{"start_line":14,"start_character":4,"end_line":14,"end_character":39},"updated":"2016-02-05 13:03:46.000000000","message":"I think better to use https://review.openstack.org/#/c/99965/ and probably you should add an author of that change and yourself as a co-author.","commit_id":"84e34c34b80d41a881526030a0e8a0b882f539c8"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"82530c68f5c637885c9b1ffa9463d019d6d958e7","unresolved":false,"context_lines":[{"line_number":11,"context_line":"using alembic the framwork can\u0027t be used exactly. This is based on the"},{"line_number":12,"context_line":"in-progress patch from subunit2sql doing the same with alembic. [1]"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"[1] https://review.openstack.org/124938"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I6e330f9e5a0fdbd5fd46a9b090b109b99d194bb0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"5a5ae5dd_0ec92b26","line":14,"range":{"start_line":14,"start_character":4,"end_line":14,"end_character":39},"in_reply_to":"5a5ae5dd_ecdaa84b","updated":"2016-02-05 18:20:52.000000000","message":"Done","commit_id":"84e34c34b80d41a881526030a0e8a0b882f539c8"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"5ade48ec2b02e34301de250245be859d77296df2","unresolved":false,"context_lines":[{"line_number":10,"context_line":"This is based on the in-progress patch doing the same with alembic [1]."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://review.openstack.org/#/c/99965/"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I6e330f9e5a0fdbd5fd46a9b090b109b99d194bb0"},{"line_number":15,"context_line":"Co-Authored-By: Manjeet Singh Bhatia \u003cmanjeet.s.bhatia@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"7af24918_776d44cb","line":13,"updated":"2016-03-03 22:29:54.000000000","message":"Please add either:\n\nRelated-Bug: #1539735\n\nor\n\nCloses-Bug: #1539735","commit_id":"37191717b7681d8c3b670ea44eab0b7e8214230d"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"486e045cd08cdaa4f3dfaf44532ebcb04c9c4cc3","unresolved":false,"context_lines":[{"line_number":10,"context_line":"This is based on the in-progress patch doing the same with alembic [1]."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://review.openstack.org/#/c/99965/"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I6e330f9e5a0fdbd5fd46a9b090b109b99d194bb0"},{"line_number":15,"context_line":"Co-Authored-By: Manjeet Singh Bhatia \u003cmanjeet.s.bhatia@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"7af24918_7d59a58d","line":13,"in_reply_to":"7af24918_776d44cb","updated":"2016-03-03 23:25:35.000000000","message":"that\u0027s been already added in patchset 25","commit_id":"37191717b7681d8c3b670ea44eab0b7e8214230d"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"c68af1a821f21628149764945af02ba1c1233728","unresolved":false,"context_lines":[{"line_number":12,"context_line":"[1] https://review.openstack.org/#/c/99965/"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I6e330f9e5a0fdbd5fd46a9b090b109b99d194bb0"},{"line_number":15,"context_line":"Co-Authored-By: Manjeet Singh Bhatia \u003cmanjeet.s.bhatia@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"7af24918_8acb1353","line":15,"updated":"2016-03-02 07:29:07.000000000","message":"Please, add Co-Authored-By: Ilya Pekelny \u003cipekelny@mirantis.com\u003e as here is the author of orginal change https://review.openstack.org/#/c/99965/.","commit_id":"37191717b7681d8c3b670ea44eab0b7e8214230d"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"c68af1a821f21628149764945af02ba1c1233728","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"7af24918_8a279311","line":16,"updated":"2016-03-02 07:29:07.000000000","message":"Please, add Closes-bug: #1539735","commit_id":"37191717b7681d8c3b670ea44eab0b7e8214230d"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"9c5aa29ac0ea9f33f781a00ebf9964dc99311999","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"7af24918_8113d5b7","line":16,"in_reply_to":"7af24918_8a279311","updated":"2016-03-02 16:19:03.000000000","message":"+1. As a bugfix we can get it in before the final release of Mitaka.","commit_id":"37191717b7681d8c3b670ea44eab0b7e8214230d"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"526eb35c04d0d312c9b9abf0a1bc65943ff963b2","unresolved":false,"context_lines":[{"line_number":14,"context_line":"Change-Id: I6e330f9e5a0fdbd5fd46a9b090b109b99d194bb0"},{"line_number":15,"context_line":"Co-Authored-By: Manjeet Singh Bhatia \u003cmanjeet.s.bhatia@intel.com\u003e"},{"line_number":16,"context_line":"Co-Authored-By: Ilya Pekelny \u003cipekelny@mirantis.com\u003e"},{"line_number":17,"context_line":"Closes-Bug: #1539735"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"1af94dfe_ddbcac6e","line":17,"updated":"2016-03-16 18:19:24.000000000","message":"It doesn\u0027t seem right to close this bug until we have some migrations tested with data.","commit_id":"aef68c22909845a536e0d97ddc55a8118ff3a97e"}],"neutron/tests/common/db_test_helpers.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"176c47532871374ec6097cbb3feec97385474b61","unresolved":false,"context_lines":[{"line_number":33,"context_line":"               \u0027database\u0027: database})"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def _is_backend_avail(backend,"},{"line_number":37,"context_line":"                      user\u003d\"openstack_citest\","},{"line_number":38,"context_line":"                      passwd\u003d\"openstack_citest\","},{"line_number":39,"context_line":"                      database\u003d\"openstack_citest\"):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a5ae5dd_62cc736a","line":36,"range":{"start_line":36,"start_character":4,"end_line":36,"end_character":21},"updated":"2016-02-05 18:43:08.000000000","message":"Ann actually we can use these functions in oslo_db as well but they need modifications. or once neutron patch gets in I\u0027ll propose changes to modify these in oslo_db itself and will remove this file","commit_id":"84e34c34b80d41a881526030a0e8a0b882f539c8"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"00d00e8eabe723a7649aa9d77e82c7143175fe56","unresolved":false,"context_lines":[{"line_number":33,"context_line":"               \u0027database\u0027: database})"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def _is_backend_avail(backend,"},{"line_number":37,"context_line":"                      user\u003d\"openstack_citest\","},{"line_number":38,"context_line":"                      passwd\u003d\"openstack_citest\","},{"line_number":39,"context_line":"                      database\u003d\"openstack_citest\"):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a5ae5dd_4357c7c9","line":36,"range":{"start_line":36,"start_character":4,"end_line":36,"end_character":21},"in_reply_to":"5a5ae5dd_62cc736a","updated":"2016-02-08 11:57:50.000000000","message":"You can propose changes for oslo.db already now. I thing that will be better as we will get some input from oslo.db team.","commit_id":"84e34c34b80d41a881526030a0e8a0b882f539c8"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"00d00e8eabe723a7649aa9d77e82c7143175fe56","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                      passwd\u003d\"openstack_citest\","},{"line_number":39,"context_line":"                      database\u003d\"openstack_citest\"):"},{"line_number":40,"context_line":"    try:"},{"line_number":41,"context_line":"        if backend \u003d\u003d \"mysql\":"},{"line_number":42,"context_line":"            connect_uri \u003d _get_connect_string(\"mysql\", user\u003duser,"},{"line_number":43,"context_line":"                                              passwd\u003dpasswd, database\u003ddatabase)"},{"line_number":44,"context_line":"        elif backend \u003d\u003d \"postgres\":"},{"line_number":45,"context_line":"            connect_uri \u003d _get_connect_string(\"postgres\", user\u003duser,"},{"line_number":46,"context_line":"                                              passwd\u003dpasswd, database\u003ddatabase)"},{"line_number":47,"context_line":"        engine \u003d sqlalchemy.create_engine(connect_uri)"},{"line_number":48,"context_line":"        connection \u003d engine.connect()"},{"line_number":49,"context_line":"    except Exception:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a5ae5dd_63ad239a","line":46,"range":{"start_line":41,"start_character":8,"end_line":46,"end_character":79},"updated":"2016-02-08 11:57:50.000000000","message":"by the way, why not just:\n\n    connect_uri \u003d _get_connect_string(backend, user\u003duser,\n                                      passwd\u003dpasswd, database\u003ddatabase)","commit_id":"84e34c34b80d41a881526030a0e8a0b882f539c8"}],"neutron/tests/common/helpers.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"a5e608fd7dfaea9e383869ef0cab232dad5a991d","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"def requires_py3(testcase):"},{"line_number":164,"context_line":"    return testtools.skipUnless(six.PY3, \"requires python 3.x\")(testcase)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"def _get_connect_string(backend,"},{"line_number":168,"context_line":"                        user\u003d\"openstack_citest\","}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_bde78aab","line":165,"updated":"2016-02-03 07:32:49.000000000","message":"I suggest to make separate db_helpers file for that.","commit_id":"73ea20a836e92e60c483254128d259c6c5a1e751"}],"neutron/tests/functional/db/test_migrations.conf":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"a5e608fd7dfaea9e383869ef0cab232dad5a991d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[unit_tests]"},{"line_number":2,"context_line":"# Set up any number of databases to test concurrently."},{"line_number":3,"context_line":"# The \"name\" used in the test is the config variable key."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"# A few tests rely on one sqlite database with \u0027sqlite\u0027 as the key."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"#sqlite\u003dsqlite://"},{"line_number":8,"context_line":"#sqlitefile\u003dsqlite:///test_migrations_utils.db"},{"line_number":9,"context_line":"#mysql\u003dmysql+mysqldb://user:pass@localhost/test_migrations_utils"},{"line_number":10,"context_line":"#postgresql\u003dpostgresql+psycopg2://user:pass@localhost/test_migrations_utils"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[migration_dbs]"},{"line_number":13,"context_line":"# Migration DB details are listed separately as they can\u0027t be connected to"}],"source_content_type":"text/plain","patch_set":9,"id":"5a5ae5dd_fd9422e9","line":10,"range":{"start_line":1,"start_character":0,"end_line":10,"end_character":75},"updated":"2016-02-03 07:32:49.000000000","message":"Why do we need this?","commit_id":"73ea20a836e92e60c483254128d259c6c5a1e751"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"252d74a37a8ac4920dbeeab612f2a179e2e2d5b2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[unit_tests]"},{"line_number":2,"context_line":"# Set up any number of databases to test concurrently."},{"line_number":3,"context_line":"# The \"name\" used in the test is the config variable key."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"# A few tests rely on one sqlite database with \u0027sqlite\u0027 as the key."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"#sqlite\u003dsqlite://"},{"line_number":8,"context_line":"#sqlitefile\u003dsqlite:///test_migrations_utils.db"},{"line_number":9,"context_line":"#mysql\u003dmysql+mysqldb://user:pass@localhost/test_migrations_utils"},{"line_number":10,"context_line":"#postgresql\u003dpostgresql+psycopg2://user:pass@localhost/test_migrations_utils"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[migration_dbs]"},{"line_number":13,"context_line":"# Migration DB details are listed separately as they can\u0027t be connected to"}],"source_content_type":"text/plain","patch_set":9,"id":"5a5ae5dd_b330b602","line":10,"range":{"start_line":1,"start_character":0,"end_line":10,"end_character":75},"in_reply_to":"5a5ae5dd_fd9422e9","updated":"2016-02-04 19:49:55.000000000","message":"Done","commit_id":"73ea20a836e92e60c483254128d259c6c5a1e751"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"7672717540bf4743ee6ca9c7c1de8c39333278d7","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"[walk_style]"},{"line_number":14,"context_line":"snake_walk\u003dyes"},{"line_number":15,"context_line":"downgrade\u003dyes"}],"source_content_type":"text/plain","patch_set":23,"id":"9aed3d3a_11808f8a","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":10},"updated":"2016-02-29 09:20:36.000000000","message":"We do not support downgrade, why here is \u0027yes\u0027?","commit_id":"1a0837e6b413f22b31c7712957e7023ce49dcebb"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"3f6d9248402459b758ab89da12fd41b578238d25","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"[walk_style]"},{"line_number":14,"context_line":"snake_walk\u003dyes"},{"line_number":15,"context_line":"downgrade\u003dyes"}],"source_content_type":"text/plain","patch_set":23,"id":"9aed3d3a_77560f2b","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":10},"in_reply_to":"9aed3d3a_11808f8a","updated":"2016-02-29 17:05:22.000000000","message":"Done","commit_id":"1a0837e6b413f22b31c7712957e7023ce49dcebb"}],"neutron/tests/functional/db/test_migrations.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"a5e608fd7dfaea9e383869ef0cab232dad5a991d","unresolved":false,"context_lines":[{"line_number":354,"context_line":"            self.fail(\u0027Migrations %s have downgrade\u0027 % failed_revisions)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"class TestWalkMigrations(base_tests.BaseTestCase):"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    DEFAULT_CONFIG_FILE \u003d os.path.join(os.path.dirname(__file__),"},{"line_number":360,"context_line":"                                       \u0027test_migrations.conf\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_98109c50","line":357,"updated":"2016-02-03 07:32:49.000000000","message":"We have an ability to run test on the chosen backend, see base.PostgreSQLTestCase, test_base.DbTestCase so I think we need to spit current class like it is done for TestModelsMigrations.","commit_id":"73ea20a836e92e60c483254128d259c6c5a1e751"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"252d74a37a8ac4920dbeeab612f2a179e2e2d5b2","unresolved":false,"context_lines":[{"line_number":354,"context_line":"            self.fail(\u0027Migrations %s have downgrade\u0027 % failed_revisions)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"class TestWalkMigrations(base_tests.BaseTestCase):"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    DEFAULT_CONFIG_FILE \u003d os.path.join(os.path.dirname(__file__),"},{"line_number":360,"context_line":"                                       \u0027test_migrations.conf\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_253c7c2e","line":357,"in_reply_to":"5a5ae5dd_98109c50","updated":"2016-02-04 19:49:55.000000000","message":"Done","commit_id":"73ea20a836e92e60c483254128d259c6c5a1e751"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"a5e608fd7dfaea9e383869ef0cab232dad5a991d","unresolved":false,"context_lines":[{"line_number":406,"context_line":"            conn_string \u003d self.test_databases[key]"},{"line_number":407,"context_line":"            conn_pieces \u003d parse.urlparse(conn_string)"},{"line_number":408,"context_line":"            engine.dispose()"},{"line_number":409,"context_line":"            if conn_string.startswith(\u0027sqlite\u0027):"},{"line_number":410,"context_line":"                # We can just delete the SQLite database, which is"},{"line_number":411,"context_line":"                # the easiest and cleanest solution"},{"line_number":412,"context_line":"                db_path \u003d conn_pieces.path[1:]"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_98ac1cef","line":409,"range":{"start_line":409,"start_character":15,"end_line":409,"end_character":48},"updated":"2016-02-03 07:32:49.000000000","message":"We does not support sqlite as a backend for running migrations it is used only in unit tests, I\u0027m not sure we should check this.","commit_id":"73ea20a836e92e60c483254128d259c6c5a1e751"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"252d74a37a8ac4920dbeeab612f2a179e2e2d5b2","unresolved":false,"context_lines":[{"line_number":406,"context_line":"            conn_string \u003d self.test_databases[key]"},{"line_number":407,"context_line":"            conn_pieces \u003d parse.urlparse(conn_string)"},{"line_number":408,"context_line":"            engine.dispose()"},{"line_number":409,"context_line":"            if conn_string.startswith(\u0027sqlite\u0027):"},{"line_number":410,"context_line":"                # We can just delete the SQLite database, which is"},{"line_number":411,"context_line":"                # the easiest and cleanest solution"},{"line_number":412,"context_line":"                db_path \u003d conn_pieces.path[1:]"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_651034a9","line":409,"range":{"start_line":409,"start_character":15,"end_line":409,"end_character":48},"in_reply_to":"5a5ae5dd_98ac1cef","updated":"2016-02-04 19:49:55.000000000","message":"Done","commit_id":"73ea20a836e92e60c483254128d259c6c5a1e751"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"80e656ca37432c01f0abfc89d5004905dbe5f80d","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        table \u003d db_test_helpers.get_table(engine, table)"},{"line_number":396,"context_line":"        self.assertIn(column, table.c)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def _reset_databases(self):"},{"line_number":399,"context_line":"        def execute_cmd(cmd\u003dNone):"},{"line_number":400,"context_line":"            proc \u003d subprocess.Popen(cmd, stdout\u003dsubprocess.PIPE,"},{"line_number":401,"context_line":"                                    stderr\u003dsubprocess.STDOUT, shell\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a5ae5dd_1dd17523","line":398,"range":{"start_line":398,"start_character":4,"end_line":398,"end_character":31},"updated":"2016-02-05 13:03:46.000000000","message":"I think we should split this method as well.","commit_id":"84e34c34b80d41a881526030a0e8a0b882f539c8"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"82530c68f5c637885c9b1ffa9463d019d6d958e7","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        table \u003d db_test_helpers.get_table(engine, table)"},{"line_number":396,"context_line":"        self.assertIn(column, table.c)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def _reset_databases(self):"},{"line_number":399,"context_line":"        def execute_cmd(cmd\u003dNone):"},{"line_number":400,"context_line":"            proc \u003d subprocess.Popen(cmd, stdout\u003dsubprocess.PIPE,"},{"line_number":401,"context_line":"                                    stderr\u003dsubprocess.STDOUT, shell\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a5ae5dd_8edd1be2","line":398,"range":{"start_line":398,"start_character":4,"end_line":398,"end_character":31},"in_reply_to":"5a5ae5dd_1dd17523","updated":"2016-02-05 18:20:52.000000000","message":"Done","commit_id":"84e34c34b80d41a881526030a0e8a0b882f539c8"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"80e656ca37432c01f0abfc89d5004905dbe5f80d","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                auth_pieces \u003d loc_pieces[0].split(\u0027:\u0027)"},{"line_number":417,"context_line":"                user \u003d auth_pieces[0]"},{"line_number":418,"context_line":"                password \u003d \"\""},{"line_number":419,"context_line":"                if len(auth_pieces) \u003e 1:"},{"line_number":420,"context_line":"                    if auth_pieces[1].strip():"},{"line_number":421,"context_line":"                        password \u003d \"-p\\\"%s\\\"\" % auth_pieces[1]"},{"line_number":422,"context_line":"                sql \u003d (\"drop database if exists %(database)s; create \""},{"line_number":423,"context_line":"                       \"database %(database)s;\") % {\u0027database\u0027: database}"},{"line_number":424,"context_line":"                cmd \u003d (\"mysql -u \\\"%(user)s\\\" %(password)s -h %(host)s \""},{"line_number":425,"context_line":"                       \"-e \\\"%(sql)s\\\"\") % {\u0027user\u0027: user, \u0027password\u0027: password,"},{"line_number":426,"context_line":"                                            \u0027host\u0027: host, \u0027sql\u0027: sql}"},{"line_number":427,"context_line":"                execute_cmd(cmd)"},{"line_number":428,"context_line":"            elif conn_string.startswith(\u0027postgresql\u0027):"},{"line_number":429,"context_line":"                database \u003d conn_pieces.path.strip(\u0027/\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a5ae5dd_bd67014c","line":426,"range":{"start_line":419,"start_character":0,"end_line":426,"end_character":69},"updated":"2016-02-05 13:03:46.000000000","message":"I have a very strong feeling that something like this should be already done in oslo.db. Can you contact someone from oslo.db and check this?","commit_id":"84e34c34b80d41a881526030a0e8a0b882f539c8"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"82530c68f5c637885c9b1ffa9463d019d6d958e7","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                auth_pieces \u003d loc_pieces[0].split(\u0027:\u0027)"},{"line_number":417,"context_line":"                user \u003d auth_pieces[0]"},{"line_number":418,"context_line":"                password \u003d \"\""},{"line_number":419,"context_line":"                if len(auth_pieces) \u003e 1:"},{"line_number":420,"context_line":"                    if auth_pieces[1].strip():"},{"line_number":421,"context_line":"                        password \u003d \"-p\\\"%s\\\"\" % auth_pieces[1]"},{"line_number":422,"context_line":"                sql \u003d (\"drop database if exists %(database)s; create \""},{"line_number":423,"context_line":"                       \"database %(database)s;\") % {\u0027database\u0027: database}"},{"line_number":424,"context_line":"                cmd \u003d (\"mysql -u \\\"%(user)s\\\" %(password)s -h %(host)s \""},{"line_number":425,"context_line":"                       \"-e \\\"%(sql)s\\\"\") % {\u0027user\u0027: user, \u0027password\u0027: password,"},{"line_number":426,"context_line":"                                            \u0027host\u0027: host, \u0027sql\u0027: sql}"},{"line_number":427,"context_line":"                execute_cmd(cmd)"},{"line_number":428,"context_line":"            elif conn_string.startswith(\u0027postgresql\u0027):"},{"line_number":429,"context_line":"                database \u003d conn_pieces.path.strip(\u0027/\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a5ae5dd_d3b3c098","line":426,"range":{"start_line":419,"start_character":0,"end_line":426,"end_character":69},"in_reply_to":"5a5ae5dd_bd67014c","updated":"2016-02-05 18:20:52.000000000","message":"I grepped oslo.db code it part above sql and cmd which is done here https://github.com/openstack/oslo.db/blob/master/oslo_db/sqlalchemy/utils.py#L723 I can use it","commit_id":"84e34c34b80d41a881526030a0e8a0b882f539c8"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"00d00e8eabe723a7649aa9d77e82c7143175fe56","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                auth_pieces \u003d loc_pieces[0].split(\u0027:\u0027)"},{"line_number":417,"context_line":"                user \u003d auth_pieces[0]"},{"line_number":418,"context_line":"                password \u003d \"\""},{"line_number":419,"context_line":"                if len(auth_pieces) \u003e 1:"},{"line_number":420,"context_line":"                    if auth_pieces[1].strip():"},{"line_number":421,"context_line":"                        password \u003d \"-p\\\"%s\\\"\" % auth_pieces[1]"},{"line_number":422,"context_line":"                sql \u003d (\"drop database if exists %(database)s; create \""},{"line_number":423,"context_line":"                       \"database %(database)s;\") % {\u0027database\u0027: database}"},{"line_number":424,"context_line":"                cmd \u003d (\"mysql -u \\\"%(user)s\\\" %(password)s -h %(host)s \""},{"line_number":425,"context_line":"                       \"-e \\\"%(sql)s\\\"\") % {\u0027user\u0027: user, \u0027password\u0027: password,"},{"line_number":426,"context_line":"                                            \u0027host\u0027: host, \u0027sql\u0027: sql}"},{"line_number":427,"context_line":"                execute_cmd(cmd)"},{"line_number":428,"context_line":"            elif conn_string.startswith(\u0027postgresql\u0027):"},{"line_number":429,"context_line":"                database \u003d conn_pieces.path.strip(\u0027/\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a5ae5dd_c848b4ce","line":426,"range":{"start_line":419,"start_character":0,"end_line":426,"end_character":69},"in_reply_to":"5a5ae5dd_d3b3c098","updated":"2016-02-08 11:57:50.000000000","message":"yes, please use things that are already existed as much as possible.","commit_id":"84e34c34b80d41a881526030a0e8a0b882f539c8"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"80e656ca37432c01f0abfc89d5004905dbe5f80d","unresolved":false,"context_lines":[{"line_number":575,"context_line":""},{"line_number":576,"context_line":"class TestWalkMigrationsPsql(_TestWalkMigrations):"},{"line_number":577,"context_line":""},{"line_number":578,"context_line":"    def test_postgresql_connect_fail(self):"},{"line_number":579,"context_line":"        \"\"\"Test graceful postgresql connection failure."},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"        Test that we can trigger a postgres connection failure and we fail"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a5ae5dd_4c165c4d","line":578,"range":{"start_line":578,"start_character":8,"end_line":578,"end_character":43},"updated":"2016-02-05 13:03:46.000000000","message":"This should not be a test, because obviously if it is not available no test can be run.\n\nYou should use https://github.com/openstack/neutron/blob/master/neutron/tests/common/base.py#L73 or test_base.MySQLOpportunisticTestCase directly as it skip test if backend is unavailable by default.","commit_id":"84e34c34b80d41a881526030a0e8a0b882f539c8"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"cbad14b464915019920e2cf1c5fc0070b8e48427","unresolved":false,"context_lines":[{"line_number":430,"context_line":"            engine.dispose()"},{"line_number":431,"context_line":"            user, password, database, host \u003d oslo_utils.get_db_connection_info("},{"line_number":432,"context_line":"                conn_pieces)"},{"line_number":433,"context_line":"            if conn_string.startswith(\u0027mysql\u0027):"},{"line_number":434,"context_line":"                # We can execute the MySQL client to destroy and re-create"},{"line_number":435,"context_line":"                # the MYSQL database, which is easier and less error-prone"},{"line_number":436,"context_line":"                # than using SQLAlchemy to do this via MetaData...trust me."},{"line_number":437,"context_line":"                sql \u003d (\"drop database if exists %(database)s; create \""},{"line_number":438,"context_line":"                       \"database %(database)s;\") % {\u0027database\u0027: database}"},{"line_number":439,"context_line":"                cmd \u003d (\"mysql -u \\\"%(user)s\\\" -p%(password)s -h %(host)s \""},{"line_number":440,"context_line":"                       \"-e \\\"%(sql)s\\\"\") % {\u0027user\u0027: user, \u0027password\u0027: password,"},{"line_number":441,"context_line":"                                            \u0027host\u0027: host, \u0027sql\u0027: sql}"},{"line_number":442,"context_line":"                execute_cmd(cmd)"},{"line_number":443,"context_line":"            elif conn_string.startswith(\u0027postgresql\u0027):"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"                os.environ[\u0027PGPASSWORD\u0027] \u003d password"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a57f1b5_d7d73149","line":442,"range":{"start_line":433,"start_character":15,"end_line":442,"end_character":32},"updated":"2016-02-12 06:44:46.000000000","message":"As I suggested previously, lets have split this and have help method like _database_recreation(..) and in TestWalkMigrationsMysql and TestWalkMigrationsPsql you can put this pieces and here just call it. In future we can expand PostgreSQLTestCase and MySQLTestCase with it.","commit_id":"ac86bd0996541aa159d8111aa72c927e7a261ca4"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"31828e9a28a9daf25b2388eac9bb7710f5595251","unresolved":false,"context_lines":[{"line_number":430,"context_line":"            engine.dispose()"},{"line_number":431,"context_line":"            user, password, database, host \u003d oslo_utils.get_db_connection_info("},{"line_number":432,"context_line":"                conn_pieces)"},{"line_number":433,"context_line":"            if conn_string.startswith(\u0027mysql\u0027):"},{"line_number":434,"context_line":"                # We can execute the MySQL client to destroy and re-create"},{"line_number":435,"context_line":"                # the MYSQL database, which is easier and less error-prone"},{"line_number":436,"context_line":"                # than using SQLAlchemy to do this via MetaData...trust me."},{"line_number":437,"context_line":"                sql \u003d (\"drop database if exists %(database)s; create \""},{"line_number":438,"context_line":"                       \"database %(database)s;\") % {\u0027database\u0027: database}"},{"line_number":439,"context_line":"                cmd \u003d (\"mysql -u \\\"%(user)s\\\" -p%(password)s -h %(host)s \""},{"line_number":440,"context_line":"                       \"-e \\\"%(sql)s\\\"\") % {\u0027user\u0027: user, \u0027password\u0027: password,"},{"line_number":441,"context_line":"                                            \u0027host\u0027: host, \u0027sql\u0027: sql}"},{"line_number":442,"context_line":"                execute_cmd(cmd)"},{"line_number":443,"context_line":"            elif conn_string.startswith(\u0027postgresql\u0027):"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"                os.environ[\u0027PGPASSWORD\u0027] \u003d password"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a57f1b5_e59294f5","line":442,"range":{"start_line":433,"start_character":15,"end_line":442,"end_character":32},"in_reply_to":"3a57f1b5_d7d73149","updated":"2016-02-12 18:45:07.000000000","message":"I created two separate function for recreating psql and mysql. As TestWalkMigrationsMysql and TestWalkMigrationsPsql are child classes of this class I don\u0027t think I can put this piece there and call it here. correct me If Understood above comment wrong. Thanks !","commit_id":"ac86bd0996541aa159d8111aa72c927e7a261ca4"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"cbad14b464915019920e2cf1c5fc0070b8e48427","unresolved":false,"context_lines":[{"line_number":559,"context_line":""},{"line_number":560,"context_line":"class TestWalkMigrationsMysql(_TestWalkMigrations):"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    def test_mysql_connect_fail(self):"},{"line_number":563,"context_line":"        \"\"\"Test graceful mysql connection failure."},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        Test that we can trigger a mysql connection failure and we fail"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a57f1b5_77f19d00","line":562,"range":{"start_line":562,"start_character":8,"end_line":562,"end_character":31},"updated":"2016-02-12 06:44:46.000000000","message":"Once again, why do we need this test? If backend is not available the main test will be skipped I don\u0027t see any reason to have it.","commit_id":"ac86bd0996541aa159d8111aa72c927e7a261ca4"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"32c9899a724a7be737ce90f4adf16b328890a58f","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        self.assertEqual(0, proc.returncode, \u0027Command failed with \u0027"},{"line_number":425,"context_line":"                         \u0027output:\\n%s\u0027 % output)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def _database_recreate_mysql(self, user, password, database, host):"},{"line_number":428,"context_line":"        # We can execute the MySQL client to destroy and re-create"},{"line_number":429,"context_line":"        # the MYSQL database, which is easier and less error-prone"},{"line_number":430,"context_line":"        # than using SQLAlchemy to do this via MetaData...trust me."}],"source_content_type":"text/x-python","patch_set":17,"id":"3a57f1b5_06b9f32d","line":427,"updated":"2016-02-12 20:53:49.000000000","message":"That is better. What was my proposal about:\n\n    _TestWalkMigrations(base_tests.BaseTestCase)\n    \n     def _database_recreate(self, user, password, database, host):\n         pass\n\n     def _reset_databases(self):\n          ...\n          user, password, database, host \u003d oslo_utils.get_db_connection_info(\n                conn_pieces)\n          self._database_recreate(user, password, database, host)\n\n\n   TestWalkMigrationsMysql(_TestWalkMigrations):\n\n    \n     def _database_recreate(self, user, password, database, host):\n        sql \u003d (...)\n        cmd \u003d (...)\n        self.execute_cmd(cmd)\n\n\n    TestWalkMigrationsPsql(_TestWalkMigrations):\n\n     \n      def _database_recreate(self, user, password, database, host):\n      ...\n\nSo, when TestWalkMigrationsMysql will run it will use _database_recreate from its class, when TestWalkMigrationsPsql will run it will use _database_recreate from its. I think that is desirable each child class has its own implementation of parent method.","commit_id":"c84247cbaba3d9670132b60b32e4ceebe1ff3527"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"f1c89b7ea29229735d7a2dcd984443c870b62452","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        self.assertEqual(0, proc.returncode, \u0027Command failed with \u0027"},{"line_number":425,"context_line":"                         \u0027output:\\n%s\u0027 % output)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def _database_recreate_mysql(self, user, password, database, host):"},{"line_number":428,"context_line":"        # We can execute the MySQL client to destroy and re-create"},{"line_number":429,"context_line":"        # the MYSQL database, which is easier and less error-prone"},{"line_number":430,"context_line":"        # than using SQLAlchemy to do this via MetaData...trust me."}],"source_content_type":"text/x-python","patch_set":17,"id":"3a57f1b5_9ce9b2b9","line":427,"in_reply_to":"3a57f1b5_06b9f32d","updated":"2016-02-12 21:42:37.000000000","message":"will be like this in next patch thanks !","commit_id":"c84247cbaba3d9670132b60b32e4ceebe1ff3527"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"50c49b541cfdad04f0dd3078a6f6d89415a1c57a","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        self.assertEqual(0, proc.returncode, \u0027Command failed with \u0027"},{"line_number":425,"context_line":"                         \u0027output:\\n%s\u0027 % output)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def _database_recreate_mysql(self, user, password, database, host):"},{"line_number":428,"context_line":"        # We can execute the MySQL client to destroy and re-create"},{"line_number":429,"context_line":"        # the MYSQL database, which is easier and less error-prone"},{"line_number":430,"context_line":"        # than using SQLAlchemy to do this via MetaData...trust me."}],"source_content_type":"text/x-python","patch_set":17,"id":"1a54edaf_57cafc50","line":427,"in_reply_to":"3a57f1b5_9ce9b2b9","updated":"2016-02-13 06:42:37.000000000","message":"Thank you!","commit_id":"c84247cbaba3d9670132b60b32e4ceebe1ff3527"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"4057a9643ff2ac7024aaa6b17e6dc0e30a4ac0b8","unresolved":false,"context_lines":[{"line_number":553,"context_line":"        connect_string \u003d oslo_utils.get_connect_string(\"mysql\","},{"line_number":554,"context_line":"            \"openstack_citest\", user\u003d\"openstack_citest\","},{"line_number":555,"context_line":"            passwd\u003d\"openstack_citest\")"},{"line_number":556,"context_line":"        engine \u003d sqlalchemy.create_engine(connect_string)"},{"line_number":557,"context_line":"        config \u003d self._get_alembic_config(connect_string)"},{"line_number":558,"context_line":"        self.engines[\"mysqlcitest\"] \u003d engine"},{"line_number":559,"context_line":"        self.test_databases[\"mysqlcitest\"] \u003d connect_string"}],"source_content_type":"text/x-python","patch_set":18,"id":"dae33548_a269d7c0","line":556,"range":{"start_line":556,"start_character":8,"end_line":556,"end_character":57},"updated":"2016-02-16 07:14:36.000000000","message":"you need to use oslo_db for this\n\n    from oslo_db.sqlalchemy import session\n\n    ...\n    engine \u003d session.create_engine(self.connection_url)\n\nAnd for all other creations of engine.","commit_id":"f9eaa7114a4a4a9695d647a68631eb9aca99a36e"},{"author":{"_account_id":19591,"name":"Saisrikiran Mudigonda","email":"saisrikiran.mudigonda@intel.com","username":"saisrikiran"},"change_message_id":"6707f5d3a560810035cc182cdfd116d0f3c7816a","unresolved":false,"context_lines":[{"line_number":355,"context_line":"            self.fail(\u0027Migrations %s have downgrade\u0027 % failed_revisions)"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"def _is_backend_avail(backend,"},{"line_number":359,"context_line":"                      user\u003d\"openstack_citest\","},{"line_number":360,"context_line":"                      passwd\u003d\"openstack_citest\","},{"line_number":361,"context_line":"                      database\u003d\"openstack_citest\"):"}],"source_content_type":"text/x-python","patch_set":22,"id":"bae84128_5938873d","line":358,"range":{"start_line":358,"start_character":0,"end_line":358,"end_character":21},"updated":"2016-02-22 20:40:18.000000000","message":"nit: Please add appropriate spacing","commit_id":"219000d495a61d25ba61606f8ec099d2f91c60fc"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"553dde47cc56a33e8150e6ae37c16fc63b151048","unresolved":false,"context_lines":[{"line_number":355,"context_line":"            self.fail(\u0027Migrations %s have downgrade\u0027 % failed_revisions)"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"def _is_backend_avail(backend,"},{"line_number":359,"context_line":"                      user\u003d\"openstack_citest\","},{"line_number":360,"context_line":"                      passwd\u003d\"openstack_citest\","},{"line_number":361,"context_line":"                      database\u003d\"openstack_citest\"):"}],"source_content_type":"text/x-python","patch_set":22,"id":"bae84128_c53ca8ca","line":358,"range":{"start_line":358,"start_character":0,"end_line":358,"end_character":21},"in_reply_to":"bae84128_5938873d","updated":"2016-02-22 22:03:33.000000000","message":"sai it is global function does not belong to any class. so it should start with very first character. if I\u0027ve have missed anything on spacing pep8 would have failed.","commit_id":"219000d495a61d25ba61606f8ec099d2f91c60fc"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"de9d31a36f3ddeff99e28f669b7a9c05070b443a","unresolved":false,"context_lines":[{"line_number":386,"context_line":"    script_location \u003d os.path.join(os.path.join(os.path.dirname("},{"line_number":387,"context_line":"        os.path.dirname(os.path.dirname(__file__))), \u0027db\u0027), \u0027migration\u0027)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    def setUp(self):"},{"line_number":390,"context_line":"        super(_TestWalkMigrations, self).setUp()"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        self.snake_walk \u003d False"}],"source_content_type":"text/x-python","patch_set":22,"id":"bae84128_2e6cf406","line":389,"updated":"2016-02-24 12:41:51.000000000","message":"Lets move skipTest for setUp, so there should be:\n\n_TestWalkMigrations(base_tests.BaseTestCase):\n\n   def setUp(self):\n      if not _is_backend_avail(BACKEND):\n            self.skipTest(\"%s not available\" % BACKEND)\n\n   ...\n\nTestWalkMigrationsMysql(_TestWalkMigrations):\n\n   BACKEND \u003d \u0027mysql+pymysql\u0027\n\nTestWalkMigrationsPsql(_TestWalkMigrations):\n\n   BACKEND \u003d \u0027postgresql\u0027","commit_id":"219000d495a61d25ba61606f8ec099d2f91c60fc"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"7609ca72e202f3ca16900f5f380f1e26e232f31b","unresolved":false,"context_lines":[{"line_number":386,"context_line":"    script_location \u003d os.path.join(os.path.join(os.path.dirname("},{"line_number":387,"context_line":"        os.path.dirname(os.path.dirname(__file__))), \u0027db\u0027), \u0027migration\u0027)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    def setUp(self):"},{"line_number":390,"context_line":"        super(_TestWalkMigrations, self).setUp()"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        self.snake_walk \u003d False"}],"source_content_type":"text/x-python","patch_set":22,"id":"9aed3d3a_8b7eb0ac","line":389,"in_reply_to":"bae84128_2e6cf406","updated":"2016-02-25 19:24:51.000000000","message":"Done","commit_id":"219000d495a61d25ba61606f8ec099d2f91c60fc"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"de9d31a36f3ddeff99e28f669b7a9c05070b443a","unresolved":false,"context_lines":[{"line_number":523,"context_line":"            if check and data:"},{"line_number":524,"context_line":"                check(engine, data)"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"    def test_walk_versions(self):"},{"line_number":527,"context_line":"        \"\"\"Test walk versions."},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"        Walks all version scripts for each tested database, ensuring"}],"source_content_type":"text/x-python","patch_set":22,"id":"bae84128_c12b9980","line":526,"updated":"2016-02-24 12:41:51.000000000","message":"I\u0027m not sure I understand why do we need this test?","commit_id":"219000d495a61d25ba61606f8ec099d2f91c60fc"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"7609ca72e202f3ca16900f5f380f1e26e232f31b","unresolved":false,"context_lines":[{"line_number":523,"context_line":"            if check and data:"},{"line_number":524,"context_line":"                check(engine, data)"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"    def test_walk_versions(self):"},{"line_number":527,"context_line":"        \"\"\"Test walk versions."},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"        Walks all version scripts for each tested database, ensuring"}],"source_content_type":"text/x-python","patch_set":22,"id":"9aed3d3a_2b44c472","line":526,"in_reply_to":"bae84128_c12b9980","updated":"2016-02-25 19:24:51.000000000","message":"removed this","commit_id":"219000d495a61d25ba61606f8ec099d2f91c60fc"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"c68af1a821f21628149764945af02ba1c1233728","unresolved":false,"context_lines":[{"line_number":377,"context_line":"            return True"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"class _TestWalkMigrations(base_tests.BaseTestCase):"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    DEFAULT_CONFIG_FILE \u003d os.path.join(os.path.dirname(__file__),"},{"line_number":383,"context_line":"                                       \u0027test_migrations.conf\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"7af24918_8a031342","line":380,"updated":"2016-03-02 07:29:07.000000000","message":"It will be good to add some description of test like it is done for _TestModelsMigrations.","commit_id":"37191717b7681d8c3b670ea44eab0b7e8214230d"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"084a1a727838b155bae64862f93dd5e797b08e9a","unresolved":false,"context_lines":[{"line_number":381,"context_line":"    \u0027\u0027\u0027Test for checking schema migrations for upgrade and downgrade."},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    Right now it supports pymysql and postgresql backends."},{"line_number":384,"context_line":"    To add a new backend for test you need to implement"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def _database_recreate(self, user, password, database, host):"},{"line_number":387,"context_line":"         pass"}],"source_content_type":"text/x-python","patch_set":26,"id":"5aef4532_102d3a95","line":384,"updated":"2016-03-09 09:42:41.000000000","message":"Can you add details how it is working? What libraries it uses, etc?","commit_id":"a099a83635c0c73939aafd0bd1f71e81dd0fd86e"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"2b2d0e0ff4433cd31e820df30d4f9d4b27827eef","unresolved":false,"context_lines":[{"line_number":381,"context_line":"    \u0027\u0027\u0027Test for checking schema migrations for upgrade and downgrade."},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    Right now it supports pymysql and postgresql backends."},{"line_number":384,"context_line":"    To add a new backend for test you need to implement"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def _database_recreate(self, user, password, database, host):"},{"line_number":387,"context_line":"         pass"}],"source_content_type":"text/x-python","patch_set":26,"id":"5aef4532_8571e646","line":384,"in_reply_to":"5aef4532_102d3a95","updated":"2016-03-09 17:21:52.000000000","message":"will do that","commit_id":"a099a83635c0c73939aafd0bd1f71e81dd0fd86e"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"084a1a727838b155bae64862f93dd5e797b08e9a","unresolved":false,"context_lines":[{"line_number":384,"context_line":"    To add a new backend for test you need to implement"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def _database_recreate(self, user, password, database, host):"},{"line_number":387,"context_line":"         pass"},{"line_number":388,"context_line":"    \u0027\u0027\u0027"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    DEFAULT_CONFIG_FILE \u003d os.path.join(os.path.dirname(__file__),"}],"source_content_type":"text/x-python","patch_set":26,"id":"5aef4532_50a862db","line":387,"updated":"2016-03-09 09:42:41.000000000","message":"As far as I see, this won\u0027t be enough. \n\nBACKEND with name should be also set and test_backend_opportunistically should be implemented.","commit_id":"a099a83635c0c73939aafd0bd1f71e81dd0fd86e"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"2b2d0e0ff4433cd31e820df30d4f9d4b27827eef","unresolved":false,"context_lines":[{"line_number":384,"context_line":"    To add a new backend for test you need to implement"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def _database_recreate(self, user, password, database, host):"},{"line_number":387,"context_line":"         pass"},{"line_number":388,"context_line":"    \u0027\u0027\u0027"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    DEFAULT_CONFIG_FILE \u003d os.path.join(os.path.dirname(__file__),"}],"source_content_type":"text/x-python","patch_set":26,"id":"5aef4532_c595ae33","line":387,"in_reply_to":"5aef4532_50a862db","updated":"2016-03-09 17:21:52.000000000","message":"each backend has to implement their recreate. at this point it makes less sense to add BACKEND here. whatever backend class is implement it will always be self.backend. or cls.BACKEND","commit_id":"a099a83635c0c73939aafd0bd1f71e81dd0fd86e"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"27c1bcc1761e8d1307ffd51b39635cd460925e9d","unresolved":false,"context_lines":[{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    BACKEND \u003d \u0027backend\u0027"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    def _database_recreate(self, user, password, database, host):"},{"line_number":394,"context_line":"         pass"},{"line_number":395,"context_line":"    \u0027\u0027\u0027"},{"line_number":396,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3afc51ec_096fea2b","line":393,"updated":"2016-03-14 19:04:55.000000000","message":"We could do this as an abstract base class with _database_recreate decorated with @abstractmethod so that they would HAVE to implement it, right?","commit_id":"899a9242352da859a2dbc6efee8f4b6cb8e460e0"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"f81dd2c825b8bef6832a0cce8842eb2b0630ac1a","unresolved":false,"context_lines":[{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    BACKEND \u003d \u0027backend\u0027"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    def _database_recreate(self, user, password, database, host):"},{"line_number":394,"context_line":"         pass"},{"line_number":395,"context_line":"    \u0027\u0027\u0027"},{"line_number":396,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3afc51ec_b4e39f04","line":393,"in_reply_to":"3afc51ec_096fea2b","updated":"2016-03-14 23:29:49.000000000","message":"Done","commit_id":"899a9242352da859a2dbc6efee8f4b6cb8e460e0"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"27c1bcc1761e8d1307ffd51b39635cd460925e9d","unresolved":false,"context_lines":[{"line_number":398,"context_line":"                                       \u0027test_migrations.conf\u0027)"},{"line_number":399,"context_line":"    CONFIG_FILE_PATH \u003d os.environ.get(\u0027NEUTRON_TEST_MIGRATIONS_CONF\u0027,"},{"line_number":400,"context_line":"                                      DEFAULT_CONFIG_FILE)"},{"line_number":401,"context_line":"    script_location \u003d os.path.join(os.path.join(os.path.dirname("},{"line_number":402,"context_line":"        os.path.dirname(os.path.dirname(__file__))), \u0027db\u0027), \u0027migration\u0027)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":27,"id":"3afc51ec_4978d22a","line":401,"updated":"2016-03-14 19:04:55.000000000","message":"What value are we trying to assign here? No matter where I put this code, my instances of _TestWalkMigrations have .script_location \u003d \u0027db/migration\u0027","commit_id":"899a9242352da859a2dbc6efee8f4b6cb8e460e0"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"f81dd2c825b8bef6832a0cce8842eb2b0630ac1a","unresolved":false,"context_lines":[{"line_number":398,"context_line":"                                       \u0027test_migrations.conf\u0027)"},{"line_number":399,"context_line":"    CONFIG_FILE_PATH \u003d os.environ.get(\u0027NEUTRON_TEST_MIGRATIONS_CONF\u0027,"},{"line_number":400,"context_line":"                                      DEFAULT_CONFIG_FILE)"},{"line_number":401,"context_line":"    script_location \u003d os.path.join(os.path.join(os.path.dirname("},{"line_number":402,"context_line":"        os.path.dirname(os.path.dirname(__file__))), \u0027db\u0027), \u0027migration\u0027)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":27,"id":"3afc51ec_54bb3be5","line":401,"in_reply_to":"3afc51ec_4978d22a","updated":"2016-03-14 23:29:49.000000000","message":"It was doing nothing actually i did not remove it from previous patch. thanks for addressing that.","commit_id":"899a9242352da859a2dbc6efee8f4b6cb8e460e0"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5b72ad5e35c64d15c022707f0b0cbea693effe0b","unresolved":false,"context_lines":[{"line_number":483,"context_line":"                yield rev.revision, rev.down_revision"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def _walk_versions(self, config, engine, downgrade\u003dTrue, snake_walk\u003dFalse):"},{"line_number":486,"context_line":"        \"\"\"Test migrations ability to upgrade and downgrade."},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        :param downgrade: whether to include downgrade behavior or not."},{"line_number":489,"context_line":"        :type downgrade: Bool"}],"source_content_type":"text/x-python","patch_set":28,"id":"3afc51ec_560dfb35","line":486,"updated":"2016-03-15 03:44:37.000000000","message":"i doubt we should do anything with downgrades as neutron and the rest of openstack no longer support it.","commit_id":"aef68c22909845a536e0d97ddc55a8118ff3a97e"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"bad13617d2341a50bff92363653ee4807abc5cc7","unresolved":false,"context_lines":[{"line_number":483,"context_line":"                yield rev.revision, rev.down_revision"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def _walk_versions(self, config, engine, downgrade\u003dTrue, snake_walk\u003dFalse):"},{"line_number":486,"context_line":"        \"\"\"Test migrations ability to upgrade and downgrade."},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        :param downgrade: whether to include downgrade behavior or not."},{"line_number":489,"context_line":"        :type downgrade: Bool"}],"source_content_type":"text/x-python","patch_set":28,"id":"1af94dfe_9303870f","line":486,"in_reply_to":"1af94dfe_13b5b7cc","updated":"2016-03-15 15:14:16.000000000","message":"The plan is to have it Neutron and then when it will be added in oslo.db update current version. This is double work, but will be quicker.","commit_id":"aef68c22909845a536e0d97ddc55a8118ff3a97e"},{"author":{"_account_id":19611,"name":"Brian Stajkowski","email":"brian.stajkowski@rackspace.com","username":"ski"},"change_message_id":"a39eb8cdf3afb8d088d2e84c646019120ad37e65","unresolved":false,"context_lines":[{"line_number":483,"context_line":"                yield rev.revision, rev.down_revision"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def _walk_versions(self, config, engine, downgrade\u003dTrue, snake_walk\u003dFalse):"},{"line_number":486,"context_line":"        \"\"\"Test migrations ability to upgrade and downgrade."},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        :param downgrade: whether to include downgrade behavior or not."},{"line_number":489,"context_line":"        :type downgrade: Bool"}],"source_content_type":"text/x-python","patch_set":28,"id":"1af94dfe_b9c49892","line":486,"in_reply_to":"1af94dfe_9303870f","updated":"2016-03-15 17:27:22.000000000","message":"Ann, per manjeet, removing downgrade will invalidate the snake walk.  If it is to be in Neutron eventually, should we leave it and educate -1s.","commit_id":"aef68c22909845a536e0d97ddc55a8118ff3a97e"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"9dbe980c94b251e3f7e3add755206e36fc768409","unresolved":false,"context_lines":[{"line_number":483,"context_line":"                yield rev.revision, rev.down_revision"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def _walk_versions(self, config, engine, downgrade\u003dTrue, snake_walk\u003dFalse):"},{"line_number":486,"context_line":"        \"\"\"Test migrations ability to upgrade and downgrade."},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        :param downgrade: whether to include downgrade behavior or not."},{"line_number":489,"context_line":"        :type downgrade: Bool"}],"source_content_type":"text/x-python","patch_set":28,"id":"1af94dfe_42fe426c","line":486,"in_reply_to":"1af94dfe_9303870f","updated":"2016-03-15 17:02:55.000000000","message":"for now I will delete downgrade from it. Assuming this is not final thing for neutron any this need to be removed later on after oslo.db modification. so will keep only upgrade.","commit_id":"aef68c22909845a536e0d97ddc55a8118ff3a97e"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"bad13617d2341a50bff92363653ee4807abc5cc7","unresolved":false,"context_lines":[{"line_number":483,"context_line":"                yield rev.revision, rev.down_revision"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def _walk_versions(self, config, engine, downgrade\u003dTrue, snake_walk\u003dFalse):"},{"line_number":486,"context_line":"        \"\"\"Test migrations ability to upgrade and downgrade."},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        :param downgrade: whether to include downgrade behavior or not."},{"line_number":489,"context_line":"        :type downgrade: Bool"}],"source_content_type":"text/x-python","patch_set":28,"id":"1af94dfe_2ea5ea03","line":486,"in_reply_to":"3afc51ec_560dfb35","updated":"2016-03-15 15:14:16.000000000","message":"It is good point, but downgrade still exists in some projects.","commit_id":"aef68c22909845a536e0d97ddc55a8118ff3a97e"},{"author":{"_account_id":19611,"name":"Brian Stajkowski","email":"brian.stajkowski@rackspace.com","username":"ski"},"change_message_id":"e948ea9be83ff69cee376a45c043f9c7b7215bcc","unresolved":false,"context_lines":[{"line_number":483,"context_line":"                yield rev.revision, rev.down_revision"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def _walk_versions(self, config, engine, downgrade\u003dTrue, snake_walk\u003dFalse):"},{"line_number":486,"context_line":"        \"\"\"Test migrations ability to upgrade and downgrade."},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        :param downgrade: whether to include downgrade behavior or not."},{"line_number":489,"context_line":"        :type downgrade: Bool"}],"source_content_type":"text/x-python","patch_set":28,"id":"1af94dfe_13b5b7cc","line":486,"in_reply_to":"3afc51ec_560dfb35","updated":"2016-03-15 15:05:42.000000000","message":"Per Justin, this will need to be added to oslo.db once ported but no reason in having it here.","commit_id":"aef68c22909845a536e0d97ddc55a8118ff3a97e"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"5b8b8d12e73449d59de27680a63dd86865da66d4","unresolved":false,"context_lines":[{"line_number":501,"context_line":"                # NOTE(I159): Pass reversed arguments into `_migrate_down`"},{"line_number":502,"context_line":"                # method because we have been upgraded to a destination"},{"line_number":503,"context_line":"                # revision and now we going to downgrade back."},{"line_number":504,"context_line":"                self._migrate_down(config, curr, dest, with_data\u003dTrue)"},{"line_number":505,"context_line":"                self._migrate_up(config, dest, curr, with_data\u003dTrue)"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        if downgrade:"}],"source_content_type":"text/x-python","patch_set":28,"id":"3afc51ec_05c05f7a","line":504,"updated":"2016-03-15 01:36:36.000000000","message":"self._migrate_down(config, engine, ...","commit_id":"aef68c22909845a536e0d97ddc55a8118ff3a97e"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"5b8b8d12e73449d59de27680a63dd86865da66d4","unresolved":false,"context_lines":[{"line_number":502,"context_line":"                # method because we have been upgraded to a destination"},{"line_number":503,"context_line":"                # revision and now we going to downgrade back."},{"line_number":504,"context_line":"                self._migrate_down(config, curr, dest, with_data\u003dTrue)"},{"line_number":505,"context_line":"                self._migrate_up(config, dest, curr, with_data\u003dTrue)"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        if downgrade:"},{"line_number":508,"context_line":"            revisions \u003d self._revisions(downgrade)"}],"source_content_type":"text/x-python","patch_set":28,"id":"3afc51ec_a5c08b7d","line":505,"updated":"2016-03-15 01:36:36.000000000","message":"self._migrate_up(config, engine, ...","commit_id":"aef68c22909845a536e0d97ddc55a8118ff3a97e"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"5b8b8d12e73449d59de27680a63dd86865da66d4","unresolved":false,"context_lines":[{"line_number":507,"context_line":"        if downgrade:"},{"line_number":508,"context_line":"            revisions \u003d self._revisions(downgrade)"},{"line_number":509,"context_line":"            for dest, curr in revisions:"},{"line_number":510,"context_line":"                self._migrate_down(config, dest, curr, with_data\u003dTrue)"},{"line_number":511,"context_line":"                if snake_walk:"},{"line_number":512,"context_line":"                    self._migrate_up(config, curr, dest, with_data\u003dTrue)"},{"line_number":513,"context_line":"                    self._migrate_down(config, dest, curr, with_data\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":28,"id":"3afc51ec_c5c5d78e","line":510,"updated":"2016-03-15 01:36:36.000000000","message":"self._migrate_down(config, engine, ...","commit_id":"aef68c22909845a536e0d97ddc55a8118ff3a97e"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"5b8b8d12e73449d59de27680a63dd86865da66d4","unresolved":false,"context_lines":[{"line_number":509,"context_line":"            for dest, curr in revisions:"},{"line_number":510,"context_line":"                self._migrate_down(config, dest, curr, with_data\u003dTrue)"},{"line_number":511,"context_line":"                if snake_walk:"},{"line_number":512,"context_line":"                    self._migrate_up(config, curr, dest, with_data\u003dTrue)"},{"line_number":513,"context_line":"                    self._migrate_down(config, dest, curr, with_data\u003dTrue)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    def _migrate_down(self, config, engine, dest, curr, with_data\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":28,"id":"3afc51ec_65ce83b5","line":512,"updated":"2016-03-15 01:36:36.000000000","message":"self._migrate_up(config, engine, ...","commit_id":"aef68c22909845a536e0d97ddc55a8118ff3a97e"},{"author":{"_account_id":7037,"name":"John Perkins","email":"john.perkins@rackspace.com","username":"JPerkins"},"change_message_id":"5b8b8d12e73449d59de27680a63dd86865da66d4","unresolved":false,"context_lines":[{"line_number":510,"context_line":"                self._migrate_down(config, dest, curr, with_data\u003dTrue)"},{"line_number":511,"context_line":"                if snake_walk:"},{"line_number":512,"context_line":"                    self._migrate_up(config, curr, dest, with_data\u003dTrue)"},{"line_number":513,"context_line":"                    self._migrate_down(config, dest, curr, with_data\u003dTrue)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    def _migrate_down(self, config, engine, dest, curr, with_data\u003dFalse):"},{"line_number":516,"context_line":"        if dest:"}],"source_content_type":"text/x-python","patch_set":28,"id":"3afc51ec_85cbcfa4","line":513,"updated":"2016-03-15 01:36:36.000000000","message":"self._migrate_down(config, engine, ...","commit_id":"aef68c22909845a536e0d97ddc55a8118ff3a97e"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0d7009b7177c7f9265954fa8fea3f8b14aed5bd9","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import abc"},{"line_number":16,"context_line":"import alembic"},{"line_number":17,"context_line":"from alembic import script as alembic_script"},{"line_number":18,"context_line":"import ConfigParser"},{"line_number":19,"context_line":"from contextlib import contextmanager"},{"line_number":20,"context_line":"import os"},{"line_number":21,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_1d86fa64","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":19},"updated":"2016-03-23 04:39:21.000000000","message":"This is not available in Python 3.4+ where it has been renamed to configparser.\n\nTo be compatible with both 2.7 and 3.4+ you\u0027ll need to do use six.moves:\n\n  from six.moves import configparser","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"e24f64067fc06ca7a858ccfbecb8ab33228cb5d5","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import abc"},{"line_number":16,"context_line":"import alembic"},{"line_number":17,"context_line":"from alembic import script as alembic_script"},{"line_number":18,"context_line":"import ConfigParser"},{"line_number":19,"context_line":"from contextlib import contextmanager"},{"line_number":20,"context_line":"import os"},{"line_number":21,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_01e665af","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":19},"in_reply_to":"fa0719c6_1d86fa64","updated":"2016-03-23 18:37:47.000000000","message":"Done","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0d7009b7177c7f9265954fa8fea3f8b14aed5bd9","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        # We start each test case with a completely blank slate."},{"line_number":426,"context_line":"        self._reset_databases()"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def assertColumnExists(self, engine, table, column):"},{"line_number":429,"context_line":"        table \u003d oslo_utils.get_table(engine, table)"},{"line_number":430,"context_line":"        self.assertIn(column, table.c)"},{"line_number":431,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_9d5a0a4f","line":428,"range":{"start_line":428,"start_character":41,"end_line":428,"end_character":46},"updated":"2016-03-23 04:39:21.000000000","message":"Please change this to table_name so it\u0027s clear it\u0027s just a string.","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"e24f64067fc06ca7a858ccfbecb8ab33228cb5d5","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        # We start each test case with a completely blank slate."},{"line_number":426,"context_line":"        self._reset_databases()"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def assertColumnExists(self, engine, table, column):"},{"line_number":429,"context_line":"        table \u003d oslo_utils.get_table(engine, table)"},{"line_number":430,"context_line":"        self.assertIn(column, table.c)"},{"line_number":431,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_81fa7541","line":428,"range":{"start_line":428,"start_character":41,"end_line":428,"end_character":46},"in_reply_to":"fa0719c6_9d5a0a4f","updated":"2016-03-23 18:37:47.000000000","message":"Done","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0d7009b7177c7f9265954fa8fea3f8b14aed5bd9","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        self._reset_databases()"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def assertColumnExists(self, engine, table, column):"},{"line_number":429,"context_line":"        table \u003d oslo_utils.get_table(engine, table)"},{"line_number":430,"context_line":"        self.assertIn(column, table.c)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"    def execute_cmd(self, cmd\u003dNone):"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_fd59865b","line":429,"range":{"start_line":429,"start_character":45,"end_line":429,"end_character":50},"updated":"2016-03-23 04:39:21.000000000","message":"table_name","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0d7009b7177c7f9265954fa8fea3f8b14aed5bd9","unresolved":false,"context_lines":[{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def assertColumnExists(self, engine, table, column):"},{"line_number":429,"context_line":"        table \u003d oslo_utils.get_table(engine, table)"},{"line_number":430,"context_line":"        self.assertIn(column, table.c)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"    def execute_cmd(self, cmd\u003dNone):"},{"line_number":433,"context_line":"        proc \u003d subprocess.Popen(cmd, stdout\u003dsubprocess.PIPE,"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_384e6c6f","line":430,"range":{"start_line":430,"start_character":36,"end_line":430,"end_character":37},"updated":"2016-03-23 04:39:21.000000000","message":"Nit: use table.columns here (it\u0027s a synonym and makes the code more readable).","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0d7009b7177c7f9265954fa8fea3f8b14aed5bd9","unresolved":false,"context_lines":[{"line_number":428,"context_line":"    def assertColumnExists(self, engine, table, column):"},{"line_number":429,"context_line":"        table \u003d oslo_utils.get_table(engine, table)"},{"line_number":430,"context_line":"        self.assertIn(column, table.c)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"    def execute_cmd(self, cmd\u003dNone):"},{"line_number":433,"context_line":"        proc \u003d subprocess.Popen(cmd, stdout\u003dsubprocess.PIPE,"},{"line_number":434,"context_line":"                                stderr\u003dsubprocess.STDOUT, shell\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_d83010eb","line":431,"updated":"2016-03-23 04:39:21.000000000","message":"You probably want to have the opposite also: assertColumnNotExists(). But that sounds clumsy. How about assertColumnInTable() and assertColumnNotInTable()?","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"e24f64067fc06ca7a858ccfbecb8ab33228cb5d5","unresolved":false,"context_lines":[{"line_number":428,"context_line":"    def assertColumnExists(self, engine, table, column):"},{"line_number":429,"context_line":"        table \u003d oslo_utils.get_table(engine, table)"},{"line_number":430,"context_line":"        self.assertIn(column, table.c)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"    def execute_cmd(self, cmd\u003dNone):"},{"line_number":433,"context_line":"        proc \u003d subprocess.Popen(cmd, stdout\u003dsubprocess.PIPE,"},{"line_number":434,"context_line":"                                stderr\u003dsubprocess.STDOUT, shell\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_61f76159","line":431,"in_reply_to":"fa0719c6_d83010eb","updated":"2016-03-23 18:37:47.000000000","message":"I removed column exists and added assertColumnIntable or assertColumnNotInTable","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0d7009b7177c7f9265954fa8fea3f8b14aed5bd9","unresolved":false,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def _get_alembic_config(self, uri):"},{"line_number":457,"context_line":"        db_config \u003d migration.get_neutron_config()"},{"line_number":458,"context_line":"        self.script_dir \u003d alembic.script.ScriptDirectory.from_config(db_config)"},{"line_number":459,"context_line":"        db_config.neutron_config \u003d cfg.CONF"},{"line_number":460,"context_line":"        db_config.neutron_config.set_override(\u0027connection\u0027,"},{"line_number":461,"context_line":"                                              six.text_type(uri),"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_3d32de10","line":458,"range":{"start_line":458,"start_character":26,"end_line":458,"end_character":40},"updated":"2016-03-23 04:39:21.000000000","message":"Use alembic_script here.","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"e24f64067fc06ca7a858ccfbecb8ab33228cb5d5","unresolved":false,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def _get_alembic_config(self, uri):"},{"line_number":457,"context_line":"        db_config \u003d migration.get_neutron_config()"},{"line_number":458,"context_line":"        self.script_dir \u003d alembic.script.ScriptDirectory.from_config(db_config)"},{"line_number":459,"context_line":"        db_config.neutron_config \u003d cfg.CONF"},{"line_number":460,"context_line":"        db_config.neutron_config.set_override(\u0027connection\u0027,"},{"line_number":461,"context_line":"                                              six.text_type(uri),"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_01b4a57f","line":458,"range":{"start_line":458,"start_character":26,"end_line":458,"end_character":40},"in_reply_to":"fa0719c6_3d32de10","updated":"2016-03-23 18:37:47.000000000","message":"Done","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0d7009b7177c7f9265954fa8fea3f8b14aed5bd9","unresolved":false,"context_lines":[{"line_number":514,"context_line":"                    self._migrate_down(config, engine, dest,"},{"line_number":515,"context_line":"                                       curr, with_data\u003dTrue)"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"    def _migrate_down(self, config, engine, dest, curr, with_data\u003dFalse):"},{"line_number":518,"context_line":"        if dest:"},{"line_number":519,"context_line":"            migration.do_alembic_command(config, \u0027downgrade\u0027, dest)"},{"line_number":520,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_38d14c58","line":517,"updated":"2016-03-23 04:39:21.000000000","message":"The first thing you need to do here is upgrade to curr:\n\n\n  migration.do_alembic_command(config, \u0027upgrade\u0027, curr)","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"e24f64067fc06ca7a858ccfbecb8ab33228cb5d5","unresolved":false,"context_lines":[{"line_number":514,"context_line":"                    self._migrate_down(config, engine, dest,"},{"line_number":515,"context_line":"                                       curr, with_data\u003dTrue)"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"    def _migrate_down(self, config, engine, dest, curr, with_data\u003dFalse):"},{"line_number":518,"context_line":"        if dest:"},{"line_number":519,"context_line":"            migration.do_alembic_command(config, \u0027downgrade\u0027, dest)"},{"line_number":520,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_21af292b","line":517,"in_reply_to":"fa0719c6_38d14c58","updated":"2016-03-23 18:37:47.000000000","message":"Done","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0d7009b7177c7f9265954fa8fea3f8b14aed5bd9","unresolved":false,"context_lines":[{"line_number":527,"context_line":"            if post_downgrade:"},{"line_number":528,"context_line":"                post_downgrade(engine)"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"    def _migrate_up(self, config, engine, dest, curr, with_data\u003dFalse):"},{"line_number":531,"context_line":"        if with_data:"},{"line_number":532,"context_line":"            data \u003d None"},{"line_number":533,"context_line":"            pre_upgrade \u003d getattr("}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_b8defc6a","line":530,"updated":"2016-03-23 04:39:21.000000000","message":"The first thing you need to do here is upgrade to curr:\n\n\n  migration.do_alembic_command(config, \u0027upgrade\u0027, curr)","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"e24f64067fc06ca7a858ccfbecb8ab33228cb5d5","unresolved":false,"context_lines":[{"line_number":527,"context_line":"            if post_downgrade:"},{"line_number":528,"context_line":"                post_downgrade(engine)"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"    def _migrate_up(self, config, engine, dest, curr, with_data\u003dFalse):"},{"line_number":531,"context_line":"        if with_data:"},{"line_number":532,"context_line":"            data \u003d None"},{"line_number":533,"context_line":"            pre_upgrade \u003d getattr("}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_324139aa","line":530,"in_reply_to":"fa0719c6_b8defc6a","updated":"2016-03-23 18:37:47.000000000","message":"Done","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0d7009b7177c7f9265954fa8fea3f8b14aed5bd9","unresolved":false,"context_lines":[{"line_number":582,"context_line":"        # operations there is a special database template1."},{"line_number":583,"context_line":"        sqlcmd \u003d (\"psql -w -U %(user)s -h %(host)s -c\""},{"line_number":584,"context_line":"                  \" \u0027%(sql)s\u0027 -d template1\")"},{"line_number":585,"context_line":"        sql \u003d (\"drop database if exists %(database)s;\")"},{"line_number":586,"context_line":"        sql \u003d sql % {\u0027database\u0027: database}"},{"line_number":587,"context_line":"        droptable \u003d sqlcmd % {\u0027user\u0027: user, \u0027host\u0027: host,"},{"line_number":588,"context_line":"                              \u0027sql\u0027: sql}"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_7db576ec","line":585,"updated":"2016-03-23 04:39:21.000000000","message":"Nit: Unnecessary parentheses.","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"e24f64067fc06ca7a858ccfbecb8ab33228cb5d5","unresolved":false,"context_lines":[{"line_number":582,"context_line":"        # operations there is a special database template1."},{"line_number":583,"context_line":"        sqlcmd \u003d (\"psql -w -U %(user)s -h %(host)s -c\""},{"line_number":584,"context_line":"                  \" \u0027%(sql)s\u0027 -d template1\")"},{"line_number":585,"context_line":"        sql \u003d (\"drop database if exists %(database)s;\")"},{"line_number":586,"context_line":"        sql \u003d sql % {\u0027database\u0027: database}"},{"line_number":587,"context_line":"        droptable \u003d sqlcmd % {\u0027user\u0027: user, \u0027host\u0027: host,"},{"line_number":588,"context_line":"                              \u0027sql\u0027: sql}"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_724731bc","line":585,"in_reply_to":"fa0719c6_7db576ec","updated":"2016-03-23 18:37:47.000000000","message":"Done","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0d7009b7177c7f9265954fa8fea3f8b14aed5bd9","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        droptable \u003d sqlcmd % {\u0027user\u0027: user, \u0027host\u0027: host,"},{"line_number":588,"context_line":"                              \u0027sql\u0027: sql}"},{"line_number":589,"context_line":"        self.execute_cmd(droptable)"},{"line_number":590,"context_line":"        sql \u003d (\"create database %(database)s;\")"},{"line_number":591,"context_line":"        sql \u003d sql % {\u0027database\u0027: database}"},{"line_number":592,"context_line":"        createtable \u003d sqlcmd % {\u0027user\u0027: user, \u0027host\u0027: host,"},{"line_number":593,"context_line":"                                \u0027sql\u0027: sql}"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_1d8c3a34","line":590,"updated":"2016-03-23 04:39:21.000000000","message":"Ditto","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"e24f64067fc06ca7a858ccfbecb8ab33228cb5d5","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        droptable \u003d sqlcmd % {\u0027user\u0027: user, \u0027host\u0027: host,"},{"line_number":588,"context_line":"                              \u0027sql\u0027: sql}"},{"line_number":589,"context_line":"        self.execute_cmd(droptable)"},{"line_number":590,"context_line":"        sql \u003d (\"create database %(database)s;\")"},{"line_number":591,"context_line":"        sql \u003d sql % {\u0027database\u0027: database}"},{"line_number":592,"context_line":"        createtable \u003d sqlcmd % {\u0027user\u0027: user, \u0027host\u0027: host,"},{"line_number":593,"context_line":"                                \u0027sql\u0027: sql}"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa0719c6_5244adb5","line":590,"in_reply_to":"fa0719c6_1d8c3a34","updated":"2016-03-23 18:37:47.000000000","message":"Done","commit_id":"ba64c60ecfba02082229f585ebe8be8e2ac601da"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"4eddfba5bfd5910bfb7664791d31f56cebda8522","unresolved":false,"context_lines":[{"line_number":518,"context_line":"                                       curr, with_data\u003dTrue)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    def _migrate_down(self, config, engine, dest, curr, with_data\u003dFalse):"},{"line_number":521,"context_line":"        # First upgrade it to current to do downgrade"},{"line_number":522,"context_line":"        migration.do_alembic_command(config, \u0027upgrade\u0027, curr)"},{"line_number":523,"context_line":"        if dest:"},{"line_number":524,"context_line":"            migration.do_alembic_command(config, \u0027downgrade\u0027, dest)"},{"line_number":525,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":31,"id":"da0c15f0_813a0ccc","line":522,"range":{"start_line":521,"start_character":0,"end_line":522,"end_character":61},"updated":"2016-03-25 02:45:26.000000000","message":"Sorry, this was bad advice from me. Remove these two lines.","commit_id":"eea7a2d053770bf2236ba21c9ac21b43153e3fcb"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"4eddfba5bfd5910bfb7664791d31f56cebda8522","unresolved":false,"context_lines":[{"line_number":533,"context_line":"                post_downgrade(engine)"},{"line_number":534,"context_line":""},{"line_number":535,"context_line":"    def _migrate_up(self, config, engine, dest, curr, with_data\u003dFalse):"},{"line_number":536,"context_line":"        migration.do_alembic_command(config, \u0027upgrade\u0027, curr)"},{"line_number":537,"context_line":"        if with_data:"},{"line_number":538,"context_line":"            data \u003d None"},{"line_number":539,"context_line":"            pre_upgrade \u003d getattr("}],"source_content_type":"text/x-python","patch_set":31,"id":"da0c15f0_613ed8b9","line":536,"range":{"start_line":536,"start_character":0,"end_line":536,"end_character":61},"updated":"2016-03-25 02:45:26.000000000","message":"Sorry, this was bad advice from me. Remove this line.","commit_id":"eea7a2d053770bf2236ba21c9ac21b43153e3fcb"}],"neutron/tests/unit/db/test_migration.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"c956beaacf8734e4c82556a243f5c773231d5f47","unresolved":false,"context_lines":[{"line_number":389,"context_line":"        connection.close()"},{"line_number":390,"context_line":"        engine.dispose()"},{"line_number":391,"context_line":"        return True"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"def get_table(engine, name):"},{"line_number":395,"context_line":"    \"\"\"Returns an sqlalchemy table dynamically from db."}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_f5775500","line":392,"updated":"2014-10-02 06:43:34.000000000","message":"As I understand this code is based on nova BaseWalkMigrationTestCase, But in oslo.db there are OpportunisticTestCases, that support running tests on different backends. Why it was not used here? https://github.com/openstack/oslo.db/blob/master/oslo/db/sqlalchemy/test_base.py#L103","commit_id":"716d67cb3018b28d01f95212dc6ffc2c18331f21"}],"neutron/tests/unit/test_migrations.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"5873a6bd10d02c2dc6405a6dbbaacca466c8b95a","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        db_config \u003d config.Config(alembic_ini)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        db_config.set_main_option(\u0027script_location\u0027,"},{"line_number":199,"context_line":"                                  \u0027neutron.db.migration:alembic_migrations\u0027)"},{"line_number":200,"context_line":"        db_config.neutron_config \u003d CONF"},{"line_number":201,"context_line":"        db_config.neutron_config.set_override(\u0027connection\u0027,"},{"line_number":202,"context_line":"                                              six.text_type(uri),"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_ea9a3213","line":199,"updated":"2014-10-01 07:09:44.000000000","message":"3 lines above could be used from neutron/db/migration/cli.py.","commit_id":"f4d1d2b3d34bb4c0d7d0d2f55c6559a87af3b684"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"981ee803f3121fa62db1b777c8b9135c7361224d","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        db_config \u003d config.Config(alembic_ini)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        db_config.set_main_option(\u0027script_location\u0027,"},{"line_number":199,"context_line":"                                  \u0027neutron.db.migration:alembic_migrations\u0027)"},{"line_number":200,"context_line":"        db_config.neutron_config \u003d CONF"},{"line_number":201,"context_line":"        db_config.neutron_config.set_override(\u0027connection\u0027,"},{"line_number":202,"context_line":"                                              six.text_type(uri),"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_08c0547b","line":199,"in_reply_to":"baa201ad_ea9a3213","updated":"2014-10-01 15:39:09.000000000","message":"Well, only after your patch. :)\n\nBut, I\u0027ll rebase it now.","commit_id":"f4d1d2b3d34bb4c0d7d0d2f55c6559a87af3b684"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"5873a6bd10d02c2dc6405a6dbbaacca466c8b95a","unresolved":false,"context_lines":[{"line_number":335,"context_line":"                                       \"and ENGINE!\u003d\u0027InnoDB\u0027 \""},{"line_number":336,"context_line":"                                       \"and TABLE_NAME!\u003d\u0027alembic_version\u0027\")"},{"line_number":337,"context_line":"        count \u003d noninnodb.scalar()"},{"line_number":338,"context_line":"        self.assertEqual(count, 0, \"%d non InnoDB tables created\" % count)"},{"line_number":339,"context_line":"        connection.close()"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def test_postgresql_connect_fail(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_caee4e8b","line":338,"updated":"2014-10-01 07:09:44.000000000","message":"Checking about InniDB already done in https://review.openstack.org/76520.","commit_id":"f4d1d2b3d34bb4c0d7d0d2f55c6559a87af3b684"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"981ee803f3121fa62db1b777c8b9135c7361224d","unresolved":false,"context_lines":[{"line_number":335,"context_line":"                                       \"and ENGINE!\u003d\u0027InnoDB\u0027 \""},{"line_number":336,"context_line":"                                       \"and TABLE_NAME!\u003d\u0027alembic_version\u0027\")"},{"line_number":337,"context_line":"        count \u003d noninnodb.scalar()"},{"line_number":338,"context_line":"        self.assertEqual(count, 0, \"%d non InnoDB tables created\" % count)"},{"line_number":339,"context_line":"        connection.close()"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def test_postgresql_connect_fail(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_683800a1","line":338,"in_reply_to":"baa201ad_caee4e8b","updated":"2014-10-01 15:39:09.000000000","message":"Done","commit_id":"f4d1d2b3d34bb4c0d7d0d2f55c6559a87af3b684"}]}
