)]}'
{"nova/cmd/manage.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c6726453a91ea9e13b433453b64c9e0a5bd58bc6","unresolved":false,"context_lines":[{"line_number":852,"context_line":""},{"line_number":853,"context_line":"        table_to_rows_archived \u003d {}"},{"line_number":854,"context_line":"        if until_complete and verbose:"},{"line_number":855,"context_line":"            sys.stdout.write(_(\u0027Archiving\u0027) + \u0027..\u0027)  # noqa"},{"line_number":856,"context_line":"        while True:"},{"line_number":857,"context_line":"            try:"},{"line_number":858,"context_line":"                run \u003d db.archive_deleted_rows(max_rows)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_b2c004e2","line":855,"range":{"start_line":855,"start_character":53,"end_line":855,"end_character":59},"updated":"2016-09-29 22:52:21.000000000","message":"Apparently this is needed because otherwise \"N326 Translated messages cannot be concatenated.  String should be included in translated message.\"\n\nCan\u0027t the \u0027..\u0027 just be included in _(\u0027Archiving..\u0027)?","commit_id":"99c5d1eb640fed978580e975f93d91e2d0210187"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"47bd653b876e9fa6d3037c990de2c4e9cad127fe","unresolved":false,"context_lines":[{"line_number":852,"context_line":""},{"line_number":853,"context_line":"        table_to_rows_archived \u003d {}"},{"line_number":854,"context_line":"        if until_complete and verbose:"},{"line_number":855,"context_line":"            sys.stdout.write(_(\u0027Archiving\u0027) + \u0027..\u0027)  # noqa"},{"line_number":856,"context_line":"        while True:"},{"line_number":857,"context_line":"            try:"},{"line_number":858,"context_line":"                run \u003d db.archive_deleted_rows(max_rows)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_321686f1","line":855,"range":{"start_line":855,"start_character":53,"end_line":855,"end_character":59},"in_reply_to":"3a98d1f4_b2c004e2","updated":"2016-09-30 15:24:07.000000000","message":"It could, but I think normally the goal should be to avoid the translators making the progress meter look different, right? Like, if they changed it from \"Archiving...\" to \"Archiving\" in their language, then it would look wrong.","commit_id":"99c5d1eb640fed978580e975f93d91e2d0210187"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c6726453a91ea9e13b433453b64c9e0a5bd58bc6","unresolved":false,"context_lines":[{"line_number":859,"context_line":"            except KeyboardInterrupt:"},{"line_number":860,"context_line":"                run \u003d {}"},{"line_number":861,"context_line":"                if until_complete and verbose:"},{"line_number":862,"context_line":"                    print(\u0027.stopped\u0027)"},{"line_number":863,"context_line":"                    break"},{"line_number":864,"context_line":"            for k, v in run.items():"},{"line_number":865,"context_line":"                table_to_rows_archived.setdefault(k, 0)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_325b1456","line":862,"range":{"start_line":862,"start_character":26,"end_line":862,"end_character":36},"updated":"2016-09-29 22:52:21.000000000","message":"Need to do the translation and concat and #noqa here too?","commit_id":"99c5d1eb640fed978580e975f93d91e2d0210187"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"47bd653b876e9fa6d3037c990de2c4e9cad127fe","unresolved":false,"context_lines":[{"line_number":859,"context_line":"            except KeyboardInterrupt:"},{"line_number":860,"context_line":"                run \u003d {}"},{"line_number":861,"context_line":"                if until_complete and verbose:"},{"line_number":862,"context_line":"                    print(\u0027.stopped\u0027)"},{"line_number":863,"context_line":"                    break"},{"line_number":864,"context_line":"            for k, v in run.items():"},{"line_number":865,"context_line":"                table_to_rows_archived.setdefault(k, 0)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_32eda6ef","line":862,"range":{"start_line":862,"start_character":26,"end_line":862,"end_character":36},"in_reply_to":"3a98d1f4_325b1456","updated":"2016-09-30 15:24:07.000000000","message":"Yep.","commit_id":"99c5d1eb640fed978580e975f93d91e2d0210187"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c6726453a91ea9e13b433453b64c9e0a5bd58bc6","unresolved":false,"context_lines":[{"line_number":860,"context_line":"                run \u003d {}"},{"line_number":861,"context_line":"                if until_complete and verbose:"},{"line_number":862,"context_line":"                    print(\u0027.stopped\u0027)"},{"line_number":863,"context_line":"                    break"},{"line_number":864,"context_line":"            for k, v in run.items():"},{"line_number":865,"context_line":"                table_to_rows_archived.setdefault(k, 0)"},{"line_number":866,"context_line":"                table_to_rows_archived[k] +\u003d v"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_cd7df56f","line":863,"range":{"start_line":863,"start_character":20,"end_line":863,"end_character":25},"updated":"2016-09-29 22:52:21.000000000","message":"I think we need to break the loop even if not verbose, right?","commit_id":"99c5d1eb640fed978580e975f93d91e2d0210187"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"dbe90591db02f5016b009138e5a75c0f7aa96f08","unresolved":false,"context_lines":[{"line_number":860,"context_line":"                run \u003d {}"},{"line_number":861,"context_line":"                if until_complete and verbose:"},{"line_number":862,"context_line":"                    print(\u0027.stopped\u0027)"},{"line_number":863,"context_line":"                    break"},{"line_number":864,"context_line":"            for k, v in run.items():"},{"line_number":865,"context_line":"                table_to_rows_archived.setdefault(k, 0)"},{"line_number":866,"context_line":"                table_to_rows_archived[k] +\u003d v"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_df21184f","line":863,"range":{"start_line":863,"start_character":20,"end_line":863,"end_character":25},"in_reply_to":"3a98d1f4_cd7df56f","updated":"2016-09-29 23:07:52.000000000","message":"Hm, it looks like the loop breaks anyway for non-verbose because of L869, since run \u003d {}. So maybe just get rid of this break or consolidate things in some way.","commit_id":"99c5d1eb640fed978580e975f93d91e2d0210187"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"47bd653b876e9fa6d3037c990de2c4e9cad127fe","unresolved":false,"context_lines":[{"line_number":860,"context_line":"                run \u003d {}"},{"line_number":861,"context_line":"                if until_complete and verbose:"},{"line_number":862,"context_line":"                    print(\u0027.stopped\u0027)"},{"line_number":863,"context_line":"                    break"},{"line_number":864,"context_line":"            for k, v in run.items():"},{"line_number":865,"context_line":"                table_to_rows_archived.setdefault(k, 0)"},{"line_number":866,"context_line":"                table_to_rows_archived[k] +\u003d v"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_d27e4218","line":863,"range":{"start_line":863,"start_character":20,"end_line":863,"end_character":25},"in_reply_to":"3a98d1f4_df21184f","updated":"2016-09-30 15:24:07.000000000","message":"If I do that then it will print:\n\n Archiving...stoppedcomplete","commit_id":"99c5d1eb640fed978580e975f93d91e2d0210187"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c6726453a91ea9e13b433453b64c9e0a5bd58bc6","unresolved":false,"context_lines":[{"line_number":868,"context_line":"                break"},{"line_number":869,"context_line":"            elif not run:"},{"line_number":870,"context_line":"                if verbose:"},{"line_number":871,"context_line":"                    print(\u0027.\u0027 + _(\u0027complete\u0027))  # noqa"},{"line_number":872,"context_line":"                break"},{"line_number":873,"context_line":"            if verbose:"},{"line_number":874,"context_line":"                sys.stdout.write(\u0027.\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_ed72b1ac","line":871,"range":{"start_line":871,"start_character":34,"end_line":871,"end_character":44},"updated":"2016-09-29 22:52:21.000000000","message":"Same here, why can\u0027t we just put _(\u0027.complete\u0027) here and not use #noqa?","commit_id":"99c5d1eb640fed978580e975f93d91e2d0210187"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"e046934ea8f7de58fc410a81827584db0c38f6d7","unresolved":false,"context_lines":[{"line_number":852,"context_line":""},{"line_number":853,"context_line":"        table_to_rows_archived \u003d {}"},{"line_number":854,"context_line":"        if until_complete and verbose:"},{"line_number":855,"context_line":"            sys.stdout.write(_(\u0027Archiving\u0027) + \u0027..\u0027)  # noqa"},{"line_number":856,"context_line":"        while True:"},{"line_number":857,"context_line":"            try:"},{"line_number":858,"context_line":"                run \u003d db.archive_deleted_rows(max_rows)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a98d1f4_ee8a2f1a","line":855,"updated":"2016-10-03 18:31:22.000000000","message":"Apparently python2 and python3 have ways to do this with print but they\u0027re incompatible :(","commit_id":"4439d91980f16455b2eb24b1c080297f6a6e333f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"e046934ea8f7de58fc410a81827584db0c38f6d7","unresolved":false,"context_lines":[{"line_number":856,"context_line":"        while True:"},{"line_number":857,"context_line":"            try:"},{"line_number":858,"context_line":"                run \u003d db.archive_deleted_rows(max_rows)"},{"line_number":859,"context_line":"            except KeyboardInterrupt:"},{"line_number":860,"context_line":"                run \u003d {}"},{"line_number":861,"context_line":"                if until_complete and verbose:"},{"line_number":862,"context_line":"                    print(\u0027.\u0027 + _(\u0027stopped\u0027))  # noqa"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a98d1f4_aedae714","line":859,"updated":"2016-10-03 18:31:22.000000000","message":"While the chance is incredibly small it would be possible for the KeyboardInterrupt to happen while the code in the rest of the while loop is running. Is there a reason not to wrap the whole while loop?","commit_id":"4439d91980f16455b2eb24b1c080297f6a6e333f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"21b5abd08009131ebafb16b236207d03a84220b2","unresolved":false,"context_lines":[{"line_number":856,"context_line":"        while True:"},{"line_number":857,"context_line":"            try:"},{"line_number":858,"context_line":"                run \u003d db.archive_deleted_rows(max_rows)"},{"line_number":859,"context_line":"            except KeyboardInterrupt:"},{"line_number":860,"context_line":"                run \u003d {}"},{"line_number":861,"context_line":"                if until_complete and verbose:"},{"line_number":862,"context_line":"                    print(\u0027.\u0027 + _(\u0027stopped\u0027))  # noqa"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a98d1f4_b14de6c5","line":859,"in_reply_to":"3a98d1f4_9138ead4","updated":"2016-10-03 18:59:26.000000000","message":"I would like to see the refactor as a future body of work at least, but it\u0027s a fine point that it doesn\u0027t affect the important operation just the status output. So I would be okay letting it slide for now.","commit_id":"4439d91980f16455b2eb24b1c080297f6a6e333f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"28ffbce876e63f4b98526de6ffcef736476b4771","unresolved":false,"context_lines":[{"line_number":856,"context_line":"        while True:"},{"line_number":857,"context_line":"            try:"},{"line_number":858,"context_line":"                run \u003d db.archive_deleted_rows(max_rows)"},{"line_number":859,"context_line":"            except KeyboardInterrupt:"},{"line_number":860,"context_line":"                run \u003d {}"},{"line_number":861,"context_line":"                if until_complete and verbose:"},{"line_number":862,"context_line":"                    print(\u0027.\u0027 + _(\u0027stopped\u0027))  # noqa"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a98d1f4_9138ead4","line":859,"in_reply_to":"3a98d1f4_aedae714","updated":"2016-10-03 18:39:40.000000000","message":"Just the gross-ness aspect (or breaking it out). The chance is vanishingly small, *and* we\u0027d still complete the partial bit work if we did, we just wouldn\u0027t print the summary.\n\nI wanted to change less than I did here, so i guess I was just trying to avoid this being any larger than it had to be for an otherwise small functional change.\n\nNot a good excuse.","commit_id":"4439d91980f16455b2eb24b1c080297f6a6e333f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"e046934ea8f7de58fc410a81827584db0c38f6d7","unresolved":false,"context_lines":[{"line_number":871,"context_line":"                    print(\u0027.\u0027 + _(\u0027complete\u0027))  # noqa"},{"line_number":872,"context_line":"                break"},{"line_number":873,"context_line":"            if verbose:"},{"line_number":874,"context_line":"                sys.stdout.write(\u0027.\u0027)"},{"line_number":875,"context_line":"        if verbose:"},{"line_number":876,"context_line":"            if table_to_rows_archived:"},{"line_number":877,"context_line":"                utils.print_dict(table_to_rows_archived, _(\u0027Table\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a98d1f4_ee4cef9f","line":874,"updated":"2016-10-03 18:31:22.000000000","message":"This is a stylistic nit but I think the block starting a #867 would be more clear if it was:\n\n    if until_complete:\n        if not run:\n            ...\n        if verbose:\n            sys.stdout.write(\u0027.\u0027)\n\nI say that because I looked at #873-784 and thought \"oh, if verbose is set we\u0027ll output a . but until_complete isn\u0027t checked so it\u0027s possible that it\u0027s False and line #855 won\u0027t have run.\" The break on #868 takes care of the check, but it\u0027s sort of invisible.\n\n\u003c/nit\u003e","commit_id":"4439d91980f16455b2eb24b1c080297f6a6e333f"}],"nova/tests/unit/test_nova_manage.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c6726453a91ea9e13b433453b64c9e0a5bd58bc6","unresolved":false,"context_lines":[{"line_number":532,"context_line":"        mock_db_archive.side_effect \u003d ["},{"line_number":533,"context_line":"            {\u0027instances\u0027: 10, \u0027instance_extra\u0027: 5},"},{"line_number":534,"context_line":"            {\u0027instances\u0027: 5, \u0027instance_faults\u0027: 1},"},{"line_number":535,"context_line":"            KeyboardInterrupt]"},{"line_number":536,"context_line":"        result \u003d self.commands.archive_deleted_rows(20, verbose\u003dTrue,"},{"line_number":537,"context_line":"                                                    until_complete\u003dTrue)"},{"line_number":538,"context_line":"        self.assertEqual(1, result)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_edb8f1e7","line":535,"updated":"2016-09-29 22:52:21.000000000","message":"I was thinking it seems like we should do something like add another side_effect that would return stuff, so we verify that we broke the loop. But I think if the mock were to be called again with no corresponding side_effect to use, it would fail the test anyhow.","commit_id":"99c5d1eb640fed978580e975f93d91e2d0210187"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"47bd653b876e9fa6d3037c990de2c4e9cad127fe","unresolved":false,"context_lines":[{"line_number":532,"context_line":"        mock_db_archive.side_effect \u003d ["},{"line_number":533,"context_line":"            {\u0027instances\u0027: 10, \u0027instance_extra\u0027: 5},"},{"line_number":534,"context_line":"            {\u0027instances\u0027: 5, \u0027instance_faults\u0027: 1},"},{"line_number":535,"context_line":"            KeyboardInterrupt]"},{"line_number":536,"context_line":"        result \u003d self.commands.archive_deleted_rows(20, verbose\u003dTrue,"},{"line_number":537,"context_line":"                                                    until_complete\u003dTrue)"},{"line_number":538,"context_line":"        self.assertEqual(1, result)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_72e48ee0","line":535,"in_reply_to":"3a98d1f4_edb8f1e7","updated":"2016-09-30 15:24:07.000000000","message":"Yep.","commit_id":"99c5d1eb640fed978580e975f93d91e2d0210187"}],"releasenotes/notes/archive-all-db-aadf2ce0394c24fa.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a85a24c2218b75ebc933d2a92e36ae49d19732c5","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support for archiving all deleted rows from the database has"},{"line_number":5,"context_line":"    been added to the ``nova-manage db archive_deleted_rows``"},{"line_number":6,"context_line":"    command. The ``--until-complete`` command will continuously"},{"line_number":7,"context_line":"    run the process until no more rows are available for archiving."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3a98d1f4_226c51cf","line":6,"range":{"start_line":6,"start_character":38,"end_line":6,"end_character":45},"updated":"2016-10-02 14:54:01.000000000","message":"option","commit_id":"4439d91980f16455b2eb24b1c080297f6a6e333f"}]}
