)]}'
{"nova/tests/functional/db/test_archive.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a0b254637e5a1f5f6920048f0bed983b4fb7d22a","unresolved":true,"context_lines":[{"line_number":129,"context_line":"        self.assertNotIn(\u0027pci_devices\u0027, results)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def test_archive_deleted_rows_incomplete(self):"},{"line_number":132,"context_line":"        \"\"\"This tests a scenario where archive_deleted_rows is run with"},{"line_number":133,"context_line":"        --max_rows and does not run to \"completion\". That is, the archive is"},{"line_number":134,"context_line":"        stopped before all archivable records have been archived. We want to"},{"line_number":135,"context_line":"        verify, for example, that we can successfully do a GET /servers/detail"},{"line_number":136,"context_line":"        at any point between archive_deleted_rows runs without errors."},{"line_number":137,"context_line":"        \"\"\""},{"line_number":138,"context_line":"        # Boots a server, deletes it, and then tries to archive it."},{"line_number":139,"context_line":"        server \u003d self._create_server()"}],"source_content_type":"text/x-python","patch_set":1,"id":"1d7397b1_25c0224d","line":136,"range":{"start_line":132,"start_character":11,"end_line":136,"end_character":70},"updated":"2021-02-17 20:39:11.000000000","message":"Sample update text:\n\nThis tests a scenario where archive_deleted_rows is run with\n--max_rows and does not run to completion. That is, the archive is\nstopped before all archivable records have been archived. Specifically, the problematic state is when a single instance becomes partially archived (example: \u0027instance_extra\u0027 record for one instance has been archived while its \u0027instances\u0027 record remains). Any access of the instance (example: listing deleted instances) that triggers the retrieval of a dependent record that has been archived away, results in undefined behavior that may raise an error.\n\nWe will force the system into a state where a single deleted instance is partially archived. We want to verify that we can, for example, successfully do a GET /servers/detail at any point between partial archive_deleted_rows runs without errors.","commit_id":"cd99f480ce8b6fa9272b0dad81b5de0fdaa58422"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"8e8e523a98caf6f163eaea71a1e135e118db2b86","unresolved":true,"context_lines":[{"line_number":129,"context_line":"        self.assertNotIn(\u0027pci_devices\u0027, results)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def test_archive_deleted_rows_incomplete(self):"},{"line_number":132,"context_line":"        \"\"\"This tests a scenario where archive_deleted_rows is run with"},{"line_number":133,"context_line":"        --max_rows and does not run to \"completion\". That is, the archive is"},{"line_number":134,"context_line":"        stopped before all archivable records have been archived. We want to"},{"line_number":135,"context_line":"        verify, for example, that we can successfully do a GET /servers/detail"},{"line_number":136,"context_line":"        at any point between archive_deleted_rows runs without errors."},{"line_number":137,"context_line":"        \"\"\""},{"line_number":138,"context_line":"        # Boots a server, deletes it, and then tries to archive it."},{"line_number":139,"context_line":"        server \u003d self._create_server()"}],"source_content_type":"text/x-python","patch_set":1,"id":"58570203_b927d30e","line":136,"range":{"start_line":132,"start_character":11,"end_line":136,"end_character":70},"in_reply_to":"1d7397b1_25c0224d","updated":"2021-03-01 22:48:00.000000000","message":"ACK LGTM thanks!","commit_id":"cd99f480ce8b6fa9272b0dad81b5de0fdaa58422"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"272018ab8b1cc1e48969a467626e204908e99013","unresolved":true,"context_lines":[{"line_number":135,"context_line":"        verify, for example, that we can successfully do a GET /servers/detail"},{"line_number":136,"context_line":"        at any point between archive_deleted_rows runs without errors."},{"line_number":137,"context_line":"        \"\"\""},{"line_number":138,"context_line":"        # Boots a server, deletes it, and then tries to archive it."},{"line_number":139,"context_line":"        server \u003d self._create_server()"},{"line_number":140,"context_line":"        server_id \u003d server[\u0027id\u0027]"},{"line_number":141,"context_line":"        # Assert that there are instance_actions. instance_actions are"},{"line_number":142,"context_line":"        # interesting since we don\u0027t soft delete them but they have a foreign"}],"source_content_type":"text/x-python","patch_set":1,"id":"f5ce7c30_12153045","line":139,"range":{"start_line":138,"start_character":0,"end_line":139,"end_character":38},"updated":"2021-02-17 10:24:29.000000000","message":"How do we reproduce this bug if we only create and delete a single server in this test?\n\nFrom the above description I was assuming that we would have to create and delete at least two servers, archive one, try to get the other etc.","commit_id":"cd99f480ce8b6fa9272b0dad81b5de0fdaa58422"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"8e8e523a98caf6f163eaea71a1e135e118db2b86","unresolved":true,"context_lines":[{"line_number":135,"context_line":"        verify, for example, that we can successfully do a GET /servers/detail"},{"line_number":136,"context_line":"        at any point between archive_deleted_rows runs without errors."},{"line_number":137,"context_line":"        \"\"\""},{"line_number":138,"context_line":"        # Boots a server, deletes it, and then tries to archive it."},{"line_number":139,"context_line":"        server \u003d self._create_server()"},{"line_number":140,"context_line":"        server_id \u003d server[\u0027id\u0027]"},{"line_number":141,"context_line":"        # Assert that there are instance_actions. instance_actions are"},{"line_number":142,"context_line":"        # interesting since we don\u0027t soft delete them but they have a foreign"}],"source_content_type":"text/x-python","patch_set":1,"id":"7e0bb920_4bd33881","line":139,"range":{"start_line":138,"start_character":0,"end_line":139,"end_character":38},"in_reply_to":"be40f287_b0594586","updated":"2021-03-01 22:48:00.000000000","message":"Ahhhhh right understood, I was missing the partial record part and assuming everything about an instance had gone.","commit_id":"cd99f480ce8b6fa9272b0dad81b5de0fdaa58422"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"21bd02dafc0633c0b66a98db001410cde84599e8","unresolved":true,"context_lines":[{"line_number":135,"context_line":"        verify, for example, that we can successfully do a GET /servers/detail"},{"line_number":136,"context_line":"        at any point between archive_deleted_rows runs without errors."},{"line_number":137,"context_line":"        \"\"\""},{"line_number":138,"context_line":"        # Boots a server, deletes it, and then tries to archive it."},{"line_number":139,"context_line":"        server \u003d self._create_server()"},{"line_number":140,"context_line":"        server_id \u003d server[\u0027id\u0027]"},{"line_number":141,"context_line":"        # Assert that there are instance_actions. instance_actions are"},{"line_number":142,"context_line":"        # interesting since we don\u0027t soft delete them but they have a foreign"}],"source_content_type":"text/x-python","patch_set":1,"id":"be40f287_b0594586","line":139,"range":{"start_line":138,"start_character":0,"end_line":139,"end_character":38},"in_reply_to":"f5ce7c30_12153045","updated":"2021-02-17 16:31:29.000000000","message":"Sorry for the confusion, I\u0027ll add more to the comment to explain it more clearly.\n\nThe bug occurs when we end up in a state where we\u0027ve archived *part* of an instance (example: its \u0027instance_extra\u0027 record) and have not archived the entire instance (example: the \u0027instances\u0027 record remains). So to reproduce, we need to \"split\" one instance\u0027s records apart such that it has its \u0027instances\u0027 record present but its \u0027instance_extra\u0027 record has been archived away. Goal is to force access of a \"partially\" archived single instance.","commit_id":"cd99f480ce8b6fa9272b0dad81b5de0fdaa58422"}]}
