)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a2b08a92c922707da60cede466be082c091bb37f","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This does a few things:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"1. Add a attachment_ids_for_instance() method which"},{"line_number":12,"context_line":"   can be used to get all volume attachment IDs for an"},{"line_number":13,"context_line":"   instance which is useful in tests that need to make"},{"line_number":14,"context_line":"   sure attachments are tracked and cleaned up properly,"},{"line_number":15,"context_line":"   i.e. to make sure nothing leaked."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"2. Implements the attachment_complete method in order to"},{"line_number":18,"context_line":"   fail if code is trying to complete an attachment that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5fc1f717_bd2d1096","line":15,"range":{"start_line":11,"start_character":0,"end_line":15,"end_character":36},"updated":"2019-03-26 19:54:09.000000000","message":"This should be done where you\u0027re going to use it.","commit_id":"5418e8ea6688ca4c717d8b511720a20047656a1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"41f5b3c1f5193040ba525632e02697e840de54bf","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This does a few things:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"1. Add a attachment_ids_for_instance() method which"},{"line_number":12,"context_line":"   can be used to get all volume attachment IDs for an"},{"line_number":13,"context_line":"   instance which is useful in tests that need to make"},{"line_number":14,"context_line":"   sure attachments are tracked and cleaned up properly,"},{"line_number":15,"context_line":"   i.e. to make sure nothing leaked."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"2. Implements the attachment_complete method in order to"},{"line_number":18,"context_line":"   fail if code is trying to complete an attachment that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5fc1f717_a6f358e7","line":15,"range":{"start_line":11,"start_character":0,"end_line":15,"end_character":36},"in_reply_to":"5fc1f717_3dd8e4ee","updated":"2019-04-01 22:18:08.000000000","message":"Done","commit_id":"5418e8ea6688ca4c717d8b511720a20047656a1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d193862fbf4663235b218d9bb1b7774d18e0192e","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This does a few things:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"1. Add a attachment_ids_for_instance() method which"},{"line_number":12,"context_line":"   can be used to get all volume attachment IDs for an"},{"line_number":13,"context_line":"   instance which is useful in tests that need to make"},{"line_number":14,"context_line":"   sure attachments are tracked and cleaned up properly,"},{"line_number":15,"context_line":"   i.e. to make sure nothing leaked."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"2. Implements the attachment_complete method in order to"},{"line_number":18,"context_line":"   fail if code is trying to complete an attachment that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5fc1f717_3dd8e4ee","line":15,"range":{"start_line":11,"start_character":0,"end_line":15,"end_character":36},"in_reply_to":"5fc1f717_bd2d1096","updated":"2019-04-01 13:01:29.000000000","message":"Sure I thought about that as well, it\u0027s just https://review.openstack.org/#/c/636253/ is already big, but I\u0027ll move it.","commit_id":"5418e8ea6688ca4c717d8b511720a20047656a1f"}],"nova/tests/fixtures.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a2b08a92c922707da60cede466be082c091bb37f","unresolved":false,"context_lines":[{"line_number":1832,"context_line":"                    yield volume_id"},{"line_number":1833,"context_line":"                    break"},{"line_number":1834,"context_line":""},{"line_number":1835,"context_line":"    def attachment_ids_for_instance(self, instance_uuid):"},{"line_number":1836,"context_line":"        attachment_ids \u003d []"},{"line_number":1837,"context_line":"        for volume_id, attachments in self.volume_to_attachment.items():"},{"line_number":1838,"context_line":"            for attachment_id, _instance_uuid in attachments:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_8215514b","line":1835,"range":{"start_line":1835,"start_character":8,"end_line":1835,"end_character":35},"updated":"2019-03-26 19:54:09.000000000","message":"Should really add this in the patch that first uses it.","commit_id":"5418e8ea6688ca4c717d8b511720a20047656a1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"41f5b3c1f5193040ba525632e02697e840de54bf","unresolved":false,"context_lines":[{"line_number":1832,"context_line":"                    yield volume_id"},{"line_number":1833,"context_line":"                    break"},{"line_number":1834,"context_line":""},{"line_number":1835,"context_line":"    def attachment_ids_for_instance(self, instance_uuid):"},{"line_number":1836,"context_line":"        attachment_ids \u003d []"},{"line_number":1837,"context_line":"        for volume_id, attachments in self.volume_to_attachment.items():"},{"line_number":1838,"context_line":"            for attachment_id, _instance_uuid in attachments:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_460074ac","line":1835,"range":{"start_line":1835,"start_character":8,"end_line":1835,"end_character":35},"in_reply_to":"5fc1f717_8215514b","updated":"2019-04-01 22:18:08.000000000","message":"Done","commit_id":"5418e8ea6688ca4c717d8b511720a20047656a1f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a2b08a92c922707da60cede466be082c091bb37f","unresolved":false,"context_lines":[{"line_number":2008,"context_line":"        def fake_attachment_complete(_self, _context, attachment_id):"},{"line_number":2009,"context_line":"            # Ensure the attachment exists"},{"line_number":2010,"context_line":"            _find_attachment(attachment_id)"},{"line_number":2011,"context_line":"            LOG.info(\u0027Completing volume attachment: %s\u0027, attachment_id)"},{"line_number":2012,"context_line":""},{"line_number":2013,"context_line":"        self.test.stub_out(\u0027nova.volume.cinder.API.attachment_create\u0027,"},{"line_number":2014,"context_line":"                           fake_attachment_create)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_3d10404e","line":2011,"updated":"2019-03-26 19:54:09.000000000","message":"✔","commit_id":"5418e8ea6688ca4c717d8b511720a20047656a1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bb196dd9f86037a0ba4180d2342464e8b102b167","unresolved":false,"context_lines":[{"line_number":2022,"context_line":"            fake_migrate_volume_completion)"},{"line_number":2023,"context_line":"        self.test.stub_out(\u0027nova.volume.cinder.API.roll_detaching\u0027,"},{"line_number":2024,"context_line":"                           lambda *args, **kwargs: None)"},{"line_number":2025,"context_line":"        self.test.stub_out(\u0027nova.volume.cinder.is_microversion_supported\u0027,"},{"line_number":2026,"context_line":"                           lambda *args, **kwargs: None)"},{"line_number":2027,"context_line":"        self.test.stub_out(\u0027nova.volume.cinder.API.check_attached\u0027,"},{"line_number":2028,"context_line":"                           lambda *args, **kwargs: None)"},{"line_number":2029,"context_line":"        self.test.stub_out(\u0027nova.volume.cinder.API.get_all_volume_types\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_6b3c3de1","line":2026,"range":{"start_line":2025,"start_character":8,"end_line":2026,"end_character":56},"updated":"2019-04-03 01:42:49.000000000","message":"I missed this in testing for the cross-cell series, found it in devstack testing:\n\nApr 03 01:30:11 crosscell nova-conductor[24834]: WARNING nova.scheduler.utils [None req-08783c9f-a23e-4b89-993f-f442a79bd2c2 admin admin] Failed to compute_task_migrate_server: is_microversion_supported() takes exactly 2 arguments (1 given)\n\n\nMeaning the unit tests and functional tests are inadequate because they just stub this out and don\u0027t honor the actual signature, so this could be improved as well.","commit_id":"bd2e53d03997e77f5cdc2f930ddacef0e0f48d95"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aebc8b10c6c40b1ec5b7f0ce2826629cde29207d","unresolved":false,"context_lines":[{"line_number":2022,"context_line":"            fake_migrate_volume_completion)"},{"line_number":2023,"context_line":"        self.test.stub_out(\u0027nova.volume.cinder.API.roll_detaching\u0027,"},{"line_number":2024,"context_line":"                           lambda *args, **kwargs: None)"},{"line_number":2025,"context_line":"        self.test.stub_out(\u0027nova.volume.cinder.is_microversion_supported\u0027,"},{"line_number":2026,"context_line":"                           lambda *args, **kwargs: None)"},{"line_number":2027,"context_line":"        self.test.stub_out(\u0027nova.volume.cinder.API.check_attached\u0027,"},{"line_number":2028,"context_line":"                           lambda *args, **kwargs: None)"},{"line_number":2029,"context_line":"        self.test.stub_out(\u0027nova.volume.cinder.API.get_all_volume_types\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_e2befefe","line":2026,"range":{"start_line":2025,"start_character":8,"end_line":2026,"end_character":56},"in_reply_to":"5fc1f717_6b3c3de1","updated":"2019-04-03 19:08:18.000000000","message":"Done","commit_id":"bd2e53d03997e77f5cdc2f930ddacef0e0f48d95"}]}
