)]}'
{"nova/api/metadata/base.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c1cfdf8a3b09d23be8281be0cfeff5aea0e8d580","unresolved":false,"context_lines":[{"line_number":480,"context_line":""},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"def _format_instance_mapping(ctxt, instance):"},{"line_number":483,"context_line":"    bdms \u003d block_device_obj.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":484,"context_line":"            ctxt, instance.uuid)"},{"line_number":485,"context_line":"    return block_device.instance_block_mapping(instance, bdms)"},{"line_number":486,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FfP4%3D","line":483,"updated":"2014-01-13 11:59:48.000000000","message":"i may be mistaken here - but can objects replace the conductor api?","commit_id":"f0a3fdd2ee0a4525262a5ba05e9ee04d5897ecd0"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"39d8e57bb349ba540510f75d8e8eeb0b8fbfdcf4","unresolved":false,"context_lines":[{"line_number":480,"context_line":""},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"def _format_instance_mapping(ctxt, instance):"},{"line_number":483,"context_line":"    bdms \u003d block_device_obj.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":484,"context_line":"            ctxt, instance.uuid)"},{"line_number":485,"context_line":"    return block_device.instance_block_mapping(instance, bdms)"},{"line_number":486,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FeWg%3D","line":483,"in_reply_to":"AAAAUH%2F%2FfP4%3D","updated":"2014-01-13 17:28:17.000000000","message":"Well yes - that is (one of) the points of object - based on which service it\u0027s run in, it will either call the method or dispatch it over RPC to conductor using object_action and object_class_action rpc calls.\n\nCheck out how @remotable and @remotable_classmethod decorators are implemented in nova/objects/base.py.\n\nHowever - in order for this to happen - we need to fix this (https://bugs.launchpad.net/nova/+bug/1268665) first, but it\u0027s not related to this series so I\u0027d keep it separate.","commit_id":"f0a3fdd2ee0a4525262a5ba05e9ee04d5897ecd0"}],"nova/block_device.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c1cfdf8a3b09d23be8281be0cfeff5aea0e8d580","unresolved":false,"context_lines":[{"line_number":480,"context_line":"    # \u0027ephemeralN\u0027, \u0027swap\u0027 and ebs"},{"line_number":481,"context_line":"    for bdm in bdms:"},{"line_number":482,"context_line":"        # ebs volume case"},{"line_number":483,"context_line":"        if bdm[\u0027destination_type\u0027] \u003d\u003d \u0027volume\u0027:"},{"line_number":484,"context_line":"            ebs_devices.append(bdm[\u0027device_name\u0027])"},{"line_number":485,"context_line":"            continue"},{"line_number":486,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FfRU%3D","line":483,"updated":"2014-01-13 11:59:48.000000000","message":"is the bdm an object here? if so, then why not bdm.destination_type?","commit_id":"f0a3fdd2ee0a4525262a5ba05e9ee04d5897ecd0"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"39d8e57bb349ba540510f75d8e8eeb0b8fbfdcf4","unresolved":false,"context_lines":[{"line_number":480,"context_line":"    # \u0027ephemeralN\u0027, \u0027swap\u0027 and ebs"},{"line_number":481,"context_line":"    for bdm in bdms:"},{"line_number":482,"context_line":"        # ebs volume case"},{"line_number":483,"context_line":"        if bdm[\u0027destination_type\u0027] \u003d\u003d \u0027volume\u0027:"},{"line_number":484,"context_line":"            ebs_devices.append(bdm[\u0027device_name\u0027])"},{"line_number":485,"context_line":"            continue"},{"line_number":486,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FeOY%3D","line":483,"in_reply_to":"AAAAUH%2F%2FfRU%3D","updated":"2014-01-13 17:28:17.000000000","message":"Hmm yes - it appears that all code paths that call this use objects. Will change it - no reason not to really","commit_id":"f0a3fdd2ee0a4525262a5ba05e9ee04d5897ecd0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ad55c4154c1abe823fce6eb7befe0f718f200e17","unresolved":false,"context_lines":[{"line_number":480,"context_line":"    # \u0027ephemeralN\u0027, \u0027swap\u0027 and ebs"},{"line_number":481,"context_line":"    for bdm in bdms:"},{"line_number":482,"context_line":"        # ebs volume case"},{"line_number":483,"context_line":"        if bdm.destination_type \u003d\u003d \u0027volume\u0027:"},{"line_number":484,"context_line":"            ebs_devices.append(bdm.device_name)"},{"line_number":485,"context_line":"            continue"},{"line_number":486,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FTqc%3D","line":483,"updated":"2014-01-15 08:13:17.000000000","message":"dumb question - could there be a case when the destination is \u0027volume\u0027 and the source is \u0027blank\u0027. not sure i really understand the bugger picture here. so please for give me","commit_id":"6142dd79ad8e3638eb993303d572bc738adcf692"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"44716faf968d9114207ab123a5139f01f7e4e584","unresolved":false,"context_lines":[{"line_number":478,"context_line":"    # \u0027ephemeralN\u0027, \u0027swap\u0027 and ebs"},{"line_number":479,"context_line":"    for bdm in bdms:"},{"line_number":480,"context_line":"        # ebs volume case"},{"line_number":481,"context_line":"        if bdm.destination_type \u003d\u003d \u0027volume\u0027:"},{"line_number":482,"context_line":"            ebs_devices.append(bdm.device_name)"},{"line_number":483,"context_line":"            continue"},{"line_number":484,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FqdI%3D","line":481,"updated":"2014-02-11 17:42:47.000000000","message":"I assume destination_type unifies volumes and snapshots?","commit_id":"f986b726cb8f64d1ef043d4f9bffa45b55ef819d"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"a9b0919c6db1c6dac16431e1637dfd345ecba5db","unresolved":false,"context_lines":[{"line_number":478,"context_line":"    # \u0027ephemeralN\u0027, \u0027swap\u0027 and ebs"},{"line_number":479,"context_line":"    for bdm in bdms:"},{"line_number":480,"context_line":"        # ebs volume case"},{"line_number":481,"context_line":"        if bdm.destination_type \u003d\u003d \u0027volume\u0027:"},{"line_number":482,"context_line":"            ebs_devices.append(bdm.device_name)"},{"line_number":483,"context_line":"            continue"},{"line_number":484,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FqBY%3D","line":481,"in_reply_to":"AAAAUX%2F%2FqdI%3D","updated":"2014-02-11 18:19:51.000000000","message":"And images that can be downloaded to volumes. We also plan to have destination_type: \u0027local\u0027 see: https://blueprints.launchpad.net/nova/+spec/libvirt-image-to-local-bdm","commit_id":"f986b726cb8f64d1ef043d4f9bffa45b55ef819d"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"44716faf968d9114207ab123a5139f01f7e4e584","unresolved":false,"context_lines":[{"line_number":496,"context_line":"    swap \u003d [bdm for bdm in blanks if bdm.guest_format \u003d\u003d \u0027swap\u0027]"},{"line_number":497,"context_line":"    if swap:"},{"line_number":498,"context_line":"        mappings[\u0027swap\u0027] \u003d swap.pop().device_name"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"    ephemerals \u003d [bdm for bdm in blanks if bdm.guest_format !\u003d \u0027swap\u0027]"},{"line_number":501,"context_line":"    if ephemerals:"},{"line_number":502,"context_line":"        for num, eph in enumerate(ephemerals):"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fqao%3D","line":499,"updated":"2014-02-11 17:42:47.000000000","message":"Why do we no longer need the check for blank virtual_name?","commit_id":"f986b726cb8f64d1ef043d4f9bffa45b55ef819d"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"a9b0919c6db1c6dac16431e1637dfd345ecba5db","unresolved":false,"context_lines":[{"line_number":496,"context_line":"    swap \u003d [bdm for bdm in blanks if bdm.guest_format \u003d\u003d \u0027swap\u0027]"},{"line_number":497,"context_line":"    if swap:"},{"line_number":498,"context_line":"        mappings[\u0027swap\u0027] \u003d swap.pop().device_name"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"    ephemerals \u003d [bdm for bdm in blanks if bdm.guest_format !\u003d \u0027swap\u0027]"},{"line_number":501,"context_line":"    if ephemerals:"},{"line_number":502,"context_line":"        for num, eph in enumerate(ephemerals):"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FqBA%3D","line":499,"in_reply_to":"AAAAUX%2F%2Fqao%3D","updated":"2014-02-11 18:19:51.000000000","message":"We removed the virtual_name field. we encode it as \u0027source_type\u0027: blank and then see weather it\u0027s destinaton format is swap, to distinguish between swap and ephemeral devices","commit_id":"f986b726cb8f64d1ef043d4f9bffa45b55ef819d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"28013783a210a2ea602c7edb7283fec55aa6613d","unresolved":false,"context_lines":[{"line_number":471,"context_line":"    default_swap_device \u003d instance.get(\u0027default_swap_device\u0027)"},{"line_number":472,"context_line":"    if default_swap_device:"},{"line_number":473,"context_line":"        mappings[\u0027swap\u0027] \u003d default_swap_device"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"    ebs_devices \u003d []"},{"line_number":476,"context_line":"    blanks \u003d []"},{"line_number":477,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUX%2F%2B1zM%3D","line":474,"updated":"2014-02-18 17:51:54.000000000","message":"FWIW, I\u0027m not a fan of unrelated whitespace damage in patches :)","commit_id":"927c1b7f3ed0dc1fb405e6cd75ec1b1a16141de4"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"9f67407891e6ecb07b9a2257e0a3949a42595997","unresolved":false,"context_lines":[{"line_number":471,"context_line":"    default_swap_device \u003d instance.get(\u0027default_swap_device\u0027)"},{"line_number":472,"context_line":"    if default_swap_device:"},{"line_number":473,"context_line":"        mappings[\u0027swap\u0027] \u003d default_swap_device"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"    ebs_devices \u003d []"},{"line_number":476,"context_line":"    blanks \u003d []"},{"line_number":477,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUX%2F%2B1LA%3D","line":474,"in_reply_to":"AAAAUX%2F%2B1zM%3D","updated":"2014-02-18 18:38:06.000000000","message":"Yeah fair enough - me too - will fix it.","commit_id":"927c1b7f3ed0dc1fb405e6cd75ec1b1a16141de4"}],"nova/compute/cells_api.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8f06a973635386c2cc2b812268fa6b8af67454e6","unresolved":false,"context_lines":[{"line_number":414,"context_line":"        self.volume_api.check_attach(context, volume, instance\u003dinstance)"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"        return self._call_to_cells(context, instance, \u0027attach_volume\u0027,"},{"line_number":417,"context_line":"                volume_id, device, disk_bus, device_type)"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    @check_instance_cell"},{"line_number":420,"context_line":"    def _detach_volume(self, context, instance, volume):"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F9VlQ%3D","line":417,"updated":"2014-02-07 16:23:51.000000000","message":"Hmm, I forget if this requires any changes to the cells manager, etc.","commit_id":"a9244df655f164bbe04612dcb62af3f163c9d1b1"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"44716faf968d9114207ab123a5139f01f7e4e584","unresolved":false,"context_lines":[{"line_number":427,"context_line":"            raise exception.InvalidDevicePath(path\u003ddevice)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        volume \u003d self.volume_api.get(context, volume_id)"},{"line_number":430,"context_line":"        self.volume_api.check_attach(context, volume, instance\u003dinstance)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        return self._call_to_cells(context, instance, \u0027attach_volume\u0027,"},{"line_number":433,"context_line":"                volume_id, device, disk_bus, device_type)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FqQM%3D","line":430,"updated":"2014-02-11 17:42:47.000000000","message":"Why do we not want to clean up any more?","commit_id":"f986b726cb8f64d1ef043d4f9bffa45b55ef819d"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"34f7ffd15ad3bc0ffd9c2c18a31095295cd1008b","unresolved":false,"context_lines":[{"line_number":427,"context_line":"            raise exception.InvalidDevicePath(path\u003ddevice)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        volume \u003d self.volume_api.get(context, volume_id)"},{"line_number":430,"context_line":"        self.volume_api.check_attach(context, volume, instance\u003dinstance)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        return self._call_to_cells(context, instance, \u0027attach_volume\u0027,"},{"line_number":433,"context_line":"                volume_id, device, disk_bus, device_type)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Foxk%3D","line":430,"in_reply_to":"AAAAUX%2F%2Fp3U%3D","updated":"2014-02-11 20:33:30.000000000","message":"Spoke with Chris and he thinks it\u0027s fine too, but I\u0027m going to add him to the review just to make sure.","commit_id":"f986b726cb8f64d1ef043d4f9bffa45b55ef819d"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"a9b0919c6db1c6dac16431e1637dfd345ecba5db","unresolved":false,"context_lines":[{"line_number":427,"context_line":"            raise exception.InvalidDevicePath(path\u003ddevice)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        volume \u003d self.volume_api.get(context, volume_id)"},{"line_number":430,"context_line":"        self.volume_api.check_attach(context, volume, instance\u003dinstance)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        return self._call_to_cells(context, instance, \u0027attach_volume\u0027,"},{"line_number":433,"context_line":"                volume_id, device, disk_bus, device_type)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fp3U%3D","line":430,"in_reply_to":"AAAAUX%2F%2FqQM%3D","updated":"2014-02-11 18:19:51.000000000","message":"As far as I can tell - we never needed it here. The volume block device mapping get inserted in the db only in reserve_block_device compute mehtod when it calls to conductor (and propagated back to the parent cell), and this will happen only if both of these calls pass.","commit_id":"f986b726cb8f64d1ef043d4f9bffa45b55ef819d"}],"nova/compute/manager.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1ef58264cee470780ff7825c5402ec834b5de79b","unresolved":false,"context_lines":[{"line_number":3772,"context_line":"    @reverts_task_state"},{"line_number":3773,"context_line":"    @wrap_instance_fault"},{"line_number":3774,"context_line":"    def reserve_block_device_name(self, context, instance, device,"},{"line_number":3775,"context_line":"                                  volume_id, disk_bus\u003dNone, device_type\u003dNone):"},{"line_number":3776,"context_line":""},{"line_number":3777,"context_line":"        @utils.synchronized(instance[\u0027uuid\u0027])"},{"line_number":3778,"context_line":"        def do_reserve():"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F9%2BAE%3D","line":3775,"updated":"2014-01-31 15:19:31.000000000","message":"I don\u0027t see any code to handle the case where an older client doesn\u0027t pass disk_bus and device_type. If the None-ness is handled in the same way by the object creation below, I think there needs to be a comment to that effect.","commit_id":"ac363e5ee05eef5f6f6d750030ab28cae05f9ca5"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"d0f2708e45cca3fdbfdeeb04e53b70e30a88154c","unresolved":false,"context_lines":[{"line_number":3772,"context_line":"    @reverts_task_state"},{"line_number":3773,"context_line":"    @wrap_instance_fault"},{"line_number":3774,"context_line":"    def reserve_block_device_name(self, context, instance, device,"},{"line_number":3775,"context_line":"                                  volume_id, disk_bus\u003dNone, device_type\u003dNone):"},{"line_number":3776,"context_line":""},{"line_number":3777,"context_line":"        @utils.synchronized(instance[\u0027uuid\u0027])"},{"line_number":3778,"context_line":"        def do_reserve():"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F92%2Fo%3D","line":3775,"in_reply_to":"AAAAUH%2F9%2BAE%3D","updated":"2014-02-03 10:11:15.000000000","message":"Will add a comment","commit_id":"ac363e5ee05eef5f6f6d750030ab28cae05f9ca5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8f06a973635386c2cc2b812268fa6b8af67454e6","unresolved":false,"context_lines":[{"line_number":3822,"context_line":"        context \u003d context.elevated()"},{"line_number":3823,"context_line":"        LOG.audit(_(\u0027Attaching volume %(volume_id)s to %(mountpoint)s\u0027),"},{"line_number":3824,"context_line":"                  {\u0027volume_id\u0027: bdm.volume_id,"},{"line_number":3825,"context_line":"                  \u0027mountpoint\u0027: bdm[\u0027mount_device\u0027]},"},{"line_number":3826,"context_line":"                  context\u003dcontext, instance\u003dinstance)"},{"line_number":3827,"context_line":"        try:"},{"line_number":3828,"context_line":"            bdm.attach(context, instance, self.volume_api, self.driver,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F9Vmo%3D","line":3825,"updated":"2014-02-07 16:23:51.000000000","message":"Usually, if I\u0027m touching a line I will change it to attribute syntax, and definitely if I did the line above, but.. not a huge problem :)","commit_id":"a9244df655f164bbe04612dcb62af3f163c9d1b1"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8f06a973635386c2cc2b812268fa6b8af67454e6","unresolved":false,"context_lines":[{"line_number":3832,"context_line":"                LOG.exception(_(\"Failed to attach %(volume_id)s \""},{"line_number":3833,"context_line":"                                \"at %(mountpoint)s\"),"},{"line_number":3834,"context_line":"                              {\u0027volume_id\u0027: bdm.volume_id,"},{"line_number":3835,"context_line":"                               \u0027mountpoint\u0027: bdm[\u0027mount_device\u0027]},"},{"line_number":3836,"context_line":"                              context\u003dcontext, instance\u003dinstance)"},{"line_number":3837,"context_line":"                self.volume_api.unreserve_volume(context, bdm.volume_id)"},{"line_number":3838,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F9Vmk%3D","line":3835,"updated":"2014-02-07 16:23:51.000000000","message":"Same","commit_id":"a9244df655f164bbe04612dcb62af3f163c9d1b1"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f1e810d0762d0be44fa0837e891360b450f6b9ac","unresolved":false,"context_lines":[{"line_number":3821,"context_line":"    @wrap_instance_fault"},{"line_number":3822,"context_line":"    def reserve_block_device_name(self, context, instance, device,"},{"line_number":3823,"context_line":"                                  volume_id, disk_bus\u003dNone, device_type\u003dNone):"},{"line_number":3824,"context_line":"        # NOTE(ndipanov): disk_bus and device_type will be set to none if not"},{"line_number":3825,"context_line":"        # passed (by older clients) and defaulted by the virt driver. Remove"},{"line_number":3826,"context_line":"        # default values on the next major RPC version bump."},{"line_number":3827,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAUX%2F%2F18M%3D","line":3824,"updated":"2014-02-10 13:30:11.000000000","message":"none \u003d\u003e None","commit_id":"ed2db860889a078587aa2f07bcc708b71486c673"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"28013783a210a2ea602c7edb7283fec55aa6613d","unresolved":false,"context_lines":[{"line_number":3884,"context_line":""},{"line_number":3885,"context_line":"        info \u003d {\u0027volume_id\u0027: bdm.volume_id}"},{"line_number":3886,"context_line":"        self._notify_about_instance_usage("},{"line_number":3887,"context_line":"            context, instance, \"volume.attach\", extra_usage_info\u003dinfo)"},{"line_number":3888,"context_line":""},{"line_number":3889,"context_line":"    def _detach_volume(self, context, instance, bdm):"},{"line_number":3890,"context_line":"        \"\"\"Do the actual driver detach using block device mapping.\"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUX%2F%2B1tE%3D","line":3887,"updated":"2014-02-18 17:51:54.000000000","message":"Hmm, this means the notification will be different now, right? I know that\u0027s not a super stable interface, but we should try to avoid breaking it right? Can we get the info back from bdm.attach() to keep this whole? Or, could we move the notification into bdm.attach()?","commit_id":"927c1b7f3ed0dc1fb405e6cd75ec1b1a16141de4"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"9f67407891e6ecb07b9a2257e0a3949a42595997","unresolved":false,"context_lines":[{"line_number":3884,"context_line":""},{"line_number":3885,"context_line":"        info \u003d {\u0027volume_id\u0027: bdm.volume_id}"},{"line_number":3886,"context_line":"        self._notify_about_instance_usage("},{"line_number":3887,"context_line":"            context, instance, \"volume.attach\", extra_usage_info\u003dinfo)"},{"line_number":3888,"context_line":""},{"line_number":3889,"context_line":"    def _detach_volume(self, context, instance, bdm):"},{"line_number":3890,"context_line":"        \"\"\"Do the actual driver detach using block device mapping.\"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAUX%2F%2B1LQ%3D","line":3887,"in_reply_to":"AAAAUX%2F%2B1tE%3D","updated":"2014-02-18 18:38:06.000000000","message":"How is it different? I just moved the dict() call to {} literal","commit_id":"927c1b7f3ed0dc1fb405e6cd75ec1b1a16141de4"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c1cfdf8a3b09d23be8281be0cfeff5aea0e8d580","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        # version bump - they are not needed when using bdm objects."},{"line_number":302,"context_line":"        version \u003d \u00273.6\u0027"},{"line_number":303,"context_line":"        kw \u003d {\u0027instance\u0027: instance, \u0027volume_id\u0027: volume_id,"},{"line_number":304,"context_line":"              \u0027mountpoint\u0027: mountpoint, \u0027bdm\u0027: bdm}"},{"line_number":305,"context_line":"        if not self.client.can_send_version(version):"},{"line_number":306,"context_line":"            # NOTE(russellb) Havana compat"},{"line_number":307,"context_line":"            version \u003d self._get_compat_version(\u00273.0\u0027, \u00272.0\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FfQc%3D","line":304,"updated":"2014-01-13 11:59:48.000000000","message":"suggestion is to drop the bdm here and then have an else statement","commit_id":"f0a3fdd2ee0a4525262a5ba05e9ee04d5897ecd0"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"39d8e57bb349ba540510f75d8e8eeb0b8fbfdcf4","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        # version bump - they are not needed when using bdm objects."},{"line_number":302,"context_line":"        version \u003d \u00273.6\u0027"},{"line_number":303,"context_line":"        kw \u003d {\u0027instance\u0027: instance, \u0027volume_id\u0027: volume_id,"},{"line_number":304,"context_line":"              \u0027mountpoint\u0027: mountpoint, \u0027bdm\u0027: bdm}"},{"line_number":305,"context_line":"        if not self.client.can_send_version(version):"},{"line_number":306,"context_line":"            # NOTE(russellb) Havana compat"},{"line_number":307,"context_line":"            version \u003d self._get_compat_version(\u00273.0\u0027, \u00272.0\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FeIs%3D","line":304,"in_reply_to":"AAAAUH%2F%2FfQc%3D","updated":"2014-01-13 17:28:17.000000000","message":"I\u0027ve thought about this and I don\u0027t like it.\n\nThe way it is now - the code is structured in the following way that I think is very clean:\n\n* prepare to send the latest\n* downgrade to the version you can send if you need to\n\nSo if we introduce another change we will just add an if statement that will downgrade to the 3.6.\n\nIs there a reason why you think del is particularly the problem here?","commit_id":"f0a3fdd2ee0a4525262a5ba05e9ee04d5897ecd0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c1cfdf8a3b09d23be8281be0cfeff5aea0e8d580","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            version \u003d self._get_compat_version(\u00273.0\u0027, \u00272.0\u0027)"},{"line_number":308,"context_line":"            kw[\u0027instance\u0027] \u003d jsonutils.to_primitive("},{"line_number":309,"context_line":"                    objects_base.obj_to_primitive(instance))"},{"line_number":310,"context_line":"            del kw[\u0027bdm\u0027]"},{"line_number":311,"context_line":"        cctxt \u003d self.client.prepare(server\u003d_compute_host(None, instance),"},{"line_number":312,"context_line":"                version\u003dversion)"},{"line_number":313,"context_line":"        cctxt.cast(ctxt, \u0027attach_volume\u0027, **kw)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FfQU%3D","line":310,"updated":"2014-01-13 11:59:48.000000000","message":"why not else:\n    kw[\u0027bdm\u0027 \u003d bdm","commit_id":"f0a3fdd2ee0a4525262a5ba05e9ee04d5897ecd0"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"39d8e57bb349ba540510f75d8e8eeb0b8fbfdcf4","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            version \u003d self._get_compat_version(\u00273.0\u0027, \u00272.0\u0027)"},{"line_number":308,"context_line":"            kw[\u0027instance\u0027] \u003d jsonutils.to_primitive("},{"line_number":309,"context_line":"                    objects_base.obj_to_primitive(instance))"},{"line_number":310,"context_line":"            del kw[\u0027bdm\u0027]"},{"line_number":311,"context_line":"        cctxt \u003d self.client.prepare(server\u003d_compute_host(None, instance),"},{"line_number":312,"context_line":"                version\u003dversion)"},{"line_number":313,"context_line":"        cctxt.cast(ctxt, \u0027attach_volume\u0027, **kw)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FeIk%3D","line":310,"in_reply_to":"AAAAUH%2F%2FfQU%3D","updated":"2014-01-13 17:28:17.000000000","message":"see above","commit_id":"f0a3fdd2ee0a4525262a5ba05e9ee04d5897ecd0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c1cfdf8a3b09d23be8281be0cfeff5aea0e8d580","unresolved":false,"context_lines":[{"line_number":751,"context_line":"            version \u003d self._get_compat_version(\u00273.0\u0027, \u00272.3\u0027)"},{"line_number":752,"context_line":"            kw[\u0027instance\u0027] \u003d jsonutils.to_primitive("},{"line_number":753,"context_line":"                    objects_base.obj_to_primitive(instance))"},{"line_number":754,"context_line":"            del kw[\u0027disk_bus\u0027]"},{"line_number":755,"context_line":"            del kw[\u0027device_type\u0027]"},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"        cctxt \u003d self.client.prepare(server\u003d_compute_host(None, instance),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FfQM%3D","line":754,"updated":"2014-01-13 11:59:48.000000000","message":"can you do an else statement and then save the del\u0027s here - similar to above","commit_id":"f0a3fdd2ee0a4525262a5ba05e9ee04d5897ecd0"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"39d8e57bb349ba540510f75d8e8eeb0b8fbfdcf4","unresolved":false,"context_lines":[{"line_number":751,"context_line":"            version \u003d self._get_compat_version(\u00273.0\u0027, \u00272.3\u0027)"},{"line_number":752,"context_line":"            kw[\u0027instance\u0027] \u003d jsonutils.to_primitive("},{"line_number":753,"context_line":"                    objects_base.obj_to_primitive(instance))"},{"line_number":754,"context_line":"            del kw[\u0027disk_bus\u0027]"},{"line_number":755,"context_line":"            del kw[\u0027device_type\u0027]"},{"line_number":756,"context_line":""},{"line_number":757,"context_line":"        cctxt \u003d self.client.prepare(server\u003d_compute_host(None, instance),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FeIc%3D","line":754,"in_reply_to":"AAAAUH%2F%2FfQM%3D","updated":"2014-01-13 17:28:17.000000000","message":"see above","commit_id":"f0a3fdd2ee0a4525262a5ba05e9ee04d5897ecd0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ad55c4154c1abe823fce6eb7befe0f718f200e17","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            version \u003d self._get_compat_version(\u00273.0\u0027, \u00272.0\u0027)"},{"line_number":308,"context_line":"            kw[\u0027instance\u0027] \u003d jsonutils.to_primitive("},{"line_number":309,"context_line":"                    objects_base.obj_to_primitive(instance))"},{"line_number":310,"context_line":"            del kw[\u0027bdm\u0027]"},{"line_number":311,"context_line":"        cctxt \u003d self.client.prepare(server\u003d_compute_host(None, instance),"},{"line_number":312,"context_line":"                version\u003dversion)"},{"line_number":313,"context_line":"        cctxt.cast(ctxt, \u0027attach_volume\u0027, **kw)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FTqY%3D","line":310,"updated":"2014-01-15 08:13:17.000000000","message":"read your previous comments about the del. they address my concerns. thanks","commit_id":"6142dd79ad8e3638eb993303d572bc738adcf692"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a62101121dbe682ef0ad5ae5b4e3141dc5fb6ed7","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        3.5 - Pass preserve_ephemeral flag to rebuild_instance()"},{"line_number":222,"context_line":"        3.6 - Make volume_snapshot_{create,delete} use new-world objects"},{"line_number":223,"context_line":"        3.7 - Update change_instance_metadata() to take an instance object"},{"line_number":224,"context_line":"        3.8 - Make reserve_block_device_name and attach_volume use new-world"},{"line_number":225,"context_line":"              objects, and add disk_bus and device_type params to"},{"line_number":226,"context_line":"              reserve_block_device_name, and bdm param to attach_volume"},{"line_number":227,"context_line":"    \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUX%2F%2F3Ow%3D","line":224,"updated":"2014-02-10 10:23:44.000000000","message":"this needs to be updated","commit_id":"a9244df655f164bbe04612dcb62af3f163c9d1b1"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c6b739f90626691a73a90b9e532d457f190caa55","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        3.15 - Make reserve_block_device_name and attach_volume use new-world"},{"line_number":232,"context_line":"              objects, and add disk_bus and device_type params to"},{"line_number":233,"context_line":"              reserve_block_device_name, and bdm param to attach_volume"},{"line_number":234,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e Make volume attach use objects"},{"line_number":235,"context_line":"    \u0027\u0027\u0027"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    VERSION_ALIASES \u003d {"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAUX%2F%2BkZ0%3D","line":234,"updated":"2014-02-20 13:25:56.000000000","message":"looks like a merge issue","commit_id":"a1dbe560639c25cd84c651fb5ce9396a9a3ede05"}],"nova/tests/compute/test_compute.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"44716faf968d9114207ab123a5139f01f7e4e584","unresolved":false,"context_lines":[{"line_number":389,"context_line":"        ) as mock_get_vol_enc:"},{"line_number":390,"context_line":"            instance \u003d self._create_fake_instance()"},{"line_number":391,"context_line":"            self.compute.attach_volume(self.context, self.volume_id,"},{"line_number":392,"context_line":"                                       \u0027/dev/vdb\u0027, instance, bdm\u003dfake_bdm)"},{"line_number":393,"context_line":"            self.assertEqual(self.cinfo.get(\u0027serial\u0027), self.volume_id)"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"    def test_await_block_device_created_to_slow(self):"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FqI4%3D","line":392,"updated":"2014-02-11 17:42:47.000000000","message":"should be a test for when bdm \u003d None\nAlso when attach() generates an exception, that unreserve() is called.","commit_id":"f986b726cb8f64d1ef043d4f9bffa45b55ef819d"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"a9b0919c6db1c6dac16431e1637dfd345ecba5db","unresolved":false,"context_lines":[{"line_number":389,"context_line":"        ) as mock_get_vol_enc:"},{"line_number":390,"context_line":"            instance \u003d self._create_fake_instance()"},{"line_number":391,"context_line":"            self.compute.attach_volume(self.context, self.volume_id,"},{"line_number":392,"context_line":"                                       \u0027/dev/vdb\u0027, instance, bdm\u003dfake_bdm)"},{"line_number":393,"context_line":"            self.assertEqual(self.cinfo.get(\u0027serial\u0027), self.volume_id)"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"    def test_await_block_device_created_to_slow(self):"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fp2w%3D","line":392,"in_reply_to":"AAAAUX%2F%2FqI4%3D","updated":"2014-02-11 18:19:51.000000000","message":"We probably should :) Will add it","commit_id":"f986b726cb8f64d1ef043d4f9bffa45b55ef819d"}]}
