)]}'
{"nova/compute/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3e1a27fbbe8507ef9e8e067776cc2b3547aa1b0b","unresolved":false,"context_lines":[{"line_number":767,"context_line":"        block_device_mapping +\u003d self._get_flavor_defined_bdms("},{"line_number":768,"context_line":"            instance_type, block_device_mapping)"},{"line_number":769,"context_line":""},{"line_number":770,"context_line":"        return block_device_obj.block_device_make_list_from_dicts("},{"line_number":771,"context_line":"                context, block_device_mapping)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def _get_image(self, context, image_href):"},{"line_number":774,"context_line":"        if not image_href:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8ec9b2_47f9807f","line":771,"range":{"start_line":770,"start_character":8,"end_line":771,"end_character":46},"updated":"2016-09-21 19:22:13.000000000","message":"This is where the bdm list of dicts are converted to actual BlockDeviceMapping objects, so I\u0027m wondering if the block_device_mapping list entries have [\u0027tag\u0027] \u003d None set or something via the REST API, it\u0027s a mystery.","commit_id":"10e8b80811c4165967953a70ad307d4895961a1e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5b80f6542d9848f3a51e29ed7ba51e1d8eccd9ca","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"        # Create the BlockDeviceMapping objects in the db."},{"line_number":1252,"context_line":"        for bdm in db_block_device_mapping:"},{"line_number":1253,"context_line":"            # TODO(alaski): Why is this done?"},{"line_number":1254,"context_line":"            if(bdm.volume_size \u003d\u003d 0) and (bdm.tag is None):"},{"line_number":1255,"context_line":"                continue"},{"line_number":1256,"context_line":""},{"line_number":1257,"context_line":"            bdm.update_or_create()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8ec9b2_6da2e8af","line":1254,"range":{"start_line":1254,"start_character":42,"end_line":1254,"end_character":49},"updated":"2016-09-21 16:26:00.000000000","message":"Hmm, does the BDM object always have the tag attribute set or could this be lazy loaded and blow up? For example, what if I\u0027m creating a server with microversion \u003c 2.32?","commit_id":"10e8b80811c4165967953a70ad307d4895961a1e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"38c5ecc02d0b6d784ec94fecb501ffdeb6c77ef2","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"        # Create the BlockDeviceMapping objects in the db."},{"line_number":1252,"context_line":"        for bdm in db_block_device_mapping:"},{"line_number":1253,"context_line":"            # TODO(alaski): Why is this done?"},{"line_number":1254,"context_line":"            if(bdm.volume_size \u003d\u003d 0) and (bdm.tag is None):"},{"line_number":1255,"context_line":"                continue"},{"line_number":1256,"context_line":""},{"line_number":1257,"context_line":"            bdm.update_or_create()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8ec9b2_eddef86b","line":1254,"updated":"2016-09-21 16:23:08.000000000","message":"I\u0027m not sure why you changed the formatting on this conditional, it\u0027s worse IMO. Just do this:\n\n  if bdm.volume_size \u003d\u003d 0 and bdm.tag is None:","commit_id":"10e8b80811c4165967953a70ad307d4895961a1e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35107c2bcceb201ecf1f96f516beb437685126e9","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"        # Create the BlockDeviceMapping objects in the db."},{"line_number":1252,"context_line":"        for bdm in db_block_device_mapping:"},{"line_number":1253,"context_line":"            # TODO(alaski): Why is this done?"},{"line_number":1254,"context_line":"            if(bdm.volume_size \u003d\u003d 0) and (bdm.tag is None):"},{"line_number":1255,"context_line":"                continue"},{"line_number":1256,"context_line":""},{"line_number":1257,"context_line":"            bdm.update_or_create()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8ec9b2_9c311e0e","line":1254,"range":{"start_line":1254,"start_character":42,"end_line":1254,"end_character":49},"in_reply_to":"7a8ec9b2_0796983d","updated":"2016-09-21 20:10:00.000000000","message":"Please at least fix the formatting here to be like:\n\n if bdm.volume_size \u003d\u003d 0 and bdm.tag is None:","commit_id":"10e8b80811c4165967953a70ad307d4895961a1e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3e1a27fbbe8507ef9e8e067776cc2b3547aa1b0b","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"        # Create the BlockDeviceMapping objects in the db."},{"line_number":1252,"context_line":"        for bdm in db_block_device_mapping:"},{"line_number":1253,"context_line":"            # TODO(alaski): Why is this done?"},{"line_number":1254,"context_line":"            if(bdm.volume_size \u003d\u003d 0) and (bdm.tag is None):"},{"line_number":1255,"context_line":"                continue"},{"line_number":1256,"context_line":""},{"line_number":1257,"context_line":"            bdm.update_or_create()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8ec9b2_0796983d","line":1254,"range":{"start_line":1254,"start_character":42,"end_line":1254,"end_character":49},"in_reply_to":"7a8ec9b2_4d536c39","updated":"2016-09-21 19:22:13.000000000","message":"I booted a server with microversion 2.31 and nothing blew up, so something must be defaulting bdm.tag to None if it\u0027s not provided, I\u0027m not sure what though.","commit_id":"10e8b80811c4165967953a70ad307d4895961a1e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"75e7cfb719a535eeaecdc7f63064fff0d98dd353","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"        # Create the BlockDeviceMapping objects in the db."},{"line_number":1252,"context_line":"        for bdm in db_block_device_mapping:"},{"line_number":1253,"context_line":"            # TODO(alaski): Why is this done?"},{"line_number":1254,"context_line":"            if(bdm.volume_size \u003d\u003d 0) and (bdm.tag is None):"},{"line_number":1255,"context_line":"                continue"},{"line_number":1256,"context_line":""},{"line_number":1257,"context_line":"            bdm.update_or_create()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8ec9b2_6d058878","line":1254,"range":{"start_line":1254,"start_character":42,"end_line":1254,"end_character":49},"in_reply_to":"7a8ec9b2_6da2e8af","updated":"2016-09-21 16:29:04.000000000","message":"Good point, probably safer to check \u0027tag\u0027 in bdm first","commit_id":"10e8b80811c4165967953a70ad307d4895961a1e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"13354cbfb8db57deefb7d5bc79df88877768435a","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"        # Create the BlockDeviceMapping objects in the db."},{"line_number":1252,"context_line":"        for bdm in db_block_device_mapping:"},{"line_number":1253,"context_line":"            # TODO(alaski): Why is this done?"},{"line_number":1254,"context_line":"            if(bdm.volume_size \u003d\u003d 0) and (bdm.tag is None):"},{"line_number":1255,"context_line":"                continue"},{"line_number":1256,"context_line":""},{"line_number":1257,"context_line":"            bdm.update_or_create()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8ec9b2_4d536c39","line":1254,"range":{"start_line":1254,"start_character":42,"end_line":1254,"end_character":49},"in_reply_to":"7a8ec9b2_6da2e8af","updated":"2016-09-21 16:31:50.000000000","message":"In the hyper-v virt driver code we\u0027re defensively checking if \u0027tag\u0027 is in the bdm object before accessing it, to avoid lazy-load failures. I don\u0027t think we do the same in the libvirt driver, which might be a bug.","commit_id":"10e8b80811c4165967953a70ad307d4895961a1e"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"8e92f17072dfcb83ec58b39fe978976808f217f2","unresolved":false,"context_lines":[{"line_number":1254,"context_line":"        # Create the BlockDeviceMapping objects in the db."},{"line_number":1255,"context_line":"        for bdm in db_block_device_mapping:"},{"line_number":1256,"context_line":"            # TODO(alaski): Why is this done?"},{"line_number":1257,"context_line":"            if bdm.volume_size \u003d\u003d 0 and bdm.tag is None:"},{"line_number":1258,"context_line":"                continue"},{"line_number":1259,"context_line":""},{"line_number":1260,"context_line":"            bdm.update_or_create()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_297d7f1c","line":1257,"updated":"2016-09-23 10:55:03.000000000","message":"This is only going to hit if volume_size \u003d\u003d 0, but why would we create a zero-sized ephemeral disk? What would that even mean? Why would you create a BDM for a disk that doesn\u0027t exist?","commit_id":"3479001427836d37b204f9463609891ebcefd761"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"03b003f38b1413a442f382ab7afa3de429fd87f1","unresolved":false,"context_lines":[{"line_number":1254,"context_line":"        # Create the BlockDeviceMapping objects in the db."},{"line_number":1255,"context_line":"        for bdm in db_block_device_mapping:"},{"line_number":1256,"context_line":"            # TODO(alaski): Why is this done?"},{"line_number":1257,"context_line":"            if bdm.volume_size \u003d\u003d 0 and bdm.tag is None:"},{"line_number":1258,"context_line":"                continue"},{"line_number":1259,"context_line":""},{"line_number":1260,"context_line":"            bdm.update_or_create()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_023c15e1","line":1257,"in_reply_to":"5a8bc5a2_297d7f1c","updated":"2016-09-23 13:14:49.000000000","message":"Yeah, now that you draw attention to this, I don\u0027t know how we ever thought this was reasonable code. This is saying \"if we have a zero-sized tagged bdm then...\", which is nonsense.","commit_id":"3479001427836d37b204f9463609891ebcefd761"}],"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":"35107c2bcceb201ecf1f96f516beb437685126e9","unresolved":false,"context_lines":[{"line_number":3868,"context_line":"        self.assertEqual(ephemeral_size, bdms[2].volume_size)"},{"line_number":3869,"context_line":""},{"line_number":3870,"context_line":"    @mock.patch.object(block_device_obj.BlockDeviceMapping,"},{"line_number":3871,"context_line":"                        \u0027update_or_create\u0027)"},{"line_number":3872,"context_line":"    def test_create_block_device_mapping(self, mock_update_or_create):"},{"line_number":3873,"context_line":"        api \u003d compute_api.API()"},{"line_number":3874,"context_line":"        block_device_mapping \u003d ["}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8ec9b2_7c8d32d2","line":3871,"updated":"2016-09-21 20:10:00.000000000","message":"nit: please align this with the block_device_obj above.","commit_id":"10e8b80811c4165967953a70ad307d4895961a1e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35107c2bcceb201ecf1f96f516beb437685126e9","unresolved":false,"context_lines":[{"line_number":3869,"context_line":""},{"line_number":3870,"context_line":"    @mock.patch.object(block_device_obj.BlockDeviceMapping,"},{"line_number":3871,"context_line":"                        \u0027update_or_create\u0027)"},{"line_number":3872,"context_line":"    def test_create_block_device_mapping(self, mock_update_or_create):"},{"line_number":3873,"context_line":"        api \u003d compute_api.API()"},{"line_number":3874,"context_line":"        block_device_mapping \u003d ["},{"line_number":3875,"context_line":"                {\u0027device_name\u0027: \u0027/dev/sdb3\u0027, \u0027volume_size\u0027: \u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8ec9b2_3c5c8a4a","line":3872,"range":{"start_line":3872,"start_character":8,"end_line":3872,"end_character":40},"updated":"2016-09-21 20:10:00.000000000","message":"nit: make this more descriptive to what it\u0027s testing, something like:\n\ntest_create_blank_bdm_with_tag","commit_id":"10e8b80811c4165967953a70ad307d4895961a1e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35107c2bcceb201ecf1f96f516beb437685126e9","unresolved":false,"context_lines":[{"line_number":3884,"context_line":"                        block_device_mapping)))"},{"line_number":3885,"context_line":""},{"line_number":3886,"context_line":"        api._create_block_device_mapping(block_device_mapping)"},{"line_number":3887,"context_line":"        self.assertTrue(mock_update_or_create.called)"},{"line_number":3888,"context_line":""},{"line_number":3889,"context_line":"    @mock.patch.object(compute_api.API, \u0027_get_instances_by_filters\u0027)"},{"line_number":3890,"context_line":"    @mock.patch.object(objects.CellMapping, \u0027get_by_uuid\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8ec9b2_fc6ea2fe","line":3887,"updated":"2016-09-21 20:10:00.000000000","message":"Please use this instead:\n\nmock_update_or_create.assert_called_once_with()","commit_id":"10e8b80811c4165967953a70ad307d4895961a1e"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"8e92f17072dfcb83ec58b39fe978976808f217f2","unresolved":false,"context_lines":[{"line_number":3873,"context_line":"    def test_create_blank_bdm_with_tag(self, mock_update_or_create):"},{"line_number":3874,"context_line":"        api \u003d compute_api.API()"},{"line_number":3875,"context_line":"        block_device_mapping \u003d ["},{"line_number":3876,"context_line":"                {\u0027device_name\u0027: \u0027/dev/sdb3\u0027, \u0027volume_size\u0027: \u00270\u0027,"},{"line_number":3877,"context_line":"                 \u0027source_type\u0027: \u0027blank\u0027, \u0027destination_type\u0027: \u0027local\u0027,"},{"line_number":3878,"context_line":"                 \u0027guest_format\u0027: \u0027ext3\u0027, \u0027delete_on_termination\u0027: False,"},{"line_number":3879,"context_line":"                 \u0027tag\u0027: \u0027foo\u0027}]"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_c9bdfbd8","line":3876,"updated":"2016-09-23 10:55:03.000000000","message":"This explicitly has volume_size \u003d\u003d 0. Why should it be created?","commit_id":"3479001427836d37b204f9463609891ebcefd761"}]}
