)]}'
{"nova/cells/rpcapi.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fdf9f4795cddd1719a050fc383fa69dce23e66a1","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        * 1.28 - Make bdm_update_or_create_at_top and use bdm objects"},{"line_number":99,"context_line":"        * 1.29 - build_instances uses BlockDeviceMapping objects, drops"},{"line_number":100,"context_line":"               legacy_bdm argument"},{"line_number":101,"context_line":"    \u0027\u0027\u0027"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    VERSION_ALIASES \u003d {"}],"source_content_type":"text/x-python","patch_set":18,"id":"7ac7a964_2f8444d3","line":100,"range":{"start_line":100,"start_character":15,"end_line":100,"end_character":17},"updated":"2014-08-14 23:21:00.000000000","message":"I think you need an extra two spaces here.","commit_id":"301ab3e28247a3c8bf8024d97b6b8af28bc96dd0"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"59d67845f57c571d309cf183bc61f9adafbc0fa8","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        build_inst_kwargs[\u0027image\u0027] \u003d jsonutils.to_primitive("},{"line_number":157,"context_line":"                build_inst_kwargs[\u0027image\u0027])"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        version \u003d \u00271.33\u0027"},{"line_number":160,"context_line":"        if self.client.can_send_version(\u00271.33\u0027):"},{"line_number":161,"context_line":"            build_inst_kwargs.pop(\u0027legacy_bdm\u0027, None)"},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa81d914_1cc0a27b","line":159,"updated":"2015-01-28 23:53:44.000000000","message":"This should be 1.34 now.","commit_id":"bc20f691de5d3b35a607be11b633e41925249528"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"c5125a2d2dfbb2387ede7cf5b2f47672d9c397b8","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        build_inst_kwargs[\u0027image\u0027] \u003d jsonutils.to_primitive("},{"line_number":157,"context_line":"                build_inst_kwargs[\u0027image\u0027])"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        version \u003d \u00271.33\u0027"},{"line_number":160,"context_line":"        if self.client.can_send_version(\u00271.33\u0027):"},{"line_number":161,"context_line":"            build_inst_kwargs.pop(\u0027legacy_bdm\u0027, None)"},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa81d914_157bd37b","line":159,"in_reply_to":"fa81d914_1cc0a27b","updated":"2015-01-30 10:47:54.000000000","message":"Done","commit_id":"bc20f691de5d3b35a607be11b633e41925249528"},{"author":{"_account_id":642,"name":"Matt Dietz","email":"matthew.dietz@gmail.com","username":"cerberus"},"change_message_id":"c059ea1a409d0d850a79068f543ddf040979b87c","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        if self.client.can_send_version(\u00271.34\u0027):"},{"line_number":161,"context_line":"            build_inst_kwargs.pop(\u0027legacy_bdm\u0027, None)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        if not self.client.can_send_version(\u00271.34\u0027):"},{"line_number":164,"context_line":"            bdm_p \u003d objects_base.obj_to_primitive("},{"line_number":165,"context_line":"                    build_inst_kwargs[\u0027block_device_mapping\u0027])"},{"line_number":166,"context_line":"            build_inst_kwargs[\u0027block_device_mapping\u0027] \u003d bdm_p"}],"source_content_type":"text/x-python","patch_set":24,"id":"da86d52c_fba7fb4d","line":163,"updated":"2015-02-04 16:24:46.000000000","message":"Why not just make this an else?","commit_id":"0525e2bef7ae517ef3ea4a917c10d617592ca452"}],"nova/compute/api.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"fd15e318994e66080091a7c0d87659334a35904a","unresolved":false,"context_lines":[{"line_number":910,"context_line":"        try:"},{"line_number":911,"context_line":"            for i in xrange(num_instances):"},{"line_number":912,"context_line":"                instance \u003d objects.Instance(context\u003dcontext)"},{"line_number":913,"context_line":"                instance.update(base_options)"},{"line_number":914,"context_line":"                instance \u003d self.create_db_entry_for_new_instance("},{"line_number":915,"context_line":"                        context, instance_type, boot_meta, instance,"},{"line_number":916,"context_line":"                        security_groups, block_device_mapping,"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_58b9602d","line":913,"updated":"2015-02-02 13:39:24.000000000","message":"Here!","commit_id":"df312d85c10817ab6ebf9a3a22de7801e3983446"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"97942bdcc46d57b821878e60ee44eac9a4f36aa8","unresolved":false,"context_lines":[{"line_number":1189,"context_line":"        \"\"\"Create the BlockDeviceMapping objects in the db."},{"line_number":1190,"context_line":""},{"line_number":1191,"context_line":"        This method makes a copy of the list in order to avoid using the same"},{"line_number":1192,"context_line":"        id field in case this is called for multiple instances."},{"line_number":1193,"context_line":"        \"\"\""},{"line_number":1194,"context_line":"        LOG.debug(\"block_device_mapping %s\", block_device_mapping,"},{"line_number":1195,"context_line":"                  instance_uuid\u003dinstance_uuid)"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_121a8d6e","line":1192,"updated":"2015-01-31 00:19:05.000000000","message":"The need to do a copy.deepcopy() here is extremely confusing. Why would be calling this method more than once with the exact same arguments?","commit_id":"df312d85c10817ab6ebf9a3a22de7801e3983446"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"fd15e318994e66080091a7c0d87659334a35904a","unresolved":false,"context_lines":[{"line_number":1189,"context_line":"        \"\"\"Create the BlockDeviceMapping objects in the db."},{"line_number":1190,"context_line":""},{"line_number":1191,"context_line":"        This method makes a copy of the list in order to avoid using the same"},{"line_number":1192,"context_line":"        id field in case this is called for multiple instances."},{"line_number":1193,"context_line":"        \"\"\""},{"line_number":1194,"context_line":"        LOG.debug(\"block_device_mapping %s\", block_device_mapping,"},{"line_number":1195,"context_line":"                  instance_uuid\u003dinstance_uuid)"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_38acaced","line":1192,"in_reply_to":"da86d52c_121a8d6e","updated":"2015-02-02 13:39:24.000000000","message":"Yes - this is due to the fact that if we happen to be handling the request to boot up more than one of the same instances, create_db_entry_for_new_instance which calls this method is called in a for loop (see above).\n\nNow that we are using objects - we really need to make a copy before the Id\u0027s are set.","commit_id":"df312d85c10817ab6ebf9a3a22de7801e3983446"}],"nova/compute/cells_api.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"a63d839b48b42ecd1e685d886e369132dc225960","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    def _create_block_device_mapping(self, *args, **kwargs):"},{"line_number":197,"context_line":"        \"\"\"Don\u0027t create block device mappings in the API cell."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        Once the create gets to the child cell, it will call on to parent cell"},{"line_number":200,"context_line":"        to create it."},{"line_number":201,"context_line":"        \"\"\""},{"line_number":202,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa81d914_5c1cdac1","line":199,"updated":"2015-01-29 00:06:41.000000000","message":"It might be more clear to say that the child cell will create it and propagate it up to the parent cell.","commit_id":"bc20f691de5d3b35a607be11b633e41925249528"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"c5125a2d2dfbb2387ede7cf5b2f47672d9c397b8","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    def _create_block_device_mapping(self, *args, **kwargs):"},{"line_number":197,"context_line":"        \"\"\"Don\u0027t create block device mappings in the API cell."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        Once the create gets to the child cell, it will call on to parent cell"},{"line_number":200,"context_line":"        to create it."},{"line_number":201,"context_line":"        \"\"\""},{"line_number":202,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa81d914_7567afe9","line":199,"in_reply_to":"fa81d914_5c1cdac1","updated":"2015-01-30 10:47:54.000000000","message":"Done","commit_id":"bc20f691de5d3b35a607be11b633e41925249528"}],"nova/conductor/rpcapi.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fdf9f4795cddd1719a050fc383fa69dce23e66a1","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        else:"},{"line_number":411,"context_line":"            version \u003d \u00271.5\u0027"},{"line_number":412,"context_line":"            bdm_p \u003d objects_base.obj_to_primitive(block_device_mapping)"},{"line_number":413,"context_line":"            kw.update({\u0027block_device_mapping\u0027: bdm_p,"},{"line_number":414,"context_line":"                       \u0027legacy_bdm\u0027: legacy_bdm})"},{"line_number":415,"context_line":"        cctxt \u003d self.client.prepare(version\u003dversion)"},{"line_number":416,"context_line":"        cctxt.cast(context, \u0027build_instances\u0027, **kw)"}],"source_content_type":"text/x-python","patch_set":18,"id":"7ac7a964_7241c338","line":413,"updated":"2014-08-14 23:21:00.000000000","message":"Hmm, doesn\u0027t this imply that we need a version bump for this API above 1.7 now that we\u0027ve got an object in block_device_mapping and would (apparently) send it as a 1.7 message to the conductor?","commit_id":"301ab3e28247a3c8bf8024d97b6b8af28bc96dd0"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"c60a44c8b47bad27a0ec8cc3817648d486219bd1","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        else:"},{"line_number":411,"context_line":"            version \u003d \u00271.5\u0027"},{"line_number":412,"context_line":"            bdm_p \u003d objects_base.obj_to_primitive(block_device_mapping)"},{"line_number":413,"context_line":"            kw.update({\u0027block_device_mapping\u0027: bdm_p,"},{"line_number":414,"context_line":"                       \u0027legacy_bdm\u0027: legacy_bdm})"},{"line_number":415,"context_line":"        cctxt \u003d self.client.prepare(version\u003dversion)"},{"line_number":416,"context_line":"        cctxt.cast(context, \u0027build_instances\u0027, **kw)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_fa122161","line":413,"in_reply_to":"7ac7a964_7241c338","updated":"2014-08-18 14:53:08.000000000","message":"So 1.7 is - no block_device_mapping whatsoever! Nada! 1.5 is - bdm in it\u0027s previous ugly dict form which we still have to maintain so now that we are getting objects in - we need to dictify them.","commit_id":"301ab3e28247a3c8bf8024d97b6b8af28bc96dd0"}],"nova/objects/block_device.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"31bdbb3f7f217d5f17962c8d462c2e7965b34cab","unresolved":false,"context_lines":[{"line_number":298,"context_line":"                              **extra_args)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"def block_device_make_list_from_dicts(context, bdm_dicts_list):"},{"line_number":302,"context_line":"    bdm_objects \u003d [objects.BlockDeviceMapping(context\u003dcontext, **bdm)"},{"line_number":303,"context_line":"                   for bdm in bdm_dicts_list]"},{"line_number":304,"context_line":"    return BlockDeviceMappingList(objects\u003dbdm_objects)"}],"source_content_type":"text/x-python","patch_set":27,"id":"da86d52c_f3f589ed","line":301,"updated":"2015-02-17 17:35:47.000000000","message":"I don\u0027t see a test for this, but it\u0027s pretty simple and this patch has been conflict-happy for a while. I\u0027m going to say we should just tack one on top to avoid delaying this further.","commit_id":"220ba7dbbcb6c12cd0942e9549766953566ece49"}],"nova/tests/api/openstack/compute/test_servers.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fdf9f4795cddd1719a050fc383fa69dce23e66a1","unresolved":false,"context_lines":[{"line_number":2636,"context_line":"            \u0027status\u0027: \u0027active\u0027,"},{"line_number":2637,"context_line":"            \u0027device_name\u0027: \u0027vda\u0027,"},{"line_number":2638,"context_line":"            \u0027delete_on_termination\u0027: False,"},{"line_number":2639,"context_line":"        }]"},{"line_number":2640,"context_line":"        volume \u003d {\u0027id\u0027: 1,"},{"line_number":2641,"context_line":"                   \u0027volume_image_metadata\u0027: {\u0027test_key\u0027: \u0027test_value\u0027}"},{"line_number":2642,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":18,"id":"7ac7a964_b2343bdf","line":2639,"updated":"2014-08-14 23:21:00.000000000","message":"Should we be passing in an object now?","commit_id":"301ab3e28247a3c8bf8024d97b6b8af28bc96dd0"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"c60a44c8b47bad27a0ec8cc3817648d486219bd1","unresolved":false,"context_lines":[{"line_number":2636,"context_line":"            \u0027status\u0027: \u0027active\u0027,"},{"line_number":2637,"context_line":"            \u0027device_name\u0027: \u0027vda\u0027,"},{"line_number":2638,"context_line":"            \u0027delete_on_termination\u0027: False,"},{"line_number":2639,"context_line":"        }]"},{"line_number":2640,"context_line":"        volume \u003d {\u0027id\u0027: 1,"},{"line_number":2641,"context_line":"                   \u0027volume_image_metadata\u0027: {\u0027test_key\u0027: \u0027test_value\u0027}"},{"line_number":2642,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_fdca1ba0","line":2639,"in_reply_to":"7ac7a964_b2343bdf","updated":"2014-08-18 14:53:08.000000000","message":"Erm not really - we still get the dicts from the API controller which is what this thing tests I believe.","commit_id":"301ab3e28247a3c8bf8024d97b6b8af28bc96dd0"}],"nova/tests/unit/cells/test_cells_rpcapi.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"a63d839b48b42ecd1e685d886e369132dc225960","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                                               \u0027arg2\u0027: 2,"},{"line_number":140,"context_line":"                                               \u0027arg3\u0027: 3}}"},{"line_number":141,"context_line":"        self._check_result(call_info, \u0027build_instances\u0027,"},{"line_number":142,"context_line":"                expected_args, version\u003d\u00271.33\u0027)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def test_get_capacities(self):"},{"line_number":145,"context_line":"        capacity_info \u003d {\"capacity\": \"info\"}"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa81d914_dc87ead5","line":142,"updated":"2015-01-29 00:06:41.000000000","message":"1.34","commit_id":"bc20f691de5d3b35a607be11b633e41925249528"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"c5125a2d2dfbb2387ede7cf5b2f47672d9c397b8","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                                               \u0027arg2\u0027: 2,"},{"line_number":140,"context_line":"                                               \u0027arg3\u0027: 3}}"},{"line_number":141,"context_line":"        self._check_result(call_info, \u0027build_instances\u0027,"},{"line_number":142,"context_line":"                expected_args, version\u003d\u00271.33\u0027)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def test_get_capacities(self):"},{"line_number":145,"context_line":"        capacity_info \u003d {\"capacity\": \"info\"}"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa81d914_55b1cb45","line":142,"in_reply_to":"fa81d914_dc87ead5","updated":"2015-01-30 10:47:54.000000000","message":"Done","commit_id":"bc20f691de5d3b35a607be11b633e41925249528"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"97942bdcc46d57b821878e60ee44eac9a4f36aa8","unresolved":false,"context_lines":[{"line_number":899,"context_line":"        instance \u003d self._create_fake_instance_obj()"},{"line_number":900,"context_line":"        instance_type \u003d {\u0027swap\u0027: 1, \u0027ephemeral_gb\u0027: 2}"},{"line_number":901,"context_line":"        mappings \u003d ["},{"line_number":902,"context_line":"            fake_block_device.FakeDbBlockDeviceDict({"},{"line_number":903,"context_line":"                \u0027device_name\u0027: \u0027/dev/sdb4\u0027,"},{"line_number":904,"context_line":"                \u0027source_type\u0027: \u0027blank\u0027,"},{"line_number":905,"context_line":"                \u0027destination_type\u0027: \u0027local\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_d247151c","line":902,"updated":"2015-01-31 00:19:05.000000000","message":"Why do we need a FakeDbBlockDevice here, if this represents the things coming back from the database?","commit_id":"df312d85c10817ab6ebf9a3a22de7801e3983446"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"fd15e318994e66080091a7c0d87659334a35904a","unresolved":false,"context_lines":[{"line_number":899,"context_line":"        instance \u003d self._create_fake_instance_obj()"},{"line_number":900,"context_line":"        instance_type \u003d {\u0027swap\u0027: 1, \u0027ephemeral_gb\u0027: 2}"},{"line_number":901,"context_line":"        mappings \u003d ["},{"line_number":902,"context_line":"            fake_block_device.FakeDbBlockDeviceDict({"},{"line_number":903,"context_line":"                \u0027device_name\u0027: \u0027/dev/sdb4\u0027,"},{"line_number":904,"context_line":"                \u0027source_type\u0027: \u0027blank\u0027,"},{"line_number":905,"context_line":"                \u0027destination_type\u0027: \u0027local\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_d841d00c","line":902,"in_reply_to":"da86d52c_d247151c","updated":"2015-02-02 13:39:24.000000000","message":"This class is used to auto fill the stuff that need to be there so that object does not cause a \"load in the base class\" exception, but you don\u0027t really want to be filling in by hand every time you write a dummy value for the test.","commit_id":"df312d85c10817ab6ebf9a3a22de7801e3983446"}]}
