)]}'
{"glance/cmd/manage.py":[{"author":{"_account_id":27302,"name":"Shilpa Devharakar","email":"shilpa.devharakar@nttdata.com","username":"shilpa.devharakar"},"change_message_id":"495ca95e13e251ee3aebee41865278d26a936e90","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        An exit code of 5 indicates db contract is needed, see stdout output."},{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        engine \u003d db_api.get_engine()"},{"line_number":100,"context_line":"        if engine.engine.name not in [\u0027mysql\u0027, \u0027sqlite\u0027]:"},{"line_number":101,"context_line":"            sys.exit(_(\u0027Rolling upgrades are currently supported only for \u0027"},{"line_number":102,"context_line":"                       \u0027MySQL and Sqlite\u0027))"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_90217650","line":100,"range":{"start_line":100,"start_character":8,"end_line":100,"end_character":57},"updated":"2018-02-20 06:17:44.000000000","message":"check functionality is used for offline as well.\nSo this will not work if DB engine is postgres.","commit_id":"7497d030073fce4ae6e7db031aff2235c5d3b843"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e5f9746db8313635249d8bfd5e53701e23cd0f45","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        An exit code of 5 indicates db contract is needed, see stdout output."},{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        engine \u003d db_api.get_engine()"},{"line_number":100,"context_line":"        if engine.engine.name not in [\u0027mysql\u0027, \u0027sqlite\u0027]:"},{"line_number":101,"context_line":"            sys.exit(_(\u0027Rolling upgrades are currently supported only for \u0027"},{"line_number":102,"context_line":"                       \u0027MySQL and Sqlite\u0027))"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_10a1e6a9","line":100,"range":{"start_line":100,"start_character":8,"end_line":100,"end_character":57},"in_reply_to":"3fa0c359_90217650","updated":"2018-02-20 06:23:27.000000000","message":"Check functionality should only be used in case of rolling upgrades i.e. online migration and not offline migration","commit_id":"7497d030073fce4ae6e7db031aff2235c5d3b843"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"d224fdcbfe07fe422ef57944ea2617198cf8e264","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        An exit code of 5 indicates db contract is needed, see stdout output."},{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        engine \u003d db_api.get_engine()"},{"line_number":100,"context_line":"        if engine.engine.name not in [\u0027mysql\u0027, \u0027sqlite\u0027]:"},{"line_number":101,"context_line":"            sys.exit(_(\u0027Rolling upgrades are currently supported only for \u0027"},{"line_number":102,"context_line":"                       \u0027MySQL and Sqlite\u0027))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        curr_heads \u003d alembic_migrations.get_current_alembic_heads()"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_b0cb5248","line":102,"range":{"start_line":100,"start_character":8,"end_line":102,"end_character":43},"updated":"2018-02-20 06:35:42.000000000","message":"I think glance is allowing online migration in experimental mode for PostgreSQL database so this check should be removed as done in expand/migrate/contract methods.","commit_id":"9122230e2c96e69cdfd586e385ace2a8b7162a21"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"d6d6fa7be6f8f7e38e6581c544788bca66ae28eb","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        An exit code of 5 indicates db contract is needed, see stdout output."},{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        engine \u003d db_api.get_engine()"},{"line_number":100,"context_line":"        if engine.engine.name not in [\u0027mysql\u0027, \u0027sqlite\u0027]:"},{"line_number":101,"context_line":"            sys.exit(_(\u0027Rolling upgrades are currently supported only for \u0027"},{"line_number":102,"context_line":"                       \u0027MySQL and Sqlite\u0027))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        curr_heads \u003d alembic_migrations.get_current_alembic_heads()"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_d0829ec8","line":102,"range":{"start_line":100,"start_character":8,"end_line":102,"end_character":43},"in_reply_to":"3fa0c359_b0391240","updated":"2018-02-20 06:44:58.000000000","message":"The main reason is triggers written in expand and migrate scripts are not compatible with postgres thus online migration will never work with postgresql.","commit_id":"9122230e2c96e69cdfd586e385ace2a8b7162a21"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"ef81311d0763469e52e29373289e3d670c01e41f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        An exit code of 5 indicates db contract is needed, see stdout output."},{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        engine \u003d db_api.get_engine()"},{"line_number":100,"context_line":"        if engine.engine.name not in [\u0027mysql\u0027, \u0027sqlite\u0027]:"},{"line_number":101,"context_line":"            sys.exit(_(\u0027Rolling upgrades are currently supported only for \u0027"},{"line_number":102,"context_line":"                       \u0027MySQL and Sqlite\u0027))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        curr_heads \u003d alembic_migrations.get_current_alembic_heads()"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_b0391240","line":102,"range":{"start_line":100,"start_character":8,"end_line":102,"end_character":43},"in_reply_to":"3fa0c359_b0cb5248","updated":"2018-02-20 06:38:50.000000000","message":"As of now glance is not allowing online migration for PostgreSQL database.","commit_id":"9122230e2c96e69cdfd586e385ace2a8b7162a21"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"7161716cf584baa38a3d42ce31b3a30cf4a85b23","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        An exit code of 5 indicates db contract is needed, see stdout output."},{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        engine \u003d db_api.get_engine()"},{"line_number":100,"context_line":"        if engine.engine.name not in [\u0027mysql\u0027, \u0027sqlite\u0027]:"},{"line_number":101,"context_line":"            sys.exit(_(\u0027Rolling upgrades are currently supported only for \u0027"},{"line_number":102,"context_line":"                       \u0027MySQL and Sqlite\u0027))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        curr_heads \u003d alembic_migrations.get_current_alembic_heads()"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_933bc0cf","line":102,"range":{"start_line":100,"start_character":8,"end_line":102,"end_character":43},"in_reply_to":"3fa0c359_d0829ec8","updated":"2018-02-20 07:14:24.000000000","message":"If we are allowing online migration for postgreSQL database with caveat in release notes, then I think there is no harm in supporting check method is my main point.","commit_id":"9122230e2c96e69cdfd586e385ace2a8b7162a21"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"9e8f00e1726141dac260dc2cf1f049c7f4de7784","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    def sync(self, version\u003dNone):"},{"line_number":144,"context_line":"        engine \u003d db_api.get_engine().engine"},{"line_number":145,"context_line":"        if engine.name \u003d\u003d \u0027postgresql\u0027:"},{"line_number":146,"context_line":"            if version is None:"},{"line_number":147,"context_line":"                version \u003d db_migration.LATEST_REVISION"},{"line_number":148,"context_line":"                self._sync(version)"},{"line_number":149,"context_line":"                return"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        curr_heads \u003d alembic_migrations.get_current_alembic_heads()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa0c359_8f7f09de","side":"PARENT","line":148,"range":{"start_line":146,"start_character":11,"end_line":148,"end_character":35},"updated":"2018-02-20 17:32:11.000000000","message":"Suppose someone is using postgres.  Why don\u0027t we have to do this part anymore?","commit_id":"f2f8637d9c5194e4ff16f8ee2e29a75fe076471e"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"4e3f8332bff8da71ffbd972c983fff2547d43259","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    def sync(self, version\u003dNone):"},{"line_number":144,"context_line":"        engine \u003d db_api.get_engine().engine"},{"line_number":145,"context_line":"        if engine.name \u003d\u003d \u0027postgresql\u0027:"},{"line_number":146,"context_line":"            if version is None:"},{"line_number":147,"context_line":"                version \u003d db_migration.LATEST_REVISION"},{"line_number":148,"context_line":"                self._sync(version)"},{"line_number":149,"context_line":"                return"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        curr_heads \u003d alembic_migrations.get_current_alembic_heads()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa0c359_af15254b","side":"PARENT","line":148,"range":{"start_line":146,"start_character":11,"end_line":148,"end_character":35},"in_reply_to":"3fa0c359_4f77c1d5","updated":"2018-02-20 17:42:38.000000000","message":"Ok, that\u0027s what I thought.  Just wanted to make sure.  Thanks!","commit_id":"f2f8637d9c5194e4ff16f8ee2e29a75fe076471e"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6ebf5d4c9bd1e0afcaa0181455b6047d924af6ab","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    def sync(self, version\u003dNone):"},{"line_number":144,"context_line":"        engine \u003d db_api.get_engine().engine"},{"line_number":145,"context_line":"        if engine.name \u003d\u003d \u0027postgresql\u0027:"},{"line_number":146,"context_line":"            if version is None:"},{"line_number":147,"context_line":"                version \u003d db_migration.LATEST_REVISION"},{"line_number":148,"context_line":"                self._sync(version)"},{"line_number":149,"context_line":"                return"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        curr_heads \u003d alembic_migrations.get_current_alembic_heads()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa0c359_4f77c1d5","side":"PARENT","line":148,"range":{"start_line":146,"start_character":11,"end_line":148,"end_character":35},"in_reply_to":"3fa0c359_8f7f09de","updated":"2018-02-20 17:40:50.000000000","message":"This is because if we use this way then it will not execute migration scripts at all. Look at the patch, some scripts has been removed (https://review.openstack.org/#/c/433934/15/glance/db/sqlalchemy/alembic_migrations/versions/ocata01_add_visibility_remove_is_public.py) which was earlier doing the job of migration as well. We can not revert those scripts back as those are not compatible with E-M-C approach as they are using ocata01, pike01 as revisions where as E-M-C requires revisions as ocata_expand01 or pike_expand01 etc.","commit_id":"f2f8637d9c5194e4ff16f8ee2e29a75fe076471e"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"9e8f00e1726141dac260dc2cf1f049c7f4de7784","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                \"revision:\"), version)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @args(\u0027--version\u0027, metavar\u003d\u0027\u003cversion\u003e\u0027, help\u003d\u0027Database version\u0027)"},{"line_number":143,"context_line":"    def sync(self, version\u003dNone):"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        curr_heads \u003d alembic_migrations.get_current_alembic_heads()"},{"line_number":146,"context_line":"        contract \u003d alembic_migrations.get_alembic_branch_head("}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa0c359_0f3219f3","line":143,"updated":"2018-02-20 17:32:11.000000000","message":"Add a docstring here, something like:\n\n  \"\"\"Perform a complete (offline) database migration\"\"\"","commit_id":"0a292b8e79eb1a577b0fb1e383df118c20041559"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"d1d34ff11fc34ef503e83864c31cd18450aeb27a","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                \"revision:\"), version)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @args(\u0027--version\u0027, metavar\u003d\u0027\u003cversion\u003e\u0027, help\u003d\u0027Database version\u0027)"},{"line_number":143,"context_line":"    def sync(self, version\u003dNone):"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        curr_heads \u003d alembic_migrations.get_current_alembic_heads()"},{"line_number":146,"context_line":"        contract \u003d alembic_migrations.get_alembic_branch_head("}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa0c359_d2285487","line":143,"in_reply_to":"3fa0c359_0f3219f3","updated":"2018-02-20 17:56:19.000000000","message":"Done","commit_id":"0a292b8e79eb1a577b0fb1e383df118c20041559"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6ebf5d4c9bd1e0afcaa0181455b6047d924af6ab","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                \"revision:\"), version)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @args(\u0027--version\u0027, metavar\u003d\u0027\u003cversion\u003e\u0027, help\u003d\u0027Database version\u0027)"},{"line_number":143,"context_line":"    def sync(self, version\u003dNone):"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        curr_heads \u003d alembic_migrations.get_current_alembic_heads()"},{"line_number":146,"context_line":"        contract \u003d alembic_migrations.get_alembic_branch_head("}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa0c359_2f7a75b9","line":143,"in_reply_to":"3fa0c359_0f3219f3","updated":"2018-02-20 17:40:50.000000000","message":"ok","commit_id":"0a292b8e79eb1a577b0fb1e383df118c20041559"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"9e8f00e1726141dac260dc2cf1f049c7f4de7784","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    def _validate_engine(self, engine):"},{"line_number":183,"context_line":"        \"\"\"Check engine is valid or not."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        MySql is only supported for Glance EMC."},{"line_number":186,"context_line":"        Adding sqlite as engine to support existing functional test cases."},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        :param engine: database engine name"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa0c359_4fafc1e2","line":185,"range":{"start_line":185,"start_character":36,"end_line":185,"end_character":46},"updated":"2018-02-20 17:32:11.000000000","message":"s/Glance EMC/online upgrade/","commit_id":"0a292b8e79eb1a577b0fb1e383df118c20041559"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"d1d34ff11fc34ef503e83864c31cd18450aeb27a","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    def _validate_engine(self, engine):"},{"line_number":183,"context_line":"        \"\"\"Check engine is valid or not."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        MySql is only supported for Glance EMC."},{"line_number":186,"context_line":"        Adding sqlite as engine to support existing functional test cases."},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        :param engine: database engine name"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa0c359_d24db472","line":185,"range":{"start_line":185,"start_character":36,"end_line":185,"end_character":46},"in_reply_to":"3fa0c359_4fafc1e2","updated":"2018-02-20 17:56:19.000000000","message":"Done","commit_id":"0a292b8e79eb1a577b0fb1e383df118c20041559"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"9e8f00e1726141dac260dc2cf1f049c7f4de7784","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                       \u0027MySQL and Sqlite\u0027))"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def expand(self, online_migration\u003dTrue):"},{"line_number":195,"context_line":"        \"\"\"Run the expansion phase of a rolling upgrade procedure.\"\"\""},{"line_number":196,"context_line":"        if online_migration:"},{"line_number":197,"context_line":"            self._validate_engine(db_api.get_engine())"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa0c359_8f7aa974","line":195,"range":{"start_line":195,"start_character":40,"end_line":195,"end_character":66},"updated":"2018-02-20 17:32:11.000000000","message":"s/rolling upgrade procedure/database migration/","commit_id":"0a292b8e79eb1a577b0fb1e383df118c20041559"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"d1d34ff11fc34ef503e83864c31cd18450aeb27a","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                       \u0027MySQL and Sqlite\u0027))"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def expand(self, online_migration\u003dTrue):"},{"line_number":195,"context_line":"        \"\"\"Run the expansion phase of a rolling upgrade procedure.\"\"\""},{"line_number":196,"context_line":"        if online_migration:"},{"line_number":197,"context_line":"            self._validate_engine(db_api.get_engine())"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa0c359_f2523013","line":195,"range":{"start_line":195,"start_character":40,"end_line":195,"end_character":66},"in_reply_to":"3fa0c359_8f7aa974","updated":"2018-02-20 17:56:19.000000000","message":"Done","commit_id":"0a292b8e79eb1a577b0fb1e383df118c20041559"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"9e8f00e1726141dac260dc2cf1f049c7f4de7784","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            print(_(\u0027Database expansion is up to date. No expansion needed.\u0027))"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def contract(self, online_migration\u003dTrue):"},{"line_number":226,"context_line":"        \"\"\"Run the contraction phase of a rolling upgrade procedure.\"\"\""},{"line_number":227,"context_line":"        if online_migration:"},{"line_number":228,"context_line":"            self._validate_engine(db_api.get_engine())"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa0c359_0f8e9978","line":226,"range":{"start_line":226,"start_character":42,"end_line":226,"end_character":67},"updated":"2018-02-20 17:32:11.000000000","message":"s/rolling upgrade procedure/database migration/","commit_id":"0a292b8e79eb1a577b0fb1e383df118c20041559"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"d1d34ff11fc34ef503e83864c31cd18450aeb27a","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            print(_(\u0027Database expansion is up to date. No expansion needed.\u0027))"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def contract(self, online_migration\u003dTrue):"},{"line_number":226,"context_line":"        \"\"\"Run the contraction phase of a rolling upgrade procedure.\"\"\""},{"line_number":227,"context_line":"        if online_migration:"},{"line_number":228,"context_line":"            self._validate_engine(db_api.get_engine())"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa0c359_b2582831","line":226,"range":{"start_line":226,"start_character":42,"end_line":226,"end_character":67},"in_reply_to":"3fa0c359_0f8e9978","updated":"2018-02-20 17:56:19.000000000","message":"Done","commit_id":"0a292b8e79eb1a577b0fb1e383df118c20041559"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"9e8f00e1726141dac260dc2cf1f049c7f4de7784","unresolved":false,"context_lines":[{"line_number":262,"context_line":"                       \u0027%(curr_revs)s \u0027) % {\u0027e_rev\u0027: expand_head,"},{"line_number":263,"context_line":"                                            \u0027curr_revs\u0027: curr_heads})"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def migrate(self, online_migration\u003dTrue):"},{"line_number":266,"context_line":"        if online_migration:"},{"line_number":267,"context_line":"            self._validate_engine(db_api.get_engine())"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa0c359_2fe03526","line":265,"updated":"2018-02-20 17:32:11.000000000","message":"add a docstring, something like:\n\n  \"\"\"Run the data migration phase of a database migration.\"\"\"","commit_id":"0a292b8e79eb1a577b0fb1e383df118c20041559"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"d1d34ff11fc34ef503e83864c31cd18450aeb27a","unresolved":false,"context_lines":[{"line_number":262,"context_line":"                       \u0027%(curr_revs)s \u0027) % {\u0027e_rev\u0027: expand_head,"},{"line_number":263,"context_line":"                                            \u0027curr_revs\u0027: curr_heads})"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def migrate(self, online_migration\u003dTrue):"},{"line_number":266,"context_line":"        if online_migration:"},{"line_number":267,"context_line":"            self._validate_engine(db_api.get_engine())"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa0c359_12479c4e","line":265,"in_reply_to":"3fa0c359_2fe03526","updated":"2018-02-20 17:56:19.000000000","message":"Done","commit_id":"0a292b8e79eb1a577b0fb1e383df118c20041559"}]}
