)]}'
{"nova/compute/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fe923e558e7db0913b0d4bccba56c316c1901f91","unresolved":false,"context_lines":[{"line_number":3695,"context_line":"        if device and not block_device.match_device(device):"},{"line_number":3696,"context_line":"            raise exception.InvalidDevicePath(path\u003ddevice)"},{"line_number":3697,"context_line":""},{"line_number":3698,"context_line":"        min_compute_version \u003d objects.Service.get_minimum_version("},{"line_number":3699,"context_line":"            context, \u0027nova-compute\u0027)"},{"line_number":3700,"context_line":"        if min_compute_version \u003e\u003d CINDER_V3_ATTACH_MIN_COMPUTE_VERSION:"},{"line_number":3701,"context_line":"            try:"},{"line_number":3702,"context_line":"                cinder.is_microversion_supported(context, \u00273.44\u0027)"},{"line_number":3703,"context_line":"                self._check_volume_already_attached_to_instance(context,"},{"line_number":3704,"context_line":"                                                                instance,"},{"line_number":3705,"context_line":"                                                                volume_id)"},{"line_number":3706,"context_line":"            except exception.CinderAPIVersionNotAvailable:"},{"line_number":3707,"context_line":"                pass"},{"line_number":3708,"context_line":""},{"line_number":3709,"context_line":"        is_shelved_offloaded \u003d instance.vm_state \u003d\u003d vm_states.SHELVED_OFFLOADED"},{"line_number":3710,"context_line":"        if is_shelved_offloaded:"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_ca30c9eb","line":3707,"range":{"start_line":3698,"start_character":8,"end_line":3707,"end_character":20},"updated":"2017-12-05 14:28:01.000000000","message":"We need to leave this for the last patch in the series that enables the new flow.","commit_id":"cd99d32e2804d9eaeac2297530a9e71caf88ebee"}],"nova/objects/service.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fe923e558e7db0913b0d4bccba56c316c1901f91","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# NOTE(danms): This is the global service version counter"},{"line_number":34,"context_line":"SERVICE_VERSION \u003d 24"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"# NOTE(danms): This is our SERVICE_VERSION history. The idea is that any"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_4a5a792a","line":34,"updated":"2017-12-05 14:28:01.000000000","message":"This shouldn\u0027t happen yet.","commit_id":"cd99d32e2804d9eaeac2297530a9e71caf88ebee"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fe923e558e7db0913b0d4bccba56c316c1901f91","unresolved":false,"context_lines":[{"line_number":988,"context_line":""},{"line_number":989,"context_line":"        # Test attach volume"},{"line_number":990,"context_line":"        with test.nested(mock.patch.object(volume.cinder,"},{"line_number":991,"context_line":"                                       \u0027is_microversion_supported\u0027),"},{"line_number":992,"context_line":"                         mock.patch.object(compute_api.API,"},{"line_number":993,"context_line":"                                       \u0027_check_attach_and_reserve_volume\u0027),"},{"line_number":994,"context_line":"                         mock.patch.object(rpcapi.ComputeAPI,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_ca452945","line":991,"updated":"2017-12-05 14:28:01.000000000","message":"Shouldn\u0027t need this in this patch.","commit_id":"cd99d32e2804d9eaeac2297530a9e71caf88ebee"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fe923e558e7db0913b0d4bccba56c316c1901f91","unresolved":false,"context_lines":[{"line_number":1033,"context_line":""},{"line_number":1034,"context_line":"        # Test attach volume"},{"line_number":1035,"context_line":"        with test.nested(mock.patch.object(volume.cinder,"},{"line_number":1036,"context_line":"                                       \u0027is_microversion_supported\u0027),"},{"line_number":1037,"context_line":"                         mock.patch.object(compute_api.API,"},{"line_number":1038,"context_line":"                                       \u0027_check_attach_and_reserve_volume\u0027),"},{"line_number":1039,"context_line":"                         mock.patch.object(volume.cinder.API,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_2a7055a5","line":1036,"updated":"2017-12-05 14:28:01.000000000","message":"nor this","commit_id":"cd99d32e2804d9eaeac2297530a9e71caf88ebee"}],"nova/tests/unit/compute/test_compute_api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f0ae2d51d00b6934813ea55fcb222e4087a07b2","unresolved":false,"context_lines":[{"line_number":2479,"context_line":"                mock_record.assert_called_once_with("},{"line_number":2480,"context_line":"                    self.context, instance, instance_actions.SWAP_VOLUME)"},{"line_number":2481,"context_line":"            elif volume_already_attached:"},{"line_number":2482,"context_line":"                mock_swap_volume.side_effect \u003d AttributeError()"},{"line_number":2483,"context_line":"                self.assertRaises(exception.InvalidVolume,"},{"line_number":2484,"context_line":"                                  self.compute_api.swap_volume, self.context,"},{"line_number":2485,"context_line":"                                  instance, volumes[uuids.old_volume],"}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_3390cd4e","line":2482,"range":{"start_line":2482,"start_character":16,"end_line":2482,"end_character":63},"updated":"2017-12-05 19:22:31.000000000","message":"We don\u0027t need this because we wouldn\u0027t call the rpcapi in this case.","commit_id":"30009e8c4d3372948660291abc6149ae77c08bcf"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f0ae2d51d00b6934813ea55fcb222e4087a07b2","unresolved":false,"context_lines":[{"line_number":2495,"context_line":"                                             volumes[uuids.new_volume])"},{"line_number":2496,"context_line":"                # Make assertions about what was called if there was or was not"},{"line_number":2497,"context_line":"                # a Cinder 3.44 style attachment provided."},{"line_number":2498,"context_line":"                if attachment_id is None:"},{"line_number":2499,"context_line":"                    # Old style attachment, so reserve was called and"},{"line_number":2500,"context_line":"                    # attachment_create was not called."},{"line_number":2501,"context_line":"                    mock_reserve_volume.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_f3726549","line":2498,"updated":"2017-12-05 19:22:31.000000000","message":"We can add an assertion in this block that mock_check_volume_attached was not called.","commit_id":"30009e8c4d3372948660291abc6149ae77c08bcf"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d585cabad8731363fd145a90dbb26954db271fd0","unresolved":false,"context_lines":[{"line_number":2411,"context_line":"            if volume_already_attached:"},{"line_number":2412,"context_line":"                raise exception.InvalidVolume(reason\u003d\u0027Volume already attached\u0027)"},{"line_number":2413,"context_line":"            else:"},{"line_number":2414,"context_line":"                pass"},{"line_number":2415,"context_line":""},{"line_number":2416,"context_line":"        @mock.patch.object(compute_api.API, \u0027_record_action_start\u0027)"},{"line_number":2417,"context_line":"        @mock.patch.object(self.compute_api.compute_rpcapi, \u0027swap_volume\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_5aea3eac","line":2414,"updated":"2017-12-05 23:42:28.000000000","message":"I think faking this instead of mocking BlockDeviceMapping.get_by_volume_and_instance is a bit dangerous being that it re-implements _check_volume_already_attached_to_instance such that we aren\u0027t running the real code (and _check_volume_already_attached_to_instance isn\u0027t unit tested elsewhere). That is, we\u0027re never testing that _check_volume_already_attached_to_instance itself raises InvalidVolume when the BDM is found.","commit_id":"4dd0656961552ed8418bb22352f8ed8f6f58031e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"ddcf21a23bc729144458ffd182daec47909c03e7","unresolved":false,"context_lines":[{"line_number":2411,"context_line":"            if volume_already_attached:"},{"line_number":2412,"context_line":"                raise exception.InvalidVolume(reason\u003d\u0027Volume already attached\u0027)"},{"line_number":2413,"context_line":"            else:"},{"line_number":2414,"context_line":"                pass"},{"line_number":2415,"context_line":""},{"line_number":2416,"context_line":"        @mock.patch.object(compute_api.API, \u0027_record_action_start\u0027)"},{"line_number":2417,"context_line":"        @mock.patch.object(self.compute_api.compute_rpcapi, \u0027swap_volume\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_fa88f2c6","line":2414,"in_reply_to":"df87a7cf_1a68361f","updated":"2017-12-05 23:59:38.000000000","message":"Okay, good to know. I\u0027ll examine the coming unit test changes and if it\u0027s covered, then cool. If not, I\u0027ll push a small unit test follow up to cover it so we won\u0027t wait on heavier tests to suss out future issues.","commit_id":"4dd0656961552ed8418bb22352f8ed8f6f58031e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"414781aeebc60ecad02796dd68d6e051329873e7","unresolved":false,"context_lines":[{"line_number":2411,"context_line":"            if volume_already_attached:"},{"line_number":2412,"context_line":"                raise exception.InvalidVolume(reason\u003d\u0027Volume already attached\u0027)"},{"line_number":2413,"context_line":"            else:"},{"line_number":2414,"context_line":"                pass"},{"line_number":2415,"context_line":""},{"line_number":2416,"context_line":"        @mock.patch.object(compute_api.API, \u0027_record_action_start\u0027)"},{"line_number":2417,"context_line":"        @mock.patch.object(self.compute_api.compute_rpcapi, \u0027swap_volume\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_1a68361f","line":2414,"in_reply_to":"df87a7cf_5aea3eac","updated":"2017-12-05 23:48:22.000000000","message":"There are some unit/functional tests in the next *API* patch in the series which cover this also, so we can either wait until that happens, or see if we can backport those tests.\n\nFWIW, this is tested by Tempest:\n\nhttps://review.openstack.org/#/c/515426/","commit_id":"4dd0656961552ed8418bb22352f8ed8f6f58031e"}],"nova/volume/cinder.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fe923e558e7db0913b0d4bccba56c316c1901f91","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    raise exception.CinderAPIVersionNotAvailable(version\u003dmicroversion)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"def _get_cinderclient_parameters(context):"},{"line_number":83,"context_line":"    global _SESSION"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    if not _SESSION:"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_aa6305dc","line":82,"updated":"2017-12-05 14:28:01.000000000","message":"We shouldn\u0027t need any of this in this patch.","commit_id":"cd99d32e2804d9eaeac2297530a9e71caf88ebee"}]}
