)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"f52a25b930322368773d5ff84a71c0dfca2ee9f3","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The current implemention for livirt live migration CPU check compares"},{"line_number":10,"context_line":"both source and destination node physical CPU which is too strict,"},{"line_number":11,"context_line":"acutally the correct way is to compare the instance to be migrated"},{"line_number":12,"context_line":"and destination node CPU. This patch add a rpcapi get_instance_cpu_config"},{"line_number":13,"context_line":"to get the instance XML configuration."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAATn%2F%2Bn94%3D","line":11,"updated":"2013-11-22 09:59:49.000000000","message":"Opps, typo here.  s/acutally/actually/","commit_id":"52c34d286d2ecba4d794833ea211524fb94e936e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f09d2590299dfad3598b85c3a0a731ada3288c05","unresolved":false,"context_lines":[{"line_number":13,"context_line":"host features.  The correct approach is to compare against"},{"line_number":14,"context_line":"the guest\u0027s configured CPU model."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"To achieve this is it neccessary to introduce a new virt"},{"line_number":17,"context_line":"driver method to query a guest\u0027s CPU model. For this API"},{"line_number":18,"context_line":"we define a simple class to represent the CPU model that"},{"line_number":19,"context_line":"is currently able to support the three different ways that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"da9df570_290eafe5","line":16,"updated":"2014-09-25 21:29:01.000000000","message":"s/neccessary/necessary","commit_id":"c1df65f9bc924ee7a81fedf7b41bfba383c6379a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f09d2590299dfad3598b85c3a0a731ada3288c05","unresolved":false,"context_lines":[{"line_number":21,"context_line":"drivers can use this same class, or extend it to add new"},{"line_number":22,"context_line":"ways to represent the CPU model if needed."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"To allow guests to migrate from new hosts to old hosts,"},{"line_number":25,"context_line":"the new host must still report the \u0027cpu_info\u0027 data against"},{"line_number":26,"context_line":"the host service record. To allow guests to migrate from"},{"line_number":27,"context_line":"old hosts to new hosts, the new host must fallback to using"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"da9df570_4913f30c","line":24,"updated":"2014-09-25 21:29:01.000000000","message":"It might be worth rewording \"new hosts\" and \"old hosts\" in this paragraph to \"hosts with newer CPU models\" and \"hosts with older CPU models\", to make it clearer what \"new\" really means here...","commit_id":"c1df65f9bc924ee7a81fedf7b41bfba383c6379a"}],"nova/compute/manager.py":[{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"ba6f6c03b935da739bd3f6b86659a33680147414","unresolved":false,"context_lines":[{"line_number":3940,"context_line":"        :returns: a dict containing migration info"},{"line_number":3941,"context_line":"        \"\"\""},{"line_number":3942,"context_line":"        src_guest_cpu_info \u003d None"},{"line_number":3943,"context_line":"        if CONF.compute_driver \u003d\u003d \u0027libvirt.LibvirtDriver\u0027:"},{"line_number":3944,"context_line":"            src_guest_cpu_info \u003d self.compute_rpcapi.get_instance_config(ctxt,"},{"line_number":3945,"context_line":"                    instance)"},{"line_number":3946,"context_line":"        src_compute_info[\u0027guest_cpu_info\u0027] \u003d src_guest_cpu_info"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F77g%3D","line":3943,"updated":"2013-10-24 22:51:04.000000000","message":"IMHO, add some virt driver specific code seems not so clean. \n\nIf this changes is only for libvirt, why don\u0027t have libvirt to get the instance cpu config and compare it? Thus you don\u0027t need change the rpcapi and this common code.","commit_id":"fa581c790175d88b1efd2126f0b68e39aee8a033"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ea41739501c9e748c8a229f2c8d7a7cc1c114dea","unresolved":false,"context_lines":[{"line_number":3940,"context_line":"        :returns: a dict containing migration info"},{"line_number":3941,"context_line":"        \"\"\""},{"line_number":3942,"context_line":"        src_guest_cpu_info \u003d None"},{"line_number":3943,"context_line":"        if CONF.compute_driver \u003d\u003d \u0027libvirt.LibvirtDriver\u0027:"},{"line_number":3944,"context_line":"            src_guest_cpu_info \u003d self.compute_rpcapi.get_instance_config(ctxt,"},{"line_number":3945,"context_line":"                    instance)"},{"line_number":3946,"context_line":"        src_compute_info[\u0027guest_cpu_info\u0027] \u003d src_guest_cpu_info"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F73s%3D","line":3943,"in_reply_to":"AAAATn%2F%2F74U%3D","updated":"2013-10-24 23:30:57.000000000","message":"Well, I don\u0027t get it from reading the bug, so could you please explain it?","commit_id":"fa581c790175d88b1efd2126f0b68e39aee8a033"},{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"b4c16760323ed4694f24bc68b16a7a065dfbcbf7","unresolved":false,"context_lines":[{"line_number":3940,"context_line":"        :returns: a dict containing migration info"},{"line_number":3941,"context_line":"        \"\"\""},{"line_number":3942,"context_line":"        src_guest_cpu_info \u003d None"},{"line_number":3943,"context_line":"        if CONF.compute_driver \u003d\u003d \u0027libvirt.LibvirtDriver\u0027:"},{"line_number":3944,"context_line":"            src_guest_cpu_info \u003d self.compute_rpcapi.get_instance_config(ctxt,"},{"line_number":3945,"context_line":"                    instance)"},{"line_number":3946,"context_line":"        src_compute_info[\u0027guest_cpu_info\u0027] \u003d src_guest_cpu_info"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F74U%3D","line":3943,"in_reply_to":"AAAATn%2F%2F77g%3D","updated":"2013-10-24 23:19:46.000000000","message":"Please reread the bug description.","commit_id":"fa581c790175d88b1efd2126f0b68e39aee8a033"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ea41739501c9e748c8a229f2c8d7a7cc1c114dea","unresolved":false,"context_lines":[{"line_number":3944,"context_line":"            src_guest_cpu_info \u003d self.compute_rpcapi.get_instance_config(ctxt,"},{"line_number":3945,"context_line":"                    instance)"},{"line_number":3946,"context_line":"        src_compute_info[\u0027guest_cpu_info\u0027] \u003d src_guest_cpu_info"},{"line_number":3947,"context_line":"        src_compute_info \u003d self._get_compute_info(ctxt, instance.host)"},{"line_number":3948,"context_line":"        dst_compute_info \u003d self._get_compute_info(ctxt, CONF.host)"},{"line_number":3949,"context_line":"        dest_check_data \u003d self.driver.check_can_live_migrate_destination(ctxt,"},{"line_number":3950,"context_line":"            instance, src_compute_info, dst_compute_info,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F73k%3D","line":3947,"updated":"2013-10-24 23:30:57.000000000","message":"Hmm, you set some element of this on the line above and then completely replace it here. What am I missing?","commit_id":"fa581c790175d88b1efd2126f0b68e39aee8a033"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"ff6e39fe9074b17716bc08ee80caf2d662ff5398","unresolved":false,"context_lines":[{"line_number":4082,"context_line":"        guest_cpu_info \u003d {}"},{"line_number":4083,"context_line":"        if CONF.compute_driver \u003d\u003d \u0027libvirt.LibvirtDriver\u0027:"},{"line_number":4084,"context_line":"            guest_cpu_info \u003d self.compute_rpcapi.get_instance_cpu_config("},{"line_number":4085,"context_line":"                ctxt, instance)"},{"line_number":4086,"context_line":"        src_compute_info \u003d self._get_compute_info(ctxt, instance.host)"},{"line_number":4087,"context_line":"        src_compute_info[\u0027guest_cpu_info\u0027] \u003d guest_cpu_info.get(\u0027cpu_model\u0027)"},{"line_number":4088,"context_line":"        dst_compute_info \u003d self._get_compute_info(ctxt, CONF.host)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2B00A%3D","line":4085,"updated":"2013-11-19 17:15:13.000000000","message":"Why do we need this hack here to check if the driver is libvirt? Will it be possible to have generic driver return {} why libvirt return meaningful value?","commit_id":"e93c84de9eb64d4c51174c0297606528d4737c7d"},{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"634f9fbaaaa947e7b05d2b722e1c4bc8487a4d6d","unresolved":false,"context_lines":[{"line_number":4082,"context_line":"        guest_cpu_info \u003d {}"},{"line_number":4083,"context_line":"        if CONF.compute_driver \u003d\u003d \u0027libvirt.LibvirtDriver\u0027:"},{"line_number":4084,"context_line":"            guest_cpu_info \u003d self.compute_rpcapi.get_instance_cpu_config("},{"line_number":4085,"context_line":"                ctxt, instance)"},{"line_number":4086,"context_line":"        src_compute_info \u003d self._get_compute_info(ctxt, instance.host)"},{"line_number":4087,"context_line":"        src_compute_info[\u0027guest_cpu_info\u0027] \u003d guest_cpu_info.get(\u0027cpu_model\u0027)"},{"line_number":4088,"context_line":"        dst_compute_info \u003d self._get_compute_info(ctxt, CONF.host)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2By7U%3D","line":4085,"in_reply_to":"AAAATn%2F%2B00A%3D","updated":"2013-11-20 03:29:39.000000000","message":"compare_cpu is a libvirt live migration pre check method. it\u0027s hypervisor specific, so I don\u0027t think it makes any sense to make it a generic driver method. imagine you are in a multiple hypervisor environment.  only kvm based nodes driver offer guest cpu xml info.","commit_id":"e93c84de9eb64d4c51174c0297606528d4737c7d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d9e550ad7602dd87f3cf2ef572e2aaea1fa57be9","unresolved":false,"context_lines":[{"line_number":4177,"context_line":""},{"line_number":4178,"context_line":"        return pre_live_migration_data"},{"line_number":4179,"context_line":""},{"line_number":4180,"context_line":"    def get_instance_cpu_config(self, context, instance):"},{"line_number":4181,"context_line":"        \"\"\"Get instance CPU xml configuration.\"\"\""},{"line_number":4182,"context_line":"        cpu_xml \u003d None"},{"line_number":4183,"context_line":"        if CONF.compute_driver \u003d\u003d \u0027libvirt.LibvirtDriver\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F%2Bnq4%3D","line":4180,"updated":"2013-11-22 11:22:18.000000000","message":"i am concerned about having driver specifics here. is there no way that we can add in a new driver method? the default should just return None?\n\nMaybe this requires a little additional discussion","commit_id":"85af4ffd4cd248f55ae10142985f21a63dd2571f"},{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"0ee4bea850883949267d9c8cb5ba5cf41667c9e1","unresolved":false,"context_lines":[{"line_number":4177,"context_line":""},{"line_number":4178,"context_line":"        return pre_live_migration_data"},{"line_number":4179,"context_line":""},{"line_number":4180,"context_line":"    def get_instance_cpu_config(self, context, instance):"},{"line_number":4181,"context_line":"        \"\"\"Get instance CPU xml configuration.\"\"\""},{"line_number":4182,"context_line":"        cpu_xml \u003d None"},{"line_number":4183,"context_line":"        if CONF.compute_driver \u003d\u003d \u0027libvirt.LibvirtDriver\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F%2Bi0s%3D","line":4180,"in_reply_to":"AAAATn%2F%2Bnq4%3D","updated":"2013-11-24 15:19:14.000000000","message":"of course we can do that, if it makes sense to add a  method for a specified driver","commit_id":"85af4ffd4cd248f55ae10142985f21a63dd2571f"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"15040fcdd11c6ecd7e592ea96b526eaad52d2880","unresolved":false,"context_lines":[{"line_number":4169,"context_line":"        \"\"\"Get instance CPU xml configuration.\"\"\""},{"line_number":4170,"context_line":"        cpu_xml \u003d self.driver.get_instance_cpu_config(context,"},{"line_number":4171,"context_line":"                                                      instance)"},{"line_number":4172,"context_line":"        return {\u0027cpu_model\u0027: cpu_xml}"},{"line_number":4173,"context_line":""},{"line_number":4174,"context_line":"    @wrap_exception()"},{"line_number":4175,"context_line":"    def live_migration(self, context, dest, instance,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2BgVI%3D","line":4172,"updated":"2013-11-25 11:57:16.000000000","message":"s/cpu_xml/cpu_str/ - do not assume it is XML format - only libvirt will do that. It is just an opaque string.","commit_id":"7a10005e3c126f15a9a64bbaf5646a5804ed1003"},{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"3090ebb9ae76685ec170a8b35d5b594bb315d0a5","unresolved":false,"context_lines":[{"line_number":4169,"context_line":"        \"\"\"Get instance CPU xml configuration.\"\"\""},{"line_number":4170,"context_line":"        cpu_xml \u003d self.driver.get_instance_cpu_config(context,"},{"line_number":4171,"context_line":"                                                      instance)"},{"line_number":4172,"context_line":"        return {\u0027cpu_model\u0027: cpu_xml}"},{"line_number":4173,"context_line":""},{"line_number":4174,"context_line":"    @wrap_exception()"},{"line_number":4175,"context_line":"    def live_migration(self, context, dest, instance,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2BgGE%3D","line":4172,"in_reply_to":"AAAATn%2F%2BgVI%3D","updated":"2013-11-25 12:40:13.000000000","message":"Done","commit_id":"7a10005e3c126f15a9a64bbaf5646a5804ed1003"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f09d2590299dfad3598b85c3a0a731ada3288c05","unresolved":false,"context_lines":[{"line_number":4803,"context_line":"        if cpu_json is not None:"},{"line_number":4804,"context_line":"            cpu \u003d hardware.VirtCPUModel.from_json(cpu_json)"},{"line_number":4805,"context_line":"        else:"},{"line_number":4806,"context_line":"            cpu \u003d None"},{"line_number":4807,"context_line":""},{"line_number":4808,"context_line":"        src_compute_info \u003d obj_base.obj_to_primitive("},{"line_number":4809,"context_line":"            self._get_compute_info(ctxt, instance.host))"}],"source_content_type":"text/x-python","patch_set":27,"id":"da9df570_090d6be9","line":4806,"updated":"2014-09-25 21:29:01.000000000","message":"It might be nicer to have the 3.35 RPC API return a nova.object for the VirtCPUModel, instead of raw JSON. That way if there are changes to the VirtCPUModel, the nova.objects versioning infrastructure can handle the conversion/translation of different VirtCPUModel object versions.\n\nSee the InstanceNUMATopology object (which is NOT actually stored in the database) for inspiration:\n\nhttps://github.com/openstack/nova/blob/master/nova/objects/instance_numa_topology.py","commit_id":"c1df65f9bc924ee7a81fedf7b41bfba383c6379a"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"8622613109b32a12d7b0a19796d946e378019560","unresolved":false,"context_lines":[{"line_number":4803,"context_line":"        if cpu_json is not None:"},{"line_number":4804,"context_line":"            cpu \u003d hardware.VirtCPUModel.from_json(cpu_json)"},{"line_number":4805,"context_line":"        else:"},{"line_number":4806,"context_line":"            cpu \u003d None"},{"line_number":4807,"context_line":""},{"line_number":4808,"context_line":"        src_compute_info \u003d obj_base.obj_to_primitive("},{"line_number":4809,"context_line":"            self._get_compute_info(ctxt, instance.host))"}],"source_content_type":"text/x-python","patch_set":27,"id":"da9df570_267c10b5","line":4806,"in_reply_to":"da9df570_090d6be9","updated":"2014-09-26 09:39:11.000000000","message":"I\u0027ll take a look at that.","commit_id":"c1df65f9bc924ee7a81fedf7b41bfba383c6379a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3da6ecfc0dbb4a676959875d79456c42dcb0f10c","unresolved":false,"context_lines":[{"line_number":4841,"context_line":""},{"line_number":4842,"context_line":"        dst_compute_info \u003d obj_base.obj_to_primitive("},{"line_number":4843,"context_line":"            self._get_compute_info(ctxt, CONF.host))"},{"line_number":4844,"context_line":"        dest_check_data \u003d self.driver.check_can_live_migrate_destination(ctxt,"},{"line_number":4845,"context_line":"            instance, cpu, src_compute_info, dst_compute_info,"},{"line_number":4846,"context_line":"            block_migration, disk_over_commit)"},{"line_number":4847,"context_line":"        migrate_data \u003d {}"},{"line_number":4848,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":31,"id":"baa201ad_1df8667b","line":4845,"range":{"start_line":4844,"start_character":8,"end_line":4845,"end_character":62},"updated":"2014-10-14 15:34:45.000000000","message":"I don\u0027t think we should be introducing a new unversioned blob over RPC here. Migration is often critical for upgrades, so we should be *extra* diligent about not sending unversioned stuff over the wire between potentially-different compute nodes, IMHO.\n\nCan you make this into a versioned object please?","commit_id":"24e565093b0a55569be08ce18f14111407fda939"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"8d69af3df6fe33505073dce8cd2701d36e58c690","unresolved":false,"context_lines":[{"line_number":4831,"context_line":"        :param block_migration: if true, prepare for block migration"},{"line_number":4832,"context_line":"        :param disk_over_commit: if true, allow disk over commit"},{"line_number":4833,"context_line":"        :returns: a dict containing migration info"},{"line_number":4834,"context_line":"        \"\"\""},{"line_number":4835,"context_line":"        cpu_json \u003d self.compute_rpcapi.get_instance_cpu_config("},{"line_number":4836,"context_line":"            ctxt, instance)"},{"line_number":4837,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"5a890539_7a30c59e","line":4834,"updated":"2014-11-12 09:32:42.000000000","message":"Maybe I am misunderstanding something here.\nThis is called originally from the source - the context is set as as the destination. So essentially this code here is being invoked on the destination.\nWhy are we doing an RPC call below?\nI think that we should pass the cpu_config here to the destination and it should be retrieved before.","commit_id":"61df2f9db4f13efd94bd343b11357507da3687e4"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ea41739501c9e748c8a229f2c8d7a7cc1c114dea","unresolved":false,"context_lines":[{"line_number":870,"context_line":"        instance_p \u003d jsonutils.to_primitive(instance)"},{"line_number":871,"context_line":"        cctxt \u003d self.client.prepare(server\u003d_compute_host(None, instance),"},{"line_number":872,"context_line":"                                    version\u003d\u00272.49\u0027)"},{"line_number":873,"context_line":"        cctxt.call(ctxt, \u0027get_guest_config\u0027, instance\u003dinstance_p)"},{"line_number":874,"context_line":""},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"class SecurityGroupAPI(rpcclient.RpcProxy):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F73c%3D","line":873,"updated":"2013-10-24 23:30:57.000000000","message":"This needs to raise an exception if we\u0027re not allowed to send version 2.49.\n\nAlso, I don\u0027t see where get_guest_config() is defined in the manager, so how can this call work?","commit_id":"fa581c790175d88b1efd2126f0b68e39aee8a033"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"ff6e39fe9074b17716bc08ee80caf2d662ff5398","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        2.48 - Make add_aggregate_host() and remove_aggregate_host() take"},{"line_number":211,"context_line":"               new-world objects"},{"line_number":212,"context_line":"        ...  - Remove live_snapshot() that was never actually used"},{"line_number":213,"context_line":"        2.49 - Added get_instance_cpu_config()"},{"line_number":214,"context_line":"    \u0027\u0027\u0027"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    #"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2B0z8%3D","line":213,"updated":"2013-11-19 17:15:13.000000000","message":"Added or Adds? Not sure. Seems both are used in old version description. :)","commit_id":"e93c84de9eb64d4c51174c0297606528d4737c7d"},{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"634f9fbaaaa947e7b05d2b722e1c4bc8487a4d6d","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        2.48 - Make add_aggregate_host() and remove_aggregate_host() take"},{"line_number":211,"context_line":"               new-world objects"},{"line_number":212,"context_line":"        ...  - Remove live_snapshot() that was never actually used"},{"line_number":213,"context_line":"        2.49 - Added get_instance_cpu_config()"},{"line_number":214,"context_line":"    \u0027\u0027\u0027"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    #"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BzAM%3D","line":213,"in_reply_to":"AAAATn%2F%2B0z8%3D","updated":"2013-11-20 03:29:39.000000000","message":"this is just a copy paste.","commit_id":"e93c84de9eb64d4c51174c0297606528d4737c7d"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"b36fbb9d9437d38d847abf3d33fcaa631d0880f2","unresolved":false,"context_lines":[{"line_number":861,"context_line":"                   delete_info\u003ddelete_info)"},{"line_number":862,"context_line":""},{"line_number":863,"context_line":"    def get_instance_cpu_config(self, ctxt, instance):"},{"line_number":864,"context_line":"        instance_p \u003d jsonutils.to_primitive(instance)"},{"line_number":865,"context_line":"        cctxt \u003d self.client.prepare(server\u003d_compute_host(None, instance),"},{"line_number":866,"context_line":"                                    version\u003d\u00272.49\u0027)"},{"line_number":867,"context_line":"        return cctxt.call(ctxt, \u0027get_instance_cpu_config\u0027, instance\u003dinstance_p)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2BT9I%3D","line":864,"updated":"2013-11-27 14:33:28.000000000","message":"This should send an instance object from the start instead of using the old method of using jsonutils","commit_id":"2862ff07d9bc475f55dff7cf8a51a77209f1b6bc"},{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"28079363324e8b2e3d1a2ab5928c3128346ac243","unresolved":false,"context_lines":[{"line_number":861,"context_line":"                   delete_info\u003ddelete_info)"},{"line_number":862,"context_line":""},{"line_number":863,"context_line":"    def get_instance_cpu_config(self, ctxt, instance):"},{"line_number":864,"context_line":"        instance_p \u003d jsonutils.to_primitive(instance)"},{"line_number":865,"context_line":"        cctxt \u003d self.client.prepare(server\u003d_compute_host(None, instance),"},{"line_number":866,"context_line":"                                    version\u003d\u00272.49\u0027)"},{"line_number":867,"context_line":"        return cctxt.call(ctxt, \u0027get_instance_cpu_config\u0027, instance\u003dinstance_p)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2BQ3A%3D","line":864,"in_reply_to":"AAAATn%2F%2BT9I%3D","updated":"2013-11-28 07:28:34.000000000","message":"this rpc api is called from conductor live migration tasks, it requires a lot of changes not related to this patch. can we update to use the new instance object in a separate patch?","commit_id":"2862ff07d9bc475f55dff7cf8a51a77209f1b6bc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"8d69af3df6fe33505073dce8cd2701d36e58c690","unresolved":false,"context_lines":[{"line_number":903,"context_line":""},{"line_number":904,"context_line":"    def get_instance_cpu_config(self, ctxt, instance):"},{"line_number":905,"context_line":"        if not self.client.can_send_version(\u00273.36\u0027):"},{"line_number":906,"context_line":"            return None"},{"line_number":907,"context_line":""},{"line_number":908,"context_line":"        cctxt \u003d self.client.prepare(server\u003d_compute_host(None, instance),"},{"line_number":909,"context_line":"                                    version\u003d\u00273.36\u0027)"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a890539_5a75c996","line":906,"updated":"2014-11-12 09:32:42.000000000","message":"we do not need to specifically return None - by default None is returned","commit_id":"61df2f9db4f13efd94bd343b11357507da3687e4"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"7177f2bb0fc2567e08974e5dcfd6cd11f5d94351","unresolved":false,"context_lines":[{"line_number":4165,"context_line":"        self.assertEqual(cpu.features, [])"},{"line_number":4166,"context_line":"        self.assertEqual(cpu.topology.sockets, 1)"},{"line_number":4167,"context_line":"        self.assertEqual(cpu.topology.cores, 1)"},{"line_number":4168,"context_line":"        self.assertEqual(cpu.topology.threads, 1)"},{"line_number":4169,"context_line":""},{"line_number":4170,"context_line":"    def test_xml_and_uri_no_ramdisk_no_kernel(self):"},{"line_number":4171,"context_line":"        instance_data \u003d dict(self.test_instance)"}],"source_content_type":"text/x-python","patch_set":38,"id":"fa81d914_655c4fee","line":4168,"updated":"2015-01-30 16:18:19.000000000","message":"To provide improved debug message if assert fails, it is better to swap arguments in assertEqual in all places to:\n\nassertEqual(expected, actual)","commit_id":"5edf7d84abd5291e2c2c2172eff5abf104de1278"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"7177f2bb0fc2567e08974e5dcfd6cd11f5d94351","unresolved":false,"context_lines":[{"line_number":5891,"context_line":"  \u003ctopology sockets\u003d\"1\" cores\u003d\"2\" threads\u003d\"4\"/\u003e"},{"line_number":5892,"context_line":"  \u003cfeature name\u003d\"sse3\" policy\u003d\"disable\"/\u003e"},{"line_number":5893,"context_line":"\u003c/cpu\u003e"},{"line_number":5894,"context_line":"\u0027\u0027\u0027"},{"line_number":5895,"context_line":""},{"line_number":5896,"context_line":"        self.mox.StubOutWithMock(drvr, \u0027_create_shared_storage_test_file\u0027)"},{"line_number":5897,"context_line":"        self.mox.StubOutWithMock(fakelibvirt.Connection, \u0027compareCPU\u0027)"}],"source_content_type":"text/x-python","patch_set":38,"id":"fa81d914_a5cd6787","line":5894,"updated":"2015-01-30 16:18:19.000000000","message":"May be we can make the code with \u0027cpuxml\u0027 string more readable with indents","commit_id":"5edf7d84abd5291e2c2c2172eff5abf104de1278"}],"nova/virt/driver.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"15040fcdd11c6ecd7e592ea96b526eaad52d2880","unresolved":false,"context_lines":[{"line_number":575,"context_line":"        raise NotImplementedError()"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"    def get_instance_cpu_config(self, ctxt, instance_ref):"},{"line_number":578,"context_line":"        \"\"\"Return guest instance cpu model info in xml format."},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"        :param ctxt: security context"},{"line_number":581,"context_line":"        :param instance_ref: nova.db.sqlalchemy.models.Instance"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2BgVs%3D","line":578,"updated":"2013-11-25 11:57:16.000000000","message":"XML is the libvirt specific format for a CPU. We should not assume that all virt drivers want to sue XML for this. This method should merely treat this as an opaque string.","commit_id":"7a10005e3c126f15a9a64bbaf5646a5804ed1003"},{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"3090ebb9ae76685ec170a8b35d5b594bb315d0a5","unresolved":false,"context_lines":[{"line_number":575,"context_line":"        raise NotImplementedError()"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"    def get_instance_cpu_config(self, ctxt, instance_ref):"},{"line_number":578,"context_line":"        \"\"\"Return guest instance cpu model info in xml format."},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"        :param ctxt: security context"},{"line_number":581,"context_line":"        :param instance_ref: nova.db.sqlalchemy.models.Instance"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2BgFQ%3D","line":578,"in_reply_to":"AAAATn%2F%2BgVs%3D","updated":"2013-11-25 12:40:13.000000000","message":"Done","commit_id":"7a10005e3c126f15a9a64bbaf5646a5804ed1003"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"f348e9a190955c781ac116cc34a818ff8ce061b3","unresolved":false,"context_lines":[{"line_number":765,"context_line":"        raise NotImplementedError()"},{"line_number":766,"context_line":""},{"line_number":767,"context_line":"    def get_instance_cpu_config(self, context, instance):"},{"line_number":768,"context_line":"        \"\"\"Return guest instance cpu model info used be libvirt driver"},{"line_number":769,"context_line":"        only for now."},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        :param ctxt: security context"}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_6a3aeae6","line":768,"updated":"2014-07-29 04:10:12.000000000","message":"Presumably this should be \"used by\".","commit_id":"f60d2a2d72a660be4a4c56aab058c7d0c03edcc0"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"9a7e9dc42d81f4b2de53edce3a06b3be972cad66","unresolved":false,"context_lines":[{"line_number":765,"context_line":"        raise NotImplementedError()"},{"line_number":766,"context_line":""},{"line_number":767,"context_line":"    def get_instance_cpu_config(self, context, flavor, image_meta):"},{"line_number":768,"context_line":"        \"\"\"Return guest instance cpu model info used be libvirt driver"},{"line_number":769,"context_line":"        only for now."},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        :param context: security context"}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_64b688fe","line":768,"updated":"2014-07-29 14:32:39.000000000","message":"Should be \"used by\".","commit_id":"d57a1ad9a4b2951c024a75f9f884c8f7b8e68d44"},{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"3287cbd30fe10a98efff07ebea735f9fe9f8438a","unresolved":false,"context_lines":[{"line_number":765,"context_line":"        raise NotImplementedError()"},{"line_number":766,"context_line":""},{"line_number":767,"context_line":"    def get_instance_cpu_config(self, context, flavor, image_meta):"},{"line_number":768,"context_line":"        \"\"\"Return guest instance cpu model info used be libvirt driver"},{"line_number":769,"context_line":"        only for now."},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        :param context: security context"}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_29652f1d","line":768,"in_reply_to":"baada198_64b688fe","updated":"2014-08-14 09:46:36.000000000","message":"Done","commit_id":"d57a1ad9a4b2951c024a75f9f884c8f7b8e68d44"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"fd51df301b6aca7b1999ad0c10a90524300d07eb","unresolved":false,"context_lines":[{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        :param context: security context"},{"line_number":772,"context_line":"        :param flavor: nova.db.sqlalchemy.models.Instance"},{"line_number":773,"context_line":"        :param image_meta: instance image metadata"},{"line_number":774,"context_line":"        \"\"\""},{"line_number":775,"context_line":"        return None"},{"line_number":776,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_2942b2ab","line":773,"updated":"2014-07-29 10:53:34.000000000","message":"There\u0027s no documented return data format.","commit_id":"d57a1ad9a4b2951c024a75f9f884c8f7b8e68d44"},{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"3287cbd30fe10a98efff07ebea735f9fe9f8438a","unresolved":false,"context_lines":[{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        :param context: security context"},{"line_number":772,"context_line":"        :param flavor: nova.db.sqlalchemy.models.Instance"},{"line_number":773,"context_line":"        :param image_meta: instance image metadata"},{"line_number":774,"context_line":"        \"\"\""},{"line_number":775,"context_line":"        return None"},{"line_number":776,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_e9a33741","line":773,"in_reply_to":"baada198_2942b2ab","updated":"2014-08-14 09:46:36.000000000","message":"Done","commit_id":"d57a1ad9a4b2951c024a75f9f884c8f7b8e68d44"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"8d69af3df6fe33505073dce8cd2701d36e58c690","unresolved":false,"context_lines":[{"line_number":803,"context_line":"        \"\"\"Return guest instance cpu model description"},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        :param context: security context"},{"line_number":806,"context_line":"        :param instance_ref: nova.db.sqlalchemy.models.Instance"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"        :returns: a nova.virt.hardware.VirtCPUModel object or None"},{"line_number":809,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":36,"id":"5a890539_3ab55d31","line":806,"updated":"2014-11-12 09:32:42.000000000","message":"should we use an object here?","commit_id":"61df2f9db4f13efd94bd343b11357507da3687e4"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"8d69af3df6fe33505073dce8cd2701d36e58c690","unresolved":false,"context_lines":[{"line_number":807,"context_line":""},{"line_number":808,"context_line":"        :returns: a nova.virt.hardware.VirtCPUModel object or None"},{"line_number":809,"context_line":"        \"\"\""},{"line_number":810,"context_line":"        return None"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"    def check_can_live_migrate_destination_cleanup(self, context,"},{"line_number":813,"context_line":"                                                   dest_check_data):"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a890539_faaaf5d0","line":810,"updated":"2014-11-12 09:32:42.000000000","message":"do not think that we need None - but i guess that is just a style thing","commit_id":"61df2f9db4f13efd94bd343b11357507da3687e4"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ea41739501c9e748c8a229f2c8d7a7cc1c114dea","unresolved":false,"context_lines":[{"line_number":3758,"context_line":"                stats[\u0027supported_instances\u0027])"},{"line_number":3759,"context_line":"        return stats"},{"line_number":3760,"context_line":""},{"line_number":3761,"context_line":"    def get_instance_config(self, instance):"},{"line_number":3762,"context_line":"        \"\"\"Retrieve instance xml config infomation.\"\"\""},{"line_number":3763,"context_line":"        dom \u003d self._lookup_by_name(instance[\"name\"])"},{"line_number":3764,"context_line":"        return dom.XMLDesc(0)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F73A%3D","line":3761,"updated":"2013-10-24 23:30:57.000000000","message":"Where is this ever called from?","commit_id":"fa581c790175d88b1efd2126f0b68e39aee8a033"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"8463253c82c18e8791dc55725e354af5675e9209","unresolved":false,"context_lines":[{"line_number":3999,"context_line":"            return 1"},{"line_number":4000,"context_line":"        #NOTE(yaguang): Instance CPU model isn\u0027t specified in XML, needn\u0027t to"},{"line_number":4001,"context_line":"        # check CPU compatibility."},{"line_number":4002,"context_line":"        if cpu_info \u003d\u003d None:"},{"line_number":4003,"context_line":"            return 1"},{"line_number":4004,"context_line":""},{"line_number":4005,"context_line":"        LOG.info(_(\u0027Instance launched has CPU info:\\n%s\u0027) % cpu_info)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FJ84%3D","line":4002,"updated":"2013-11-13 16:41:31.000000000","message":"any reason not using if cpu_info is None:?","commit_id":"1a78590b8a346c4d9403d8f08e3893493d76090e"},{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"4891d4deaad33443fd32b4677efe920c11ea69ee","unresolved":false,"context_lines":[{"line_number":3999,"context_line":"            return 1"},{"line_number":4000,"context_line":"        #NOTE(yaguang): Instance CPU model isn\u0027t specified in XML, needn\u0027t to"},{"line_number":4001,"context_line":"        # check CPU compatibility."},{"line_number":4002,"context_line":"        if cpu_info \u003d\u003d None:"},{"line_number":4003,"context_line":"            return 1"},{"line_number":4004,"context_line":""},{"line_number":4005,"context_line":"        LOG.info(_(\u0027Instance launched has CPU info:\\n%s\u0027) % cpu_info)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FDo8%3D","line":4002,"in_reply_to":"AAAATn%2F%2FJ84%3D","updated":"2013-11-15 02:45:14.000000000","message":"does it really matter and worth to a -1 ? you can see this kind of usage in many files of nova .","commit_id":"1a78590b8a346c4d9403d8f08e3893493d76090e"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"ff6e39fe9074b17716bc08ee80caf2d662ff5398","unresolved":false,"context_lines":[{"line_number":3830,"context_line":"        if cpu_dom is not None:"},{"line_number":3831,"context_line":"            cpu_xml \u003d etree.tostring(cpu_dom)"},{"line_number":3832,"context_line":"            return cpu_xml"},{"line_number":3833,"context_line":"        return None"},{"line_number":3834,"context_line":""},{"line_number":3835,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"},{"line_number":3836,"context_line":"        dirpath \u003d libvirt_utils.get_instance_path(instance)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2B0zc%3D","line":3833,"updated":"2013-11-19 17:15:13.000000000","message":"Is it normal or an exception that cpu_dom is None? Because the caller in compute/manager.py seems assume it will be {} if no value.","commit_id":"e93c84de9eb64d4c51174c0297606528d4737c7d"},{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"634f9fbaaaa947e7b05d2b722e1c4bc8487a4d6d","unresolved":false,"context_lines":[{"line_number":3830,"context_line":"        if cpu_dom is not None:"},{"line_number":3831,"context_line":"            cpu_xml \u003d etree.tostring(cpu_dom)"},{"line_number":3832,"context_line":"            return cpu_xml"},{"line_number":3833,"context_line":"        return None"},{"line_number":3834,"context_line":""},{"line_number":3835,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"},{"line_number":3836,"context_line":"        dirpath \u003d libvirt_utils.get_instance_path(instance)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BzAw%3D","line":3833,"in_reply_to":"AAAATn%2F%2B0zc%3D","updated":"2013-11-20 03:29:39.000000000","message":"cpu_dom can be None and this is  tested in test_libvirt.py test_get_instance_cpu_config_none.\n\nlibvirt driver returns None or xml info to source node manger, and dest node manger gets a dict through a RPC call.","commit_id":"e93c84de9eb64d4c51174c0297606528d4737c7d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"21f14ade0a0c09ddd5fe5eac475d804598111136","unresolved":false,"context_lines":[{"line_number":3830,"context_line":"        if cpu_dom is not None:"},{"line_number":3831,"context_line":"            cpu_xml \u003d etree.tostring(cpu_dom)"},{"line_number":3832,"context_line":"            return cpu_xml"},{"line_number":3833,"context_line":"        return None"},{"line_number":3834,"context_line":""},{"line_number":3835,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"},{"line_number":3836,"context_line":"        dirpath \u003d libvirt_utils.get_instance_path(instance)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2Bsrc%3D","line":3833,"updated":"2013-11-21 11:55:08.000000000","message":"Our goal is to isolate all XML parsing \u0026 formatting in the config.py classes.\n\nPlease extend LibvirtConfigGuest\u0027s parse_dom method, so that it can parse the \u0027\u003ccpu\u003e\u0027 element, using the LibvirtConfigCPU class\u0027s parse_dom method.\n\nThen this code can be changed to something that is similar to\n\n  dom \u003d self._lookup_by_name(instance[\"name\"])\n  config \u003d LibvirtConfigGuest()\n  config.parse_str(dom.XMLDesc(0))\n  if dom.cpu is not None:\n      return dom.cpu.to_xml()\n\n\nNote, when extending the config.py parsing code, please do that in a separate patch, so this ends up as  2-patch series. First patch extends the parser, the second patch does this migration fix.","commit_id":"f1ab798c8292e9ebec26f587682158f6018f2c0a"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"15040fcdd11c6ecd7e592ea96b526eaad52d2880","unresolved":false,"context_lines":[{"line_number":3901,"context_line":"        if cpu_dom is not None:"},{"line_number":3902,"context_line":"            cpu_xml \u003d etree.tostring(cpu_dom)"},{"line_number":3903,"context_line":"            return cpu_xml"},{"line_number":3904,"context_line":"        return None"},{"line_number":3905,"context_line":""},{"line_number":3906,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"},{"line_number":3907,"context_line":"        dirpath \u003d libvirt_utils.get_instance_path(instance)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2BgTg%3D","line":3904,"updated":"2013-11-25 11:57:16.000000000","message":"Why did you revert the change to use the config.py APIs, that was done in patchset 8. Please put it back to using the APIs *not* parsing XML manually.","commit_id":"7a10005e3c126f15a9a64bbaf5646a5804ed1003"},{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"3090ebb9ae76685ec170a8b35d5b594bb315d0a5","unresolved":false,"context_lines":[{"line_number":3901,"context_line":"        if cpu_dom is not None:"},{"line_number":3902,"context_line":"            cpu_xml \u003d etree.tostring(cpu_dom)"},{"line_number":3903,"context_line":"            return cpu_xml"},{"line_number":3904,"context_line":"        return None"},{"line_number":3905,"context_line":""},{"line_number":3906,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"},{"line_number":3907,"context_line":"        dirpath \u003d libvirt_utils.get_instance_path(instance)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2BgFo%3D","line":3904,"in_reply_to":"AAAATn%2F%2BgTg%3D","updated":"2013-11-25 12:40:13.000000000","message":"my fault, change is based on  a previous branch. and also lose commit dependency.","commit_id":"7a10005e3c126f15a9a64bbaf5646a5804ed1003"},{"author":{"_account_id":518,"name":"Soren Hansen","email":"soren@linux2go.dk","username":"soren"},"change_message_id":"c88bbc6f180abda4a66e5717fb470c17751201fd","unresolved":false,"context_lines":[{"line_number":4098,"context_line":"        #NOTE(yaguang): Instance CPU model isn\u0027t specified in XML, needn\u0027t to"},{"line_number":4099,"context_line":"        # check CPU compatibility."},{"line_number":4100,"context_line":"        if cpu_info is None:"},{"line_number":4101,"context_line":"            return 1"},{"line_number":4102,"context_line":""},{"line_number":4103,"context_line":"        LOG.info(_(\u0027Instance launched has CPU info:\\n%s\u0027) % cpu_info)"},{"line_number":4104,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2BQiE%3D","line":4101,"updated":"2013-11-28 08:58:15.000000000","message":"This looks wrong to me.\n\nEven if it\u0027s not specifically set in the XML, it\u0027s still running with a specific CPU with specific features enabled and the destination host must be able to provide those same features.\n\nIn the situation where the XML doesn\u0027t specify a specific CPU model, perhaps you could fall back to looking at the source host CPU model. Isn\u0027t that what it\u0027ll use by default if nothing is specified in the XML?","commit_id":"81178543ef377c6ab6d72d0c8572f897552f6ea4"},{"author":{"_account_id":518,"name":"Soren Hansen","email":"soren@linux2go.dk","username":"soren"},"change_message_id":"be2fe78c81aa82415c4e03d3bf46719339a0b8ff","unresolved":false,"context_lines":[{"line_number":4098,"context_line":"        #NOTE(yaguang): Instance CPU model isn\u0027t specified in XML, needn\u0027t to"},{"line_number":4099,"context_line":"        # check CPU compatibility."},{"line_number":4100,"context_line":"        if cpu_info is None:"},{"line_number":4101,"context_line":"            return 1"},{"line_number":4102,"context_line":""},{"line_number":4103,"context_line":"        LOG.info(_(\u0027Instance launched has CPU info:\\n%s\u0027) % cpu_info)"},{"line_number":4104,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2BOs0%3D","line":4101,"in_reply_to":"AAAATn%2F%2BQaw%3D","updated":"2013-11-28 15:47:26.000000000","message":"Thanks for pointing this out, Yaguang. I did not realise this had changed.","commit_id":"81178543ef377c6ab6d72d0c8572f897552f6ea4"},{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"197dbdce7a5d47fa4493f481b8306b878fe1931b","unresolved":false,"context_lines":[{"line_number":4098,"context_line":"        #NOTE(yaguang): Instance CPU model isn\u0027t specified in XML, needn\u0027t to"},{"line_number":4099,"context_line":"        # check CPU compatibility."},{"line_number":4100,"context_line":"        if cpu_info is None:"},{"line_number":4101,"context_line":"            return 1"},{"line_number":4102,"context_line":""},{"line_number":4103,"context_line":"        LOG.info(_(\u0027Instance launched has CPU info:\\n%s\u0027) % cpu_info)"},{"line_number":4104,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2BQaw%3D","line":4101,"in_reply_to":"AAAATn%2F%2BQiE%3D","updated":"2013-11-28 09:20:01.000000000","message":"please refer to this technical article https://www.berrange.com/posts/2012/11/16/what-was-new-in-libvirt-for-the-openstack-nova-folsom-release/ \n\nIf no explicit CPU model is requested in the guest config, KVM will start with a generic, lowest common denominator model that will typically work everywhere. As can be expected, this generic CPU model is not going to offer optimal performance for the guests.","commit_id":"81178543ef377c6ab6d72d0c8572f897552f6ea4"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5d5439c9ced506a0f5491e6742d1d76474af0e64","unresolved":false,"context_lines":[{"line_number":4182,"context_line":"                    (disk_available_gb * units.Ki) - CONF.reserved_host_disk_mb"},{"line_number":4183,"context_line":""},{"line_number":4184,"context_line":"        # Compare CPU"},{"line_number":4185,"context_line":"        source_cpu_info \u003d src_compute_info[\u0027guest_cpu_info\u0027]"},{"line_number":4186,"context_line":"        self._compare_cpu(source_cpu_info)"},{"line_number":4187,"context_line":""},{"line_number":4188,"context_line":"        # Create file on storage, to be checked on source host"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAW3%2F%2FvbU%3D","line":4185,"updated":"2014-04-10 17:39:02.000000000","message":"This will fail if an older node attempts to live migrate to a newer one. Something needs to be done to provide backwards compatibility. Ideally this would be in the manager method so that it would apply to all the drivers.","commit_id":"c5363748391b1ccde3c7c3993e6e50a77688f30f"},{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"fb3470ae504569fe6917db44d70502a119f74e8b","unresolved":false,"context_lines":[{"line_number":4182,"context_line":"                    (disk_available_gb * units.Ki) - CONF.reserved_host_disk_mb"},{"line_number":4183,"context_line":""},{"line_number":4184,"context_line":"        # Compare CPU"},{"line_number":4185,"context_line":"        source_cpu_info \u003d src_compute_info[\u0027guest_cpu_info\u0027]"},{"line_number":4186,"context_line":"        self._compare_cpu(source_cpu_info)"},{"line_number":4187,"context_line":""},{"line_number":4188,"context_line":"        # Create file on storage, to be checked on source host"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAW3%2F%2FguU%3D","line":4185,"in_reply_to":"AAAAW3%2F%2FvbU%3D","updated":"2014-04-14 04:17:43.000000000","message":"It won\u0027t goes here  because guest_cpu_info is get from a newer  rpcapi in manger method. the older node doesn\u0027t support the rpcapi method.","commit_id":"c5363748391b1ccde3c7c3993e6e50a77688f30f"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"1b88c5f529004da4b3d8d785e2c9ca5d940445db","unresolved":false,"context_lines":[{"line_number":4156,"context_line":"        config \u003d vconfig.LibvirtConfigGuest()"},{"line_number":4157,"context_line":"        config.parse_str(dom.XMLDesc(0))"},{"line_number":4158,"context_line":"        if config.cpu is not None:"},{"line_number":4159,"context_line":"            return config.cpu.to_xml()"},{"line_number":4160,"context_line":"        return None"},{"line_number":4161,"context_line":""},{"line_number":4162,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"}],"source_content_type":"text/x-python","patch_set":22,"id":"baada198_0bdf316a","line":4159,"updated":"2014-07-03 10:56:15.000000000","message":"So this is a public shared virt driver API, but you\u0027re returning libvirt XML document here. Of course the only thing that consumes this data is another instance of the libvirt driver. It still feels wrong though to be defining an API in the virt driver that is libvirt specific.","commit_id":"b6c1d3848b85ea3f1a0f3aaa582be0a226822046"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"6fa6a2e684a774ddd5372e8b573712b216c28c12","unresolved":false,"context_lines":[{"line_number":4156,"context_line":"        config \u003d vconfig.LibvirtConfigGuest()"},{"line_number":4157,"context_line":"        config.parse_str(dom.XMLDesc(0))"},{"line_number":4158,"context_line":"        if config.cpu is not None:"},{"line_number":4159,"context_line":"            return config.cpu.to_xml()"},{"line_number":4160,"context_line":"        return None"},{"line_number":4161,"context_line":""},{"line_number":4162,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"}],"source_content_type":"text/x-python","patch_set":22,"id":"baada198_0513950d","line":4159,"in_reply_to":"baada198_0bdf316a","updated":"2014-07-03 14:26:28.000000000","message":"It seems to me that the way to deal with this is to add a comment to get_instance_cpu_config() in the virt driver saying that it returns something driver-specific rather than a standard format unified across all drivers.\n\nIf we ever need to have a standard format we can make that change later, but for now it seems like extra work for no immediate gain.","commit_id":"b6c1d3848b85ea3f1a0f3aaa582be0a226822046"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"fd51df301b6aca7b1999ad0c10a90524300d07eb","unresolved":false,"context_lines":[{"line_number":4224,"context_line":"    def get_instance_cpu_config(self, context, flavor, image_meta):"},{"line_number":4225,"context_line":"        \"\"\"Retrieve instance xml config infomation.\"\"\""},{"line_number":4226,"context_line":"        cpu \u003d self._get_guest_cpu_config(flavor, image_meta)"},{"line_number":4227,"context_line":"        return cpu.to_xml()"},{"line_number":4228,"context_line":""},{"line_number":4229,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"},{"line_number":4230,"context_line":"        dirpath \u003d libvirt_utils.get_instance_path(instance)"}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_495c4681","line":4227,"updated":"2014-07-29 10:53:34.000000000","message":"This is setting up the common virt driver method to be defined in terms of libvirt XML data format. I\u0027d like to see a standard data structure defined for the return data in nova/virt/hardware.py. Of course this data structure would have to be able to represent everything we need for the libvirt CPU model, but it allows us to serialize to a standard json format across all virt drivers. Later where we use it, it can be de-serailized from json and used to create the libvirt-private XML format needed by libvirt API calls.","commit_id":"d57a1ad9a4b2951c024a75f9f884c8f7b8e68d44"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"b7d276928d5a01d864140c53c73fc73109187514","unresolved":false,"context_lines":[{"line_number":4224,"context_line":"    def get_instance_cpu_config(self, context, flavor, image_meta):"},{"line_number":4225,"context_line":"        \"\"\"Retrieve instance xml config infomation.\"\"\""},{"line_number":4226,"context_line":"        cpu \u003d self._get_guest_cpu_config(flavor, image_meta)"},{"line_number":4227,"context_line":"        return cpu.to_xml()"},{"line_number":4228,"context_line":""},{"line_number":4229,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"},{"line_number":4230,"context_line":"        dirpath \u003d libvirt_utils.get_instance_path(instance)"}],"source_content_type":"text/x-python","patch_set":24,"id":"7ac7a964_b9b0c5f5","line":4227,"in_reply_to":"7ac7a964_7ef37373","updated":"2014-08-14 09:58:39.000000000","message":"I don\u0027t think it needs a specs document to any greater extent than what you\u0027re already doing can be said to need a specs document. What I\u0027m requesting is really not that much more work todo","commit_id":"d57a1ad9a4b2951c024a75f9f884c8f7b8e68d44"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"9a7e9dc42d81f4b2de53edce3a06b3be972cad66","unresolved":false,"context_lines":[{"line_number":4224,"context_line":"    def get_instance_cpu_config(self, context, flavor, image_meta):"},{"line_number":4225,"context_line":"        \"\"\"Retrieve instance xml config infomation.\"\"\""},{"line_number":4226,"context_line":"        cpu \u003d self._get_guest_cpu_config(flavor, image_meta)"},{"line_number":4227,"context_line":"        return cpu.to_xml()"},{"line_number":4228,"context_line":""},{"line_number":4229,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"},{"line_number":4230,"context_line":"        dirpath \u003d libvirt_utils.get_instance_path(instance)"}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_c4275462","line":4227,"in_reply_to":"baada198_495c4681","updated":"2014-07-29 14:32:39.000000000","message":"Why bother?  The data comes from a virt driver and goes back to the same virt driver.  It seems like defining a format for it is just extra work for no benefit.  Why not just document it as \"opaque data of meaning only to the virt driver that put it there\"?","commit_id":"d57a1ad9a4b2951c024a75f9f884c8f7b8e68d44"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"994c51a73678e51f108203bfaf038d7a11ba3a32","unresolved":false,"context_lines":[{"line_number":4224,"context_line":"    def get_instance_cpu_config(self, context, flavor, image_meta):"},{"line_number":4225,"context_line":"        \"\"\"Retrieve instance xml config infomation.\"\"\""},{"line_number":4226,"context_line":"        cpu \u003d self._get_guest_cpu_config(flavor, image_meta)"},{"line_number":4227,"context_line":"        return cpu.to_xml()"},{"line_number":4228,"context_line":""},{"line_number":4229,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"},{"line_number":4230,"context_line":"        dirpath \u003d libvirt_utils.get_instance_path(instance)"}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_f48403d5","line":4227,"in_reply_to":"baada198_7f7a91f1","updated":"2014-07-29 15:36:00.000000000","message":"Having a defined specification is fine, but it might make more sense to have it be per-driver, not in the common virt code.\n\nI\u0027m not sure we can make something that is useful and generic.  Some hypervisors don\u0027t let you control the cpu features in the guest, some let you specify it down to the tiniest detail.\n\nFor example, libvirt uses model+features, while I think VMware uses CPU identification masks.  These could be converted to a separately defined format, but it would be difficult to get an exact correlation between the two.","commit_id":"d57a1ad9a4b2951c024a75f9f884c8f7b8e68d44"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"3619cb1f9c87b477a0fe08ce7bb30cf87d958cfa","unresolved":false,"context_lines":[{"line_number":4224,"context_line":"    def get_instance_cpu_config(self, context, flavor, image_meta):"},{"line_number":4225,"context_line":"        \"\"\"Retrieve instance xml config infomation.\"\"\""},{"line_number":4226,"context_line":"        cpu \u003d self._get_guest_cpu_config(flavor, image_meta)"},{"line_number":4227,"context_line":"        return cpu.to_xml()"},{"line_number":4228,"context_line":""},{"line_number":4229,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"},{"line_number":4230,"context_line":"        dirpath \u003d libvirt_utils.get_instance_path(instance)"}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_7f7a91f1","line":4227,"in_reply_to":"baada198_c4275462","updated":"2014-07-29 14:57:23.000000000","message":"Looking solely at current usage is a very short term view. I\u0027m considering the big picture for ongoing maintenance here. This data may well have a use in other areas in the future, so specifying a standard data format is important from that POV. Having opaque blobs is also really bad for our ability to handle upgrades properly because the complete lack of any formal specification completely obscures whether we\u0027ve done a incompatible change. We\u0027re already suffering from these type of problems elsewhere in the driver code and I\u0027ve no desire to make it worse by repeating our past design mistakes","commit_id":"d57a1ad9a4b2951c024a75f9f884c8f7b8e68d44"},{"author":{"_account_id":1313,"name":"yaguang","display_name":"Yaguang Tang","email":"heut2008@gmail.com","username":"heut2008"},"change_message_id":"3287cbd30fe10a98efff07ebea735f9fe9f8438a","unresolved":false,"context_lines":[{"line_number":4224,"context_line":"    def get_instance_cpu_config(self, context, flavor, image_meta):"},{"line_number":4225,"context_line":"        \"\"\"Retrieve instance xml config infomation.\"\"\""},{"line_number":4226,"context_line":"        cpu \u003d self._get_guest_cpu_config(flavor, image_meta)"},{"line_number":4227,"context_line":"        return cpu.to_xml()"},{"line_number":4228,"context_line":""},{"line_number":4229,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"},{"line_number":4230,"context_line":"        dirpath \u003d libvirt_utils.get_instance_path(instance)"}],"source_content_type":"text/x-python","patch_set":24,"id":"7ac7a964_7ef37373","line":4227,"in_reply_to":"baada198_eaa09e44","updated":"2014-08-14 09:46:36.000000000","message":"As a bug fix, I really want to fix the bug ASAP, the common data format in virt may be need a specs to document, I don\u0027t know where else  and how it will be used so I am prefer in the future, we extend if necessary.","commit_id":"d57a1ad9a4b2951c024a75f9f884c8f7b8e68d44"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"b7d996efbf6284776a40d983a183489a65dc98aa","unresolved":false,"context_lines":[{"line_number":4224,"context_line":"    def get_instance_cpu_config(self, context, flavor, image_meta):"},{"line_number":4225,"context_line":"        \"\"\"Retrieve instance xml config infomation.\"\"\""},{"line_number":4226,"context_line":"        cpu \u003d self._get_guest_cpu_config(flavor, image_meta)"},{"line_number":4227,"context_line":"        return cpu.to_xml()"},{"line_number":4228,"context_line":""},{"line_number":4229,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"},{"line_number":4230,"context_line":"        dirpath \u003d libvirt_utils.get_instance_path(instance)"}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_eaa09e44","line":4227,"in_reply_to":"baada198_f48403d5","updated":"2014-07-29 16:16:18.000000000","message":"I think it is entirely reasonable to define a format that is flexible enough to cope with both in the long run. We don\u0027t need to require that every driver support every last detail of the format.","commit_id":"d57a1ad9a4b2951c024a75f9f884c8f7b8e68d44"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"6447e59b851158eb0c7db2b70068a50ccc542530","unresolved":false,"context_lines":[{"line_number":4469,"context_line":"        # NOTE(berendt): virConnectCompareCPU not working for Xen"},{"line_number":4470,"context_line":"        if CONF.libvirt.virt_type \u003d\u003d \u0027xen\u0027:"},{"line_number":4471,"context_line":"            return 1"},{"line_number":4472,"context_line":"        #NOTE(yaguang): Instance CPU model isn\u0027t specified in XML, needn\u0027t to"},{"line_number":4473,"context_line":"        # check CPU compatibility."},{"line_number":4474,"context_line":"        if cpu_info is None:"},{"line_number":4475,"context_line":"            return 1"}],"source_content_type":"text/x-python","patch_set":25,"id":"1abeadc6_823ac434","line":4472,"range":{"start_line":4472,"start_character":8,"end_line":4472,"end_character":22},"updated":"2014-08-17 18:35:41.000000000","message":"E265 block comment should start with \u0027# \u0027","commit_id":"9a6036228993f7f8e7335e1aff4c8d63a133cedb"},{"author":{"_account_id":7975,"name":"Pavel Kirpichyov","email":"pavel.kirpichyov@gmail.com","username":"Cheshire"},"change_message_id":"a5406fa6ee89ecc9d1da3444dd421f0630adbe1c","unresolved":false,"context_lines":[{"line_number":4474,"context_line":"        if cpu_info is None:"},{"line_number":4475,"context_line":"            return 1"},{"line_number":4476,"context_line":""},{"line_number":4477,"context_line":"        info \u003d jsonutils.loads(cpu_info)"},{"line_number":4478,"context_line":"        LOG.info(_LI(\u0027Instance launched has CPU info: %s\u0027), cpu_info)"},{"line_number":4479,"context_line":"        cpu \u003d vconfig.LibvirtConfigCPU()"},{"line_number":4480,"context_line":"        cpu.arch \u003d info[\u0027arch\u0027]"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa98f980_3af23e06","line":4477,"updated":"2014-09-13 09:54:17.000000000","message":"Will be crashed here, becouse cpu_info is not json, it\u0027s xml. Anyway \"cpu\" is not used anymore and can be deleted","commit_id":"9a6036228993f7f8e7335e1aff4c8d63a133cedb"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"8d69af3df6fe33505073dce8cd2701d36e58c690","unresolved":false,"context_lines":[{"line_number":4725,"context_line":"        :return: a nova.virt.hardware.VirtCPUModel object"},{"line_number":4726,"context_line":""},{"line_number":4727,"context_line":"        \"\"\""},{"line_number":4728,"context_line":""},{"line_number":4729,"context_line":"        caps \u003d self._get_host_capabilities()"},{"line_number":4730,"context_line":"        cpu \u003d caps.host.cpu"},{"line_number":4731,"context_line":"        features \u003d [hardware.VirtCPUFeature("}],"source_content_type":"text/x-python","patch_set":36,"id":"5a890539_ff72e7e1","side":"PARENT","line":4728,"updated":"2014-11-12 09:32:42.000000000","message":"?","commit_id":"529d4bf4dc9acb2892f0d81f667d796c18433c0c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1541923feaa78c738d8b9b904f75bf5fd32dce0d","unresolved":false,"context_lines":[{"line_number":3893,"context_line":""},{"line_number":3894,"context_line":"        return vcpu_model"},{"line_number":3895,"context_line":""},{"line_number":3896,"context_line":"    def _vcpu_model_to_cpu_config(self, vcpu_model, cpu_config):"},{"line_number":3897,"context_line":"        if not vcpu_model:"},{"line_number":3898,"context_line":"            return"},{"line_number":3899,"context_line":"        if not cpu_config:"}],"source_content_type":"text/x-python","patch_set":44,"id":"da86d52c_cb767c3f","line":3896,"updated":"2015-02-13 13:25:02.000000000","message":"Docstring please, including expected and return types.","commit_id":"21111de7af6a9b44d5fb3909cc1ee409766b1777"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"0cb6d69fa38516e4f3ecec3696256ff67fff0446","unresolved":false,"context_lines":[{"line_number":3893,"context_line":""},{"line_number":3894,"context_line":"        return vcpu_model"},{"line_number":3895,"context_line":""},{"line_number":3896,"context_line":"    def _vcpu_model_to_cpu_config(self, vcpu_model, cpu_config):"},{"line_number":3897,"context_line":"        if not vcpu_model:"},{"line_number":3898,"context_line":"            return"},{"line_number":3899,"context_line":"        if not cpu_config:"}],"source_content_type":"text/x-python","patch_set":44,"id":"da86d52c_2f1e32bc","line":3896,"in_reply_to":"da86d52c_cb767c3f","updated":"2015-02-13 20:21:32.000000000","message":"Done","commit_id":"21111de7af6a9b44d5fb3909cc1ee409766b1777"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1541923feaa78c738d8b9b904f75bf5fd32dce0d","unresolved":false,"context_lines":[{"line_number":3895,"context_line":""},{"line_number":3896,"context_line":"    def _vcpu_model_to_cpu_config(self, vcpu_model, cpu_config):"},{"line_number":3897,"context_line":"        if not vcpu_model:"},{"line_number":3898,"context_line":"            return"},{"line_number":3899,"context_line":"        if not cpu_config:"},{"line_number":3900,"context_line":"            cpu_config \u003d vconfig.LibvirtConfigGuestCPU()"},{"line_number":3901,"context_line":"        cpu_config.arch \u003d vcpu_model.arch"}],"source_content_type":"text/x-python","patch_set":44,"id":"da86d52c_cb0d9c37","line":3898,"updated":"2015-02-13 13:25:02.000000000","message":"vcpu_model is never None. Please remove lines 3897-3898","commit_id":"21111de7af6a9b44d5fb3909cc1ee409766b1777"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"0cb6d69fa38516e4f3ecec3696256ff67fff0446","unresolved":false,"context_lines":[{"line_number":3895,"context_line":""},{"line_number":3896,"context_line":"    def _vcpu_model_to_cpu_config(self, vcpu_model, cpu_config):"},{"line_number":3897,"context_line":"        if not vcpu_model:"},{"line_number":3898,"context_line":"            return"},{"line_number":3899,"context_line":"        if not cpu_config:"},{"line_number":3900,"context_line":"            cpu_config \u003d vconfig.LibvirtConfigGuestCPU()"},{"line_number":3901,"context_line":"        cpu_config.arch \u003d vcpu_model.arch"}],"source_content_type":"text/x-python","patch_set":44,"id":"da86d52c_6f774a09","line":3898,"in_reply_to":"da86d52c_cb0d9c37","updated":"2015-02-13 20:21:32.000000000","message":"Done","commit_id":"21111de7af6a9b44d5fb3909cc1ee409766b1777"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1541923feaa78c738d8b9b904f75bf5fd32dce0d","unresolved":false,"context_lines":[{"line_number":3897,"context_line":"        if not vcpu_model:"},{"line_number":3898,"context_line":"            return"},{"line_number":3899,"context_line":"        if not cpu_config:"},{"line_number":3900,"context_line":"            cpu_config \u003d vconfig.LibvirtConfigGuestCPU()"},{"line_number":3901,"context_line":"        cpu_config.arch \u003d vcpu_model.arch"},{"line_number":3902,"context_line":"        cpu_config.model \u003d vcpu_model.model"},{"line_number":3903,"context_line":"        cpu_config.mode \u003d vcpu_model.mode"}],"source_content_type":"text/x-python","patch_set":44,"id":"da86d52c_2bfd5809","line":3900,"updated":"2015-02-13 13:25:02.000000000","message":"cpu_config is *always* None. Just remove line 3899 and de-indent line 3900. Also, there\u0027s no need to include a cpu_config parameter at all. Just remove that param and return the constructed LibvirtConfigGuestCPU object.","commit_id":"21111de7af6a9b44d5fb3909cc1ee409766b1777"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"0cb6d69fa38516e4f3ecec3696256ff67fff0446","unresolved":false,"context_lines":[{"line_number":3897,"context_line":"        if not vcpu_model:"},{"line_number":3898,"context_line":"            return"},{"line_number":3899,"context_line":"        if not cpu_config:"},{"line_number":3900,"context_line":"            cpu_config \u003d vconfig.LibvirtConfigGuestCPU()"},{"line_number":3901,"context_line":"        cpu_config.arch \u003d vcpu_model.arch"},{"line_number":3902,"context_line":"        cpu_config.model \u003d vcpu_model.model"},{"line_number":3903,"context_line":"        cpu_config.mode \u003d vcpu_model.mode"}],"source_content_type":"text/x-python","patch_set":44,"id":"da86d52c_8f7c7eed","line":3900,"in_reply_to":"da86d52c_2bfd5809","updated":"2015-02-13 20:21:32.000000000","message":"Done.","commit_id":"21111de7af6a9b44d5fb3909cc1ee409766b1777"}]}
