)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"0791debbdcd843cdcd4e24371fe691ed5f6c6eca","unresolved":false,"context_lines":[{"line_number":1378,"context_line":"        \"\"\"Get a list of dictionaries of network data of an instance.\"\"\""},{"line_number":1379,"context_line":"        return self.network_api.get_instance_nw_info(context, instance)"},{"line_number":1380,"context_line":""},{"line_number":1381,"context_line":"    def _await_block_device_map_created(self, context, vol_id):"},{"line_number":1382,"context_line":"        # TODO(yamahata): creating volume simultaneously"},{"line_number":1383,"context_line":"        #                 reduces creation time?"},{"line_number":1384,"context_line":"        # TODO(yamahata): eliminate dumb polling"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_1764ebe1","line":1381,"updated":"2015-05-08 09:06:54.000000000","message":"Probably, sometime later we could move this to libvirt? Since it creates volumes, waits, and (with https://review.openstack.org/#/c/177084/) removes them, this location looks a bit confusing.","commit_id":"ec912213905dbd7c89dd50687d9f904029eb123b"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"d45dd3b802f7c1312975cd31e7d81a3a270ef933","unresolved":false,"context_lines":[{"line_number":1378,"context_line":"        \"\"\"Get a list of dictionaries of network data of an instance.\"\"\""},{"line_number":1379,"context_line":"        return self.network_api.get_instance_nw_info(context, instance)"},{"line_number":1380,"context_line":""},{"line_number":1381,"context_line":"    def _await_block_device_map_created(self, context, vol_id):"},{"line_number":1382,"context_line":"        # TODO(yamahata): creating volume simultaneously"},{"line_number":1383,"context_line":"        #                 reduces creation time?"},{"line_number":1384,"context_line":"        # TODO(yamahata): eliminate dumb polling"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_33724dae","line":1381,"in_reply_to":"1aca2d91_1764ebe1","updated":"2015-05-08 15:52:05.000000000","message":"Hmm not sure - this is pretty generic code that mostly deals with cinder? why would we want to move it to libvirt?","commit_id":"ec912213905dbd7c89dd50687d9f904029eb123b"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"03f0ee5965b7d1d19e49a72e60df60f550fec1f8","unresolved":false,"context_lines":[{"line_number":1378,"context_line":"        \"\"\"Get a list of dictionaries of network data of an instance.\"\"\""},{"line_number":1379,"context_line":"        return self.network_api.get_instance_nw_info(context, instance)"},{"line_number":1380,"context_line":""},{"line_number":1381,"context_line":"    def _await_block_device_map_created(self, context, vol_id):"},{"line_number":1382,"context_line":"        # TODO(yamahata): creating volume simultaneously"},{"line_number":1383,"context_line":"        #                 reduces creation time?"},{"line_number":1384,"context_line":"        # TODO(yamahata): eliminate dumb polling"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_4eb520ec","line":1381,"in_reply_to":"1aca2d91_33724dae","updated":"2015-05-08 16:33:10.000000000","message":"Sorry, i missed. I meant virt/block_device actually","commit_id":"ec912213905dbd7c89dd50687d9f904029eb123b"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"91e4fd7b012dbfe39bb42f13bc8d6f032d79f81e","unresolved":false,"context_lines":[{"line_number":1378,"context_line":"        \"\"\"Get a list of dictionaries of network data of an instance.\"\"\""},{"line_number":1379,"context_line":"        return self.network_api.get_instance_nw_info(context, instance)"},{"line_number":1380,"context_line":""},{"line_number":1381,"context_line":"    def _await_block_device_map_created(self, context, vol_id):"},{"line_number":1382,"context_line":"        # TODO(yamahata): creating volume simultaneously"},{"line_number":1383,"context_line":"        #                 reduces creation time?"},{"line_number":1384,"context_line":"        # TODO(yamahata): eliminate dumb polling"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_cfd0c021","line":1381,"in_reply_to":"1aca2d91_4eb520ec","updated":"2015-05-21 08:15:13.000000000","message":"Ah yeah that would make sense","commit_id":"ec912213905dbd7c89dd50687d9f904029eb123b"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"0d1048d73b4ebe3d761d5589ece0ed09acb1a7ee","unresolved":false,"context_lines":[{"line_number":1701,"context_line":"            block_device_info.update({"},{"line_number":1702,"context_line":"                \u0027ephemerals\u0027: ephemerals,"},{"line_number":1703,"context_line":"                \u0027swap\u0027: swap,"},{"line_number":1704,"context_line":"                \u0027block_device_mapping\u0027: mapping})"},{"line_number":1705,"context_line":""},{"line_number":1706,"context_line":"    def _prep_block_device(self, context, instance, bdms,"},{"line_number":1707,"context_line":"                           do_check_attach\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_31ed1926","line":1704,"updated":"2015-05-26 13:09:12.000000000","message":"Given the name of this method I find it a little bit mis-leading that it updates the block-device_info parameter in-place.\n\nI\u0027d suggest either renaming it to make it clear that its modifying its arguments (eg _convert_legacy_block_device_info), or change it to return a new dict and not modify the args.","commit_id":"7c6b9e160992ba2ed542491302e9b1b49f8d5a3a"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"9c9f743ec4aeef51cac47740dd4fc143bd2edf6c","unresolved":false,"context_lines":[{"line_number":1701,"context_line":"            block_device_info.update({"},{"line_number":1702,"context_line":"                \u0027ephemerals\u0027: ephemerals,"},{"line_number":1703,"context_line":"                \u0027swap\u0027: swap,"},{"line_number":1704,"context_line":"                \u0027block_device_mapping\u0027: mapping})"},{"line_number":1705,"context_line":""},{"line_number":1706,"context_line":"    def _prep_block_device(self, context, instance, bdms,"},{"line_number":1707,"context_line":"                           do_check_attach\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_74c4783f","line":1704,"in_reply_to":"7a016987_31ed1926","updated":"2015-05-27 11:06:00.000000000","message":"Done","commit_id":"7c6b9e160992ba2ed542491302e9b1b49f8d5a3a"}],"nova/virt/block_device.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"62298d973370d851eea1fcabd3b8493e58c2046b","unresolved":false,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    @update_db"},{"line_number":226,"context_line":"    def attach(self, context, instance, volume_api, virt_driver,"},{"line_number":227,"context_line":"               do_check_attach\u003dTrue, do_driver_attach\u003dFalse, **kwargs):"},{"line_number":228,"context_line":"        volume \u003d volume_api.get(context, self.volume_id)"},{"line_number":229,"context_line":"        if do_check_attach:"},{"line_number":230,"context_line":"            volume_api.check_attach(context, volume, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_7a05b312","line":227,"updated":"2015-05-26 09:20:12.000000000","message":"So now in manager.py you are passing to driver_block_device.attach_block_devices all of the mapping with arguments and this class missed to use the parameter wait_func.","commit_id":"7c6b9e160992ba2ed542491302e9b1b49f8d5a3a"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"9c9f743ec4aeef51cac47740dd4fc143bd2edf6c","unresolved":false,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    @update_db"},{"line_number":226,"context_line":"    def attach(self, context, instance, volume_api, virt_driver,"},{"line_number":227,"context_line":"               do_check_attach\u003dTrue, do_driver_attach\u003dFalse, **kwargs):"},{"line_number":228,"context_line":"        volume \u003d volume_api.get(context, self.volume_id)"},{"line_number":229,"context_line":"        if do_check_attach:"},{"line_number":230,"context_line":"            volume_api.check_attach(context, volume, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_d7432e12","line":227,"in_reply_to":"7a016987_515d35eb","updated":"2015-05-27 11:06:00.000000000","message":"So this is a base volume class - other subclasses will add params to attach (like wait func to wait and poll a cinder action), but we want to be able to polymorphically call the method with the same signature on any of the volume subclasses (this is what convert_all_volumes does).\n\nAnother way to approach this is to make sure all subclass signatures match, but since python provides the convenient kwargs idiom for variable number of arguments - why not use that.","commit_id":"7c6b9e160992ba2ed542491302e9b1b49f8d5a3a"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"0d1048d73b4ebe3d761d5589ece0ed09acb1a7ee","unresolved":false,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    @update_db"},{"line_number":226,"context_line":"    def attach(self, context, instance, volume_api, virt_driver,"},{"line_number":227,"context_line":"               do_check_attach\u003dTrue, do_driver_attach\u003dFalse, **kwargs):"},{"line_number":228,"context_line":"        volume \u003d volume_api.get(context, self.volume_id)"},{"line_number":229,"context_line":"        if do_check_attach:"},{"line_number":230,"context_line":"            volume_api.check_attach(context, volume, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_515d35eb","line":227,"in_reply_to":"7a016987_7a05b312","updated":"2015-05-26 13:09:12.000000000","message":"You\u0027re not using the new kwargs here, so what am I missing ?","commit_id":"7c6b9e160992ba2ed542491302e9b1b49f8d5a3a"}],"nova/virt/driver.py":[{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"0791debbdcd843cdcd4e24371fe691ed5f6c6eca","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def get_block_device_info(instance, block_device_mapping):"},{"line_number":79,"context_line":"    from nova.virt import block_device as virt_block_device"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    block_device_info \u003d {"},{"line_number":82,"context_line":"        \u0027root_device_name\u0027: instance.root_device_name,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_1cac1033","line":79,"updated":"2015-05-08 09:06:54.000000000","message":"Why is a dynamic import needed here? At first glance block_device module doesn\u0027t import driver module, thus a reason is not the circular reference. So what is the reason?","commit_id":"ec912213905dbd7c89dd50687d9f904029eb123b"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"91e4fd7b012dbfe39bb42f13bc8d6f032d79f81e","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def get_block_device_info(instance, block_device_mapping):"},{"line_number":79,"context_line":"    from nova.virt import block_device as virt_block_device"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    block_device_info \u003d {"},{"line_number":82,"context_line":"        \u0027root_device_name\u0027: instance.root_device_name,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_cfcc406c","line":79,"in_reply_to":"1aca2d91_1cac1033","updated":"2015-05-21 08:15:13.000000000","message":"there is a circular import here sadly nova/block_device imports this file and virt/block_device imports nova/block_device :(\n\nThe reason for this is that we try to check which driver we are using in some of the block device_code (in order to decide device names) which is REALLY BAD, and goes to show how much of a bad idea exposing the device names was in the first place (khm EC2 khm) but it just never got fixed.","commit_id":"ec912213905dbd7c89dd50687d9f904029eb123b"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"0791debbdcd843cdcd4e24371fe691ed5f6c6eca","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    }"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    # Get swap out of the list context"},{"line_number":91,"context_line":"    block_device_info[\u0027swap\u0027] \u003d virt_block_device.get_swap("},{"line_number":92,"context_line":"        block_device_info[\u0027swap\u0027])"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    return block_device_info"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_1cc65048","line":91,"updated":"2015-05-08 09:06:54.000000000","message":"Could we use a separate variable for the list of swaps? Or use convert_swap call as an argument for get_swap?\n\nIt takes a time to get that block_device_info[\u0027swap\u0027] is initialized as a list, but then is assigned to a single object.","commit_id":"ec912213905dbd7c89dd50687d9f904029eb123b"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"d45dd3b802f7c1312975cd31e7d81a3a270ef933","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    }"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    # Get swap out of the list context"},{"line_number":91,"context_line":"    block_device_info[\u0027swap\u0027] \u003d virt_block_device.get_swap("},{"line_number":92,"context_line":"        block_device_info[\u0027swap\u0027])"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    return block_device_info"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_13b19147","line":91,"in_reply_to":"1aca2d91_1cc65048","updated":"2015-05-08 15:52:05.000000000","message":"Done","commit_id":"ec912213905dbd7c89dd50687d9f904029eb123b"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"0d1048d73b4ebe3d761d5589ece0ed09acb1a7ee","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    return driver_registry"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def get_block_device_info(instance, block_device_mapping):"},{"line_number":79,"context_line":"    from nova.virt import block_device as virt_block_device"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    block_device_info \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_b1c0e97d","line":78,"updated":"2015-05-26 13:09:12.000000000","message":"Can we have a docs string for this method....","commit_id":"7c6b9e160992ba2ed542491302e9b1b49f8d5a3a"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"9c9f743ec4aeef51cac47740dd4fc143bd2edf6c","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    return driver_registry"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def get_block_device_info(instance, block_device_mapping):"},{"line_number":79,"context_line":"    from nova.virt import block_device as virt_block_device"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    block_device_info \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_375e02ea","line":78,"in_reply_to":"7a016987_b1c0e97d","updated":"2015-05-27 11:06:00.000000000","message":"Done","commit_id":"7c6b9e160992ba2ed542491302e9b1b49f8d5a3a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"7c1e70a7e104f67c16386c6a274aae291d9a9b26","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        ephemerals: a (potentially empty) list of DriverEphemeralBlockDevice"},{"line_number":86,"context_line":"                    instances"},{"line_number":87,"context_line":"        swap: An instance of DriverSwapBlockDevice or None"},{"line_number":88,"context_line":"        block_device_info: a (potentially empty) list of"},{"line_number":89,"context_line":"                           DriverVolumeBlockDevice or any of it\u0027s more"},{"line_number":90,"context_line":"                           specialized subclasses."},{"line_number":91,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_a2286034","line":88,"updated":"2015-05-27 16:25:27.000000000","message":"should this be block_device_mapping?","commit_id":"6942e0400b1a7d73e7f0bcd4dd732f8e5af7d61e"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"577d646f6546cb77d9af7608d49f379010d64d85","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        ephemerals: a (potentially empty) list of DriverEphemeralBlockDevice"},{"line_number":86,"context_line":"                    instances"},{"line_number":87,"context_line":"        swap: An instance of DriverSwapBlockDevice or None"},{"line_number":88,"context_line":"        block_device_info: a (potentially empty) list of"},{"line_number":89,"context_line":"                           DriverVolumeBlockDevice or any of it\u0027s more"},{"line_number":90,"context_line":"                           specialized subclasses."},{"line_number":91,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_68a2304d","line":88,"in_reply_to":"7a016987_a2286034","updated":"2015-05-28 08:23:37.000000000","message":"Done","commit_id":"6942e0400b1a7d73e7f0bcd4dd732f8e5af7d61e"}]}
