)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"77f69334b779641271741ce8885ed31d2ead1e72","unresolved":false,"context_lines":[{"line_number":1644,"context_line":"            self, instance, block_device_mapping, suggested_dev_name,"},{"line_number":1645,"context_line":"            block_device):"},{"line_number":1646,"context_line":"        try:"},{"line_number":1647,"context_line":"            return self.driver.get_device_name_for_instance("},{"line_number":1648,"context_line":"                instance, block_device_mapping, suggested_dev_name,"},{"line_number":1649,"context_line":"                block_device)"},{"line_number":1650,"context_line":"        except NotImplementedError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a016987_f7eec389","line":1647,"updated":"2015-05-29 15:14:36.000000000","message":"Given the extremely high number of bugs we get that come from people specifying the device name for libvirt and then being surprised when it (a) isn\u0027t honored or (b) causes a conflict, I think we should just fail here.\n\nBeing explicit about always failing when that parameter is provided seems far more user-friendly than ignoring what they asked for or the current behavior of failing sometimes.\n\nWe can\u0027t honor what they asked for, so we should always fail, IMHO.","commit_id":"cea7bb285dc76ba2d196e7e626b6b6a1c3f67b9f"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"d97ce5bc122d7709be51e26c5679acdc60edccbf","unresolved":false,"context_lines":[{"line_number":1644,"context_line":"            self, instance, block_device_mapping, suggested_dev_name,"},{"line_number":1645,"context_line":"            block_device):"},{"line_number":1646,"context_line":"        try:"},{"line_number":1647,"context_line":"            return self.driver.get_device_name_for_instance("},{"line_number":1648,"context_line":"                instance, block_device_mapping, suggested_dev_name,"},{"line_number":1649,"context_line":"                block_device)"},{"line_number":1650,"context_line":"        except NotImplementedError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_fac1832f","line":1647,"in_reply_to":"7a016987_f7eec389","updated":"2015-06-05 21:24:41.000000000","message":"Ideally I\u0027d like to take that approach but the problem with it is the same problem I think this approach has right now - we can\u0027t have that same functionality when booting because booting an instance is a cast.\n\nWe can easily return an error from reserve_block_device to the API and we get a reasonable user experience, but we can\u0027t do that with boot. \n\nThe problem I saw with this current approach in this PS after thinking about it some more is that it will now act differently than boot. If you specify a device name for boot - libvirt will still persist the specified device name even though it can\u0027t honour it, but this patch series makes attach do the oposit - always decide on it\u0027s own and never honour it even if it was passed.\n\nIf we want to make boot and attach behave the same when it comes to device names, due to the fact that we can\u0027t error out a boot in the API, these are the only two options we have to chose from.","commit_id":"cea7bb285dc76ba2d196e7e626b6b6a1c3f67b9f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"dd01d38cdf8f49d3631d1b3fbd3fc7d00fdcdfb7","unresolved":false,"context_lines":[{"line_number":1648,"context_line":"            self, instance, block_device_mapping, suggested_dev_name,"},{"line_number":1649,"context_line":"            block_device):"},{"line_number":1650,"context_line":"        try:"},{"line_number":1651,"context_line":"            return self.driver.get_device_name_for_instance("},{"line_number":1652,"context_line":"                instance, block_device_mapping, suggested_dev_name,"},{"line_number":1653,"context_line":"                block_device)"},{"line_number":1654,"context_line":"        except NotImplementedError:"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_05effb87","line":1651,"range":{"start_line":1651,"start_character":31,"end_line":1651,"end_character":59},"updated":"2015-06-16 08:22:08.000000000","message":"can we at least have a unit test that tests this flow?\n\nat the moment we are just falling back to the exception handling code below.","commit_id":"fbfeb737c6f7c6b11978e1982248d354aa32ab6c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"dd01d38cdf8f49d3631d1b3fbd3fc7d00fdcdfb7","unresolved":false,"context_lines":[{"line_number":4389,"context_line":"            new_bdm \u003d objects.BlockDeviceMapping("},{"line_number":4390,"context_line":"                    context\u003dcontext,"},{"line_number":4391,"context_line":"                    source_type\u003d\u0027volume\u0027, destination_type\u003d\u0027volume\u0027,"},{"line_number":4392,"context_line":"                    instance_uuid\u003dinstance.uuid, boot_index\u003d-1,"},{"line_number":4393,"context_line":"                    volume_id\u003dvolume_id or \u0027reserved\u0027,"},{"line_number":4394,"context_line":"                    device_name\u003ddevice, guest_format\u003dNone,"},{"line_number":4395,"context_line":"                    disk_bus\u003ddisk_bus, device_type\u003ddevice_type)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_452183fa","line":4392,"updated":"2015-06-16 08:22:08.000000000","message":"we are passing new parameters to this method. any reason why we are not testing this?","commit_id":"fbfeb737c6f7c6b11978e1982248d354aa32ab6c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"26269727714a20b4f127ca859b310cf0de7533cf","unresolved":false,"context_lines":[{"line_number":4387,"context_line":"            new_bdm \u003d objects.BlockDeviceMapping("},{"line_number":4388,"context_line":"                    context\u003dcontext,"},{"line_number":4389,"context_line":"                    source_type\u003d\u0027volume\u0027, destination_type\u003d\u0027volume\u0027,"},{"line_number":4390,"context_line":"                    instance_uuid\u003dinstance.uuid, boot_index\u003d-1,"},{"line_number":4391,"context_line":"                    volume_id\u003dvolume_id or \u0027reserved\u0027,"},{"line_number":4392,"context_line":"                    device_name\u003ddevice, guest_format\u003dNone,"},{"line_number":4393,"context_line":"                    disk_bus\u003ddisk_bus, device_type\u003ddevice_type)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa32b979_e55b50f8","line":4390,"updated":"2015-06-25 18:54:49.000000000","message":"So this is probably a dumb question, but I can\u0027t find any documentation around what the special significance is for boot_index -1?  Can you explain why that\u0027s used here?  Does that means it\u0027s not bootable?  I really which we had something documented in the code, like maybe in the nova.objects.bdm.boot_index field which explained what the different values can mean or how they should be interpreted, like -1 is not bootable (?), 0 or 1 are root, \u003e\u003d 0 are extra devices?","commit_id":"1b3b95e5503b442c18bfd3c89006d53ceae679c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"435ea9c2f6938a8e58c8a349520061626a9692f3","unresolved":false,"context_lines":[{"line_number":4387,"context_line":"            new_bdm \u003d objects.BlockDeviceMapping("},{"line_number":4388,"context_line":"                    context\u003dcontext,"},{"line_number":4389,"context_line":"                    source_type\u003d\u0027volume\u0027, destination_type\u003d\u0027volume\u0027,"},{"line_number":4390,"context_line":"                    instance_uuid\u003dinstance.uuid, boot_index\u003d-1,"},{"line_number":4391,"context_line":"                    volume_id\u003dvolume_id or \u0027reserved\u0027,"},{"line_number":4392,"context_line":"                    device_name\u003ddevice, guest_format\u003dNone,"},{"line_number":4393,"context_line":"                    disk_bus\u003ddisk_bus, device_type\u003ddevice_type)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_4c989278","line":4390,"in_reply_to":"ba3cc151_f92206b9","updated":"2015-07-01 18:03:00.000000000","message":"I guess my question is, why do we need to set this for this change, specifically - i.e. is this just something that we should be doing anyway regardless of the new compute driver method for letting the virt driver override the device name?","commit_id":"1b3b95e5503b442c18bfd3c89006d53ceae679c5"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"331b1ea1ccd92108a9d0b62aa35c1c10c8f97070","unresolved":false,"context_lines":[{"line_number":4387,"context_line":"            new_bdm \u003d objects.BlockDeviceMapping("},{"line_number":4388,"context_line":"                    context\u003dcontext,"},{"line_number":4389,"context_line":"                    source_type\u003d\u0027volume\u0027, destination_type\u003d\u0027volume\u0027,"},{"line_number":4390,"context_line":"                    instance_uuid\u003dinstance.uuid, boot_index\u003d-1,"},{"line_number":4391,"context_line":"                    volume_id\u003dvolume_id or \u0027reserved\u0027,"},{"line_number":4392,"context_line":"                    device_name\u003ddevice, guest_format\u003dNone,"},{"line_number":4393,"context_line":"                    disk_bus\u003ddisk_bus, device_type\u003ddevice_type)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_f92206b9","line":4390,"in_reply_to":"fa32b979_e55b50f8","updated":"2015-06-29 14:11:53.000000000","message":"https://review.openstack.org/#/c/192651/ but the text there could be more explicit so I will update it. It could be also set to None, but leaving it out can be problematic because of the obl_load_attr behaviour explained below.","commit_id":"1b3b95e5503b442c18bfd3c89006d53ceae679c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"26269727714a20b4f127ca859b310cf0de7533cf","unresolved":false,"context_lines":[{"line_number":4389,"context_line":"                    source_type\u003d\u0027volume\u0027, destination_type\u003d\u0027volume\u0027,"},{"line_number":4390,"context_line":"                    instance_uuid\u003dinstance.uuid, boot_index\u003d-1,"},{"line_number":4391,"context_line":"                    volume_id\u003dvolume_id or \u0027reserved\u0027,"},{"line_number":4392,"context_line":"                    device_name\u003ddevice, guest_format\u003dNone,"},{"line_number":4393,"context_line":"                    disk_bus\u003ddisk_bus, device_type\u003ddevice_type)"},{"line_number":4394,"context_line":""},{"line_number":4395,"context_line":"            new_bdm.device_name \u003d self._get_device_name_for_instance("}],"source_content_type":"text/x-python","patch_set":10,"id":"fa32b979_c55accf2","line":4392,"updated":"2015-06-25 18:54:49.000000000","message":"Why is guest_format set to None?  It\u0027s nullable in the object so it would default to None anyway.","commit_id":"1b3b95e5503b442c18bfd3c89006d53ceae679c5"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"331b1ea1ccd92108a9d0b62aa35c1c10c8f97070","unresolved":false,"context_lines":[{"line_number":4389,"context_line":"                    source_type\u003d\u0027volume\u0027, destination_type\u003d\u0027volume\u0027,"},{"line_number":4390,"context_line":"                    instance_uuid\u003dinstance.uuid, boot_index\u003d-1,"},{"line_number":4391,"context_line":"                    volume_id\u003dvolume_id or \u0027reserved\u0027,"},{"line_number":4392,"context_line":"                    device_name\u003ddevice, guest_format\u003dNone,"},{"line_number":4393,"context_line":"                    disk_bus\u003ddisk_bus, device_type\u003ddevice_type)"},{"line_number":4394,"context_line":""},{"line_number":4395,"context_line":"            new_bdm.device_name \u003d self._get_device_name_for_instance("}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_59bc526c","line":4392,"in_reply_to":"fa32b979_c55accf2","updated":"2015-06-29 14:11:53.000000000","message":"No, it defaults to calling obj_load_attr on first access which blows up. IMHO this is a bug with objects, that I remember discussing with dansmith at some point and the solution is not as straghtforward as it will make certain edge case","commit_id":"1b3b95e5503b442c18bfd3c89006d53ceae679c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a293a6ccc3dae74ed79c875f8c1b6275edad74b7","unresolved":false,"context_lines":[{"line_number":1645,"context_line":"                instance, root_device_name, *block_device_lists)"},{"line_number":1646,"context_line":""},{"line_number":1647,"context_line":"    def _get_device_name_for_instance("},{"line_number":1648,"context_line":"            self, instance, block_device_mapping, block_device_obj):"},{"line_number":1649,"context_line":"        try:"},{"line_number":1650,"context_line":"            return self.driver.get_device_name_for_instance("},{"line_number":1651,"context_line":"                instance, block_device_mapping, block_device_obj)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_0c760a06","line":1648,"updated":"2015-07-01 18:14:56.000000000","message":"Can we please rename the block_device_mapping parameter to bdms since it\u0027s a list and block_device_mapping in my head is singular, meaning a BlockDeviceMapping object, not a BlockDeviceMappingList object.","commit_id":"80051455439d01a9054e7b5b0def8f8847b34e90"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"e293c850b25977afaf24aad9e2b436c4a15681f0","unresolved":false,"context_lines":[{"line_number":1645,"context_line":"                instance, root_device_name, *block_device_lists)"},{"line_number":1646,"context_line":""},{"line_number":1647,"context_line":"    def _get_device_name_for_instance("},{"line_number":1648,"context_line":"            self, instance, block_device_mapping, block_device_obj):"},{"line_number":1649,"context_line":"        try:"},{"line_number":1650,"context_line":"            return self.driver.get_device_name_for_instance("},{"line_number":1651,"context_line":"                instance, block_device_mapping, block_device_obj)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_c540d736","line":1648,"in_reply_to":"ba3cc151_0c760a06","updated":"2015-07-02 10:04:20.000000000","message":"Done","commit_id":"80051455439d01a9054e7b5b0def8f8847b34e90"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a293a6ccc3dae74ed79c875f8c1b6275edad74b7","unresolved":false,"context_lines":[{"line_number":1648,"context_line":"            self, instance, block_device_mapping, block_device_obj):"},{"line_number":1649,"context_line":"        try:"},{"line_number":1650,"context_line":"            return self.driver.get_device_name_for_instance("},{"line_number":1651,"context_line":"                instance, block_device_mapping, block_device_obj)"},{"line_number":1652,"context_line":"        except NotImplementedError:"},{"line_number":1653,"context_line":"            return compute_utils.get_device_name_for_instance("},{"line_number":1654,"context_line":"                instance, block_device_mapping,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_3f444e48","line":1651,"updated":"2015-07-01 18:14:56.000000000","message":"Should probably pass in a copy of block_device_obj so the virt driver doesn\u0027t try changing fields on it by reference.","commit_id":"80051455439d01a9054e7b5b0def8f8847b34e90"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"e293c850b25977afaf24aad9e2b436c4a15681f0","unresolved":false,"context_lines":[{"line_number":1648,"context_line":"            self, instance, block_device_mapping, block_device_obj):"},{"line_number":1649,"context_line":"        try:"},{"line_number":1650,"context_line":"            return self.driver.get_device_name_for_instance("},{"line_number":1651,"context_line":"                instance, block_device_mapping, block_device_obj)"},{"line_number":1652,"context_line":"        except NotImplementedError:"},{"line_number":1653,"context_line":"            return compute_utils.get_device_name_for_instance("},{"line_number":1654,"context_line":"                instance, block_device_mapping,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_683202f4","line":1651,"in_reply_to":"ba3cc151_3f444e48","updated":"2015-07-02 10:04:20.000000000","message":"I would think it is up to the driver implementation to ensure that (currently it does not in the last patch) so I will fix it there. Ultimately it really does not matter in this particular case as the value is overriden and then saved, but yar - it\u0027s cleaner that way.","commit_id":"80051455439d01a9054e7b5b0def8f8847b34e90"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a293a6ccc3dae74ed79c875f8c1b6275edad74b7","unresolved":false,"context_lines":[{"line_number":4387,"context_line":"            new_bdm \u003d objects.BlockDeviceMapping("},{"line_number":4388,"context_line":"                    context\u003dcontext,"},{"line_number":4389,"context_line":"                    source_type\u003d\u0027volume\u0027, destination_type\u003d\u0027volume\u0027,"},{"line_number":4390,"context_line":"                    instance_uuid\u003dinstance.uuid, boot_index\u003d-1,"},{"line_number":4391,"context_line":"                    volume_id\u003dvolume_id or \u0027reserved\u0027,"},{"line_number":4392,"context_line":"                    device_name\u003ddevice, guest_format\u003dNone,"},{"line_number":4393,"context_line":"                    disk_bus\u003ddisk_bus, device_type\u003ddevice_type)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_0cda8a17","line":4390,"updated":"2015-07-01 18:14:56.000000000","message":"See comment in ps10, I\u0027d like to know why we need to set boot_index\u003d-1 for this change, specifically, or is this something we should just be doing anyway, regardless of the new get_device_name_for_instance method on the ComputeDriver class?\n\nIf there is a specific reason for this, I think we need a comment in the code explaining why - i.e. is there something about get_device_name_for_instance that will rely on this value?\n\nSame for guest_format - should probably have a comment for that if it\u0027s related to obj_load_attr issues.","commit_id":"80051455439d01a9054e7b5b0def8f8847b34e90"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"e293c850b25977afaf24aad9e2b436c4a15681f0","unresolved":false,"context_lines":[{"line_number":4387,"context_line":"            new_bdm \u003d objects.BlockDeviceMapping("},{"line_number":4388,"context_line":"                    context\u003dcontext,"},{"line_number":4389,"context_line":"                    source_type\u003d\u0027volume\u0027, destination_type\u003d\u0027volume\u0027,"},{"line_number":4390,"context_line":"                    instance_uuid\u003dinstance.uuid, boot_index\u003d-1,"},{"line_number":4391,"context_line":"                    volume_id\u003dvolume_id or \u0027reserved\u0027,"},{"line_number":4392,"context_line":"                    device_name\u003ddevice, guest_format\u003dNone,"},{"line_number":4393,"context_line":"                    disk_bus\u003ddisk_bus, device_type\u003ddevice_type)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_48061e1e","line":4390,"in_reply_to":"ba3cc151_0cda8a17","updated":"2015-07-02 10:04:20.000000000","message":"it can be set to None as well, I\u0027ll just do that.\n\nAs explained on the previous patch - it will be accessed and unless set it will throw a \"cannot load attribute in the base class\" error.\n\nIMHO a bug with objects but - again - as explained previously, not easy to fix.","commit_id":"80051455439d01a9054e7b5b0def8f8847b34e90"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"08c3ebc39f3a5f1283e0a005b59a86eceb831c44","unresolved":false,"context_lines":[{"line_number":1647,"context_line":"    def _get_device_name_for_instance(self, instance, bdms, block_device_obj):"},{"line_number":1648,"context_line":"        try:"},{"line_number":1649,"context_line":"            return self.driver.get_device_name_for_instance("},{"line_number":1650,"context_line":"                instance, bdms, block_device_obj)"},{"line_number":1651,"context_line":"        except NotImplementedError:"},{"line_number":1652,"context_line":"            return compute_utils.get_device_name_for_instance("},{"line_number":1653,"context_line":"                instance, bdms, block_device_obj.get(\"device_name\"))"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_0f81dffa","line":1650,"updated":"2015-07-02 19:28:52.000000000","message":"In the previous change when I asked to send in a copy of the bdm, you said \u0027but yar - it\u0027s cleaner that way.\u0027, does that mean you agree and forgot, or you don\u0027t think it matters?  Personally I don\u0027t want to think that it\u0027s either/or.  If the method is called \u0027get_device_name_for_instance\u0027 it should return a device name for the instance and not modify the bdm object which we\u0027re saving to the database later.  If we want to let the virt drivers modify the bdm if they need to override things, then we should rename the method since it\u0027s otherwise confusing.  Sorry to pick on this but I\u0027ve gotten lost in enough of the bdm related code in the past to want to make sure we have good contracts with the virt driver API.","commit_id":"2080491c8615ea7e1f711ce08566d78357f02faf"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"82822357bbccfb3759a1c25669378b438dc35100","unresolved":false,"context_lines":[{"line_number":1647,"context_line":"    def _get_device_name_for_instance(self, instance, bdms, block_device_obj):"},{"line_number":1648,"context_line":"        try:"},{"line_number":1649,"context_line":"            return self.driver.get_device_name_for_instance("},{"line_number":1650,"context_line":"                instance, bdms, block_device_obj)"},{"line_number":1651,"context_line":"        except NotImplementedError:"},{"line_number":1652,"context_line":"            return compute_utils.get_device_name_for_instance("},{"line_number":1653,"context_line":"                instance, bdms, block_device_obj.get(\"device_name\"))"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_9d7ae675","line":1650,"in_reply_to":"ba3cc151_0f81dffa","updated":"2015-07-03 13:01:03.000000000","message":"So I said that we should really make sure it does not get mutated in the driver implemented method (in libvirt\u0027s case that would mean copying it there).\n\nBut then I forgot to fix it there :(\n\nWill do it in the next respin.","commit_id":"2080491c8615ea7e1f711ce08566d78357f02faf"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"08c3ebc39f3a5f1283e0a005b59a86eceb831c44","unresolved":false,"context_lines":[{"line_number":4385,"context_line":"            new_bdm \u003d objects.BlockDeviceMapping("},{"line_number":4386,"context_line":"                    context\u003dcontext,"},{"line_number":4387,"context_line":"                    source_type\u003d\u0027volume\u0027, destination_type\u003d\u0027volume\u0027,"},{"line_number":4388,"context_line":"                    instance_uuid\u003dinstance.uuid, boot_index\u003dNone,"},{"line_number":4389,"context_line":"                    volume_id\u003dvolume_id or \u0027reserved\u0027,"},{"line_number":4390,"context_line":"                    device_name\u003ddevice, guest_format\u003dNone,"},{"line_number":4391,"context_line":"                    disk_bus\u003ddisk_bus, device_type\u003ddevice_type)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_6f0aeb8b","line":4388,"updated":"2015-07-02 19:28:52.000000000","message":"Sorry, I think we should have a comment above:\n\nnew_bdm \u003d objects.BlockDeviceMapping(\n\nThat says we have to set boot_index and guest_format to None explicitly to avoid lazy load failures in the object. You could even say this is really a bug in the objects code but is harder to fix.\n\nThe point is, if I had to ask about it a few times, I think we should document it in the code for posterity.","commit_id":"2080491c8615ea7e1f711ce08566d78357f02faf"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"82822357bbccfb3759a1c25669378b438dc35100","unresolved":false,"context_lines":[{"line_number":4385,"context_line":"            new_bdm \u003d objects.BlockDeviceMapping("},{"line_number":4386,"context_line":"                    context\u003dcontext,"},{"line_number":4387,"context_line":"                    source_type\u003d\u0027volume\u0027, destination_type\u003d\u0027volume\u0027,"},{"line_number":4388,"context_line":"                    instance_uuid\u003dinstance.uuid, boot_index\u003dNone,"},{"line_number":4389,"context_line":"                    volume_id\u003dvolume_id or \u0027reserved\u0027,"},{"line_number":4390,"context_line":"                    device_name\u003ddevice, guest_format\u003dNone,"},{"line_number":4391,"context_line":"                    disk_bus\u003ddisk_bus, device_type\u003ddevice_type)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_bd580a32","line":4388,"in_reply_to":"ba3cc151_6f0aeb8b","updated":"2015-07-03 13:01:03.000000000","message":"Done","commit_id":"2080491c8615ea7e1f711ce08566d78357f02faf"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ecedb14fd5508b59a32b36175a480b7e4b83c7aa","unresolved":false,"context_lines":[{"line_number":1650,"context_line":""},{"line_number":1651,"context_line":"    def _get_device_name_for_instance(self, instance, bdms, block_device_obj):"},{"line_number":1652,"context_line":"        try:"},{"line_number":1653,"context_line":"            return self.driver.get_device_name_for_instance("},{"line_number":1654,"context_line":"                instance, bdms, block_device_obj)"},{"line_number":1655,"context_line":"        except NotImplementedError:"},{"line_number":1656,"context_line":"            return compute_utils.get_device_name_for_instance("}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_609ba773","line":1653,"updated":"2015-07-04 14:39:26.000000000","message":"We should copy the object before passing it into the virt driver here, so it\u0027s global to all virt drivers, not just libvirt, also commented in the libvirt impl change:\n\nhttps://review.openstack.org/#/c/180638/\n\nThis is the only thing left for me before a +2 on this change.","commit_id":"11ae73c2622abecc0cd0346c566f520f3db23680"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"7e68da472dc8f486e65ae786ab121b2fbcfc1aef","unresolved":false,"context_lines":[{"line_number":1650,"context_line":""},{"line_number":1651,"context_line":"    def _get_device_name_for_instance(self, instance, bdms, block_device_obj):"},{"line_number":1652,"context_line":"        try:"},{"line_number":1653,"context_line":"            return self.driver.get_device_name_for_instance("},{"line_number":1654,"context_line":"                instance, bdms, block_device_obj)"},{"line_number":1655,"context_line":"        except NotImplementedError:"},{"line_number":1656,"context_line":"            return compute_utils.get_device_name_for_instance("}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_ed69e026","line":1653,"in_reply_to":"ba3cc151_15a3f450","updated":"2015-07-06 08:32:19.000000000","message":"Done","commit_id":"11ae73c2622abecc0cd0346c566f520f3db23680"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"765a874794a95e88c0a2fef4c48cd4975b76acbd","unresolved":false,"context_lines":[{"line_number":1650,"context_line":""},{"line_number":1651,"context_line":"    def _get_device_name_for_instance(self, instance, bdms, block_device_obj):"},{"line_number":1652,"context_line":"        try:"},{"line_number":1653,"context_line":"            return self.driver.get_device_name_for_instance("},{"line_number":1654,"context_line":"                instance, bdms, block_device_obj)"},{"line_number":1655,"context_line":"        except NotImplementedError:"},{"line_number":1656,"context_line":"            return compute_utils.get_device_name_for_instance("}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_15a3f450","line":1653,"in_reply_to":"ba3cc151_609ba773","updated":"2015-07-05 14:33:11.000000000","message":"if we are going to do a copy then we should use obj_clone and not copy","commit_id":"11ae73c2622abecc0cd0346c566f520f3db23680"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9f6c17119eaa773c0c9ef8d5ab069200ee9a2488","unresolved":false,"context_lines":[{"line_number":7124,"context_line":"        bdms.sort(key\u003doperator.attrgetter(\u0027device_name\u0027))"},{"line_number":7125,"context_line":"        vol_bdm \u003d bdms[1]"},{"line_number":7126,"context_line":"        self.assertEqual(vol_bdm.source_type, \u0027volume\u0027)"},{"line_number":7127,"context_line":"        self.assertEqual(vol_bdm.boot_index, -1)"},{"line_number":7128,"context_line":"        self.assertEqual(vol_bdm.destination_type, \u0027volume\u0027)"},{"line_number":7129,"context_line":"        self.assertEqual(vol_bdm.device_name, \u0027/dev/vdb\u0027)"},{"line_number":7130,"context_line":"        self.assertEqual(vol_bdm.volume_id, \u0027fake-volume-id\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa32b979_5ea12245","line":7127,"updated":"2015-06-23 17:02:24.000000000","message":"expected value should be first","commit_id":"1b3b95e5503b442c18bfd3c89006d53ceae679c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"26269727714a20b4f127ca859b310cf0de7533cf","unresolved":false,"context_lines":[{"line_number":7124,"context_line":"        bdms.sort(key\u003doperator.attrgetter(\u0027device_name\u0027))"},{"line_number":7125,"context_line":"        vol_bdm \u003d bdms[1]"},{"line_number":7126,"context_line":"        self.assertEqual(vol_bdm.source_type, \u0027volume\u0027)"},{"line_number":7127,"context_line":"        self.assertEqual(vol_bdm.boot_index, -1)"},{"line_number":7128,"context_line":"        self.assertEqual(vol_bdm.destination_type, \u0027volume\u0027)"},{"line_number":7129,"context_line":"        self.assertEqual(vol_bdm.device_name, \u0027/dev/vdb\u0027)"},{"line_number":7130,"context_line":"        self.assertEqual(vol_bdm.volume_id, \u0027fake-volume-id\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa32b979_e2b346eb","line":7127,"in_reply_to":"fa32b979_5ea12245","updated":"2015-06-25 18:54:49.000000000","message":"+1, it matters for how the MismatchError shows up in output.","commit_id":"1b3b95e5503b442c18bfd3c89006d53ceae679c5"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"331b1ea1ccd92108a9d0b62aa35c1c10c8f97070","unresolved":false,"context_lines":[{"line_number":7124,"context_line":"        bdms.sort(key\u003doperator.attrgetter(\u0027device_name\u0027))"},{"line_number":7125,"context_line":"        vol_bdm \u003d bdms[1]"},{"line_number":7126,"context_line":"        self.assertEqual(vol_bdm.source_type, \u0027volume\u0027)"},{"line_number":7127,"context_line":"        self.assertEqual(vol_bdm.boot_index, -1)"},{"line_number":7128,"context_line":"        self.assertEqual(vol_bdm.destination_type, \u0027volume\u0027)"},{"line_number":7129,"context_line":"        self.assertEqual(vol_bdm.device_name, \u0027/dev/vdb\u0027)"},{"line_number":7130,"context_line":"        self.assertEqual(vol_bdm.volume_id, \u0027fake-volume-id\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_f909a632","line":7127,"in_reply_to":"fa32b979_e2b346eb","updated":"2015-06-29 14:11:53.000000000","message":"oh please... it is an annoying little nit that I don\u0027t care for at all.","commit_id":"1b3b95e5503b442c18bfd3c89006d53ceae679c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a293a6ccc3dae74ed79c875f8c1b6275edad74b7","unresolved":false,"context_lines":[{"line_number":7118,"context_line":"        bdms.sort(key\u003doperator.attrgetter(\u0027device_name\u0027))"},{"line_number":7119,"context_line":"        vol_bdm \u003d bdms[1]"},{"line_number":7120,"context_line":"        self.assertEqual(vol_bdm.source_type, \u0027volume\u0027)"},{"line_number":7121,"context_line":"        self.assertEqual(vol_bdm.boot_index, -1)"},{"line_number":7122,"context_line":"        self.assertEqual(vol_bdm.destination_type, \u0027volume\u0027)"},{"line_number":7123,"context_line":"        self.assertEqual(vol_bdm.device_name, \u0027/dev/vdb\u0027)"},{"line_number":7124,"context_line":"        self.assertEqual(vol_bdm.volume_id, \u0027fake-volume-id\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_aceb5e77","line":7121,"updated":"2015-07-01 18:14:56.000000000","message":"You should also add a test for:\n\nself.assertTrue(vol_bdm.obj_attr_is_set(\u0027guest_format\u0027))\n\nIf you need to make that change.","commit_id":"80051455439d01a9054e7b5b0def8f8847b34e90"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"e293c850b25977afaf24aad9e2b436c4a15681f0","unresolved":false,"context_lines":[{"line_number":7118,"context_line":"        bdms.sort(key\u003doperator.attrgetter(\u0027device_name\u0027))"},{"line_number":7119,"context_line":"        vol_bdm \u003d bdms[1]"},{"line_number":7120,"context_line":"        self.assertEqual(vol_bdm.source_type, \u0027volume\u0027)"},{"line_number":7121,"context_line":"        self.assertEqual(vol_bdm.boot_index, -1)"},{"line_number":7122,"context_line":"        self.assertEqual(vol_bdm.destination_type, \u0027volume\u0027)"},{"line_number":7123,"context_line":"        self.assertEqual(vol_bdm.device_name, \u0027/dev/vdb\u0027)"},{"line_number":7124,"context_line":"        self.assertEqual(vol_bdm.volume_id, \u0027fake-volume-id\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_858baf67","line":7121,"in_reply_to":"ba3cc151_aceb5e77","updated":"2015-07-02 10:04:20.000000000","message":"Done","commit_id":"80051455439d01a9054e7b5b0def8f8847b34e90"}],"nova/tests/unit/virt/test_virt_drivers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a293a6ccc3dae74ed79c875f8c1b6275edad74b7","unresolved":false,"context_lines":[{"line_number":772,"context_line":"    @catch_notimplementederror"},{"line_number":773,"context_line":"    def test_get_device_name_for_instance(self):"},{"line_number":774,"context_line":"        instance, _ \u003d self._get_running_instance()"},{"line_number":775,"context_line":"        self.connection.get_device_name_for_instance(instance, [], mock.Mock())"},{"line_number":776,"context_line":""},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"class AbstractDriverTestCase(_VirtDriverTestCase, test.TestCase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_2ca66e53","line":775,"updated":"2015-07-01 18:14:56.000000000","message":"nit: if you\u0027re going to just pass in mock.Mock(), at least do:\n\nmock.Mock(spec\u003dobjects.BlockDeviceMapping)","commit_id":"80051455439d01a9054e7b5b0def8f8847b34e90"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"e293c850b25977afaf24aad9e2b436c4a15681f0","unresolved":false,"context_lines":[{"line_number":772,"context_line":"    @catch_notimplementederror"},{"line_number":773,"context_line":"    def test_get_device_name_for_instance(self):"},{"line_number":774,"context_line":"        instance, _ \u003d self._get_running_instance()"},{"line_number":775,"context_line":"        self.connection.get_device_name_for_instance(instance, [], mock.Mock())"},{"line_number":776,"context_line":""},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"class AbstractDriverTestCase(_VirtDriverTestCase, test.TestCase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_45f047fe","line":775,"in_reply_to":"ba3cc151_2ca66e53","updated":"2015-07-02 10:04:20.000000000","message":"Done","commit_id":"80051455439d01a9054e7b5b0def8f8847b34e90"}],"nova/virt/driver.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"9ef356fece2af375d00fb0496188e84d3eb700d6","unresolved":false,"context_lines":[{"line_number":1339,"context_line":"                                     block_device_mapping,"},{"line_number":1340,"context_line":"                                     suggested_dev_name,"},{"line_number":1341,"context_line":"                                     block_device):"},{"line_number":1342,"context_line":"        \"\"\"Get the next device name based on the block device mapping.\"\"\""},{"line_number":1343,"context_line":"        raise NotImplementedError()"},{"line_number":1344,"context_line":""},{"line_number":1345,"context_line":"    def is_supported_fs_format(self, fs_type):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_d1948545","line":1342,"updated":"2015-05-26 13:12:34.000000000","message":"Can you document the various parameters here eg what data formats they are using","commit_id":"6a62b6063b5a1ea3c7c8e47e4b754257948675f2"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"91eee7fcf571557f9792bbf88a719c007360df34","unresolved":false,"context_lines":[{"line_number":1339,"context_line":"                                     block_device_mapping,"},{"line_number":1340,"context_line":"                                     suggested_dev_name,"},{"line_number":1341,"context_line":"                                     block_device):"},{"line_number":1342,"context_line":"        \"\"\"Get the next device name based on the block device mapping.\"\"\""},{"line_number":1343,"context_line":"        raise NotImplementedError()"},{"line_number":1344,"context_line":""},{"line_number":1345,"context_line":"    def is_supported_fs_format(self, fs_type):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_b720b24a","line":1342,"in_reply_to":"7a016987_d1948545","updated":"2015-05-27 11:07:04.000000000","message":"Done","commit_id":"6a62b6063b5a1ea3c7c8e47e4b754257948675f2"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"529719485329909576e9dfef9a7666cc46cbff5c","unresolved":false,"context_lines":[{"line_number":1363,"context_line":"        :param block_device: A nova.objects.BlockDeviceMapping instance with"},{"line_number":1364,"context_line":"                             all other info about the requested device"},{"line_number":1365,"context_line":"        \"\"\""},{"line_number":1366,"context_line":"        raise NotImplementedError()"},{"line_number":1367,"context_line":""},{"line_number":1368,"context_line":"    def is_supported_fs_format(self, fs_type):"},{"line_number":1369,"context_line":"        \"\"\"Check whether the file format is supported by this driver"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a016987_49df41d6","line":1366,"updated":"2015-05-29 13:01:56.000000000","message":"Should we not move the compute_utils code here?","commit_id":"cea7bb285dc76ba2d196e7e626b6b6a1c3f67b9f"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"d97ce5bc122d7709be51e26c5679acdc60edccbf","unresolved":false,"context_lines":[{"line_number":1363,"context_line":"        :param block_device: A nova.objects.BlockDeviceMapping instance with"},{"line_number":1364,"context_line":"                             all other info about the requested device"},{"line_number":1365,"context_line":"        \"\"\""},{"line_number":1366,"context_line":"        raise NotImplementedError()"},{"line_number":1367,"context_line":""},{"line_number":1368,"context_line":"    def is_supported_fs_format(self, fs_type):"},{"line_number":1369,"context_line":"        \"\"\"Check whether the file format is supported by this driver"}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_9a572f02","line":1366,"in_reply_to":"7a016987_49df41d6","updated":"2015-06-05 21:24:41.000000000","message":"Yeah I guess that\u0027s one way to do it - it just felt more right to me to leave it up to the compute to call the generic method if the driver can\u0027t support it - separation of concerns kind of thing.","commit_id":"cea7bb285dc76ba2d196e7e626b6b6a1c3f67b9f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"26269727714a20b4f127ca859b310cf0de7533cf","unresolved":false,"context_lines":[{"line_number":1349,"context_line":"        \"\"\"Default the missing device names in the block device mapping.\"\"\""},{"line_number":1350,"context_line":"        raise NotImplementedError()"},{"line_number":1351,"context_line":""},{"line_number":1352,"context_line":"    def get_device_name_for_instance(self, instance,"},{"line_number":1353,"context_line":"                                     block_device_mapping,"},{"line_number":1354,"context_line":"                                     suggested_dev_name,"},{"line_number":1355,"context_line":"                                     block_device_obj):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa32b979_657ae027","line":1352,"updated":"2015-06-25 18:54:49.000000000","message":"We should have a new test in test_virt_drivers.py for new methods on the ComputeDriver class:\n\nhttp://git.openstack.org/cgit/openstack/nova/tree/nova/tests/unit/virt/test_virt_drivers.py#n214","commit_id":"1b3b95e5503b442c18bfd3c89006d53ceae679c5"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"d04e403184af233c2ea45e6ceac1c6976d9fe508","unresolved":false,"context_lines":[{"line_number":1349,"context_line":"        \"\"\"Default the missing device names in the block device mapping.\"\"\""},{"line_number":1350,"context_line":"        raise NotImplementedError()"},{"line_number":1351,"context_line":""},{"line_number":1352,"context_line":"    def get_device_name_for_instance(self, instance,"},{"line_number":1353,"context_line":"                                     block_device_mapping,"},{"line_number":1354,"context_line":"                                     suggested_dev_name,"},{"line_number":1355,"context_line":"                                     block_device_obj):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_2f5d80e9","line":1352,"in_reply_to":"fa32b979_657ae027","updated":"2015-06-29 17:00:35.000000000","message":"Done","commit_id":"1b3b95e5503b442c18bfd3c89006d53ceae679c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"26269727714a20b4f127ca859b310cf0de7533cf","unresolved":false,"context_lines":[{"line_number":1352,"context_line":"    def get_device_name_for_instance(self, instance,"},{"line_number":1353,"context_line":"                                     block_device_mapping,"},{"line_number":1354,"context_line":"                                     suggested_dev_name,"},{"line_number":1355,"context_line":"                                     block_device_obj):"},{"line_number":1356,"context_line":"        \"\"\"Get the next device name based on the block device mapping."},{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"        :param instance: nova.objects.instance.Instance that volume is"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa32b979_c59bac65","line":1355,"updated":"2015-06-25 18:54:49.000000000","message":"This is a bit confusing to me, maybe because I haven\u0027t reviewed the patch that uses it, but the naming of this seems like it could be more obvious, like requested_block_device?  Something like that?  Maybe just needs more information in the description of this parameter as to what the virt driver is supposed to do with it.","commit_id":"1b3b95e5503b442c18bfd3c89006d53ceae679c5"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"d04e403184af233c2ea45e6ceac1c6976d9fe508","unresolved":false,"context_lines":[{"line_number":1352,"context_line":"    def get_device_name_for_instance(self, instance,"},{"line_number":1353,"context_line":"                                     block_device_mapping,"},{"line_number":1354,"context_line":"                                     suggested_dev_name,"},{"line_number":1355,"context_line":"                                     block_device_obj):"},{"line_number":1356,"context_line":"        \"\"\"Get the next device name based on the block device mapping."},{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"        :param instance: nova.objects.instance.Instance that volume is"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_12577f03","line":1355,"in_reply_to":"fa32b979_c59bac65","updated":"2015-06-29 17:00:35.000000000","message":"Yeah I might drop the suggested dev name altoghether.","commit_id":"1b3b95e5503b442c18bfd3c89006d53ceae679c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"26269727714a20b4f127ca859b310cf0de7533cf","unresolved":false,"context_lines":[{"line_number":1360,"context_line":"        :param block_device_mapping: a nova.objects.BlockDeviceMappingList for"},{"line_number":1361,"context_line":"                                     the instance"},{"line_number":1362,"context_line":"        :param suggested_dev_name: A device name if it was supplied with the"},{"line_number":1363,"context_line":"                                   request or None"},{"line_number":1364,"context_line":"        :param block_device_obj: A nova.objects.BlockDeviceMapping instance"},{"line_number":1365,"context_line":"                                 with all other info about the requested dev"},{"line_number":1366,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa32b979_a27f7e16","line":1363,"updated":"2015-06-25 18:54:49.000000000","message":"Shouldn\u0027t the arg default to None then?","commit_id":"1b3b95e5503b442c18bfd3c89006d53ceae679c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a293a6ccc3dae74ed79c875f8c1b6275edad74b7","unresolved":false,"context_lines":[{"line_number":1362,"context_line":"                                 with all info about the requested block"},{"line_number":1363,"context_line":"                                 device. device_name does not need to be set,"},{"line_number":1364,"context_line":"                                 and should be decided by the driver"},{"line_number":1365,"context_line":"                                 implementation if not set."},{"line_number":1366,"context_line":"        \"\"\""},{"line_number":1367,"context_line":"        raise NotImplementedError()"},{"line_number":1368,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_1f194a79","line":1365,"updated":"2015-07-01 18:14:56.000000000","message":"Should probably have a :return entry here to make it clear that the device_name should be returned, so there aren\u0027t guesses about if like the virt driver should set the block_device_obj.device_name attribute itself.  I point that out because it looks like default_device_names_for_instance above is used to change the bdms via pass by reference, and in this case block_device_obj should be immutable it sounds like.","commit_id":"80051455439d01a9054e7b5b0def8f8847b34e90"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"e293c850b25977afaf24aad9e2b436c4a15681f0","unresolved":false,"context_lines":[{"line_number":1362,"context_line":"                                 with all info about the requested block"},{"line_number":1363,"context_line":"                                 device. device_name does not need to be set,"},{"line_number":1364,"context_line":"                                 and should be decided by the driver"},{"line_number":1365,"context_line":"                                 implementation if not set."},{"line_number":1366,"context_line":"        \"\"\""},{"line_number":1367,"context_line":"        raise NotImplementedError()"},{"line_number":1368,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_85f72f58","line":1365,"in_reply_to":"ba3cc151_1f194a79","updated":"2015-07-02 10:04:20.000000000","message":"Done","commit_id":"80051455439d01a9054e7b5b0def8f8847b34e90"}]}
