)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"a1029b2771400a399c100d46551f3b6427c8f9cb","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: enable virtio-net multiqueue"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add supoort to enable the virtio-net multiqueue feature for guest"},{"line_number":10,"context_line":"instances."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"With virtio-net multiqueue enabled network performance can be scaled"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"1a4dcd0f_2e188e74","line":9,"updated":"2015-08-06 08:13:44.000000000","message":"s/supoort/support/;","commit_id":"9a09674220a071e51fdca7911b52c0027c01ff64"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a73940e3b2b9a4440964f36ffd57d34444fc1af9","unresolved":false,"context_lines":[{"line_number":536,"context_line":"                       imagebackend.Image._get_driver_format)"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        self.useFixture(fakelibvirt.FakeLibvirtFixture())"},{"line_number":539,"context_line":"        mock.patch.object(host.Host, \"has_min_version\", return_value\u003dTrue)"},{"line_number":540,"context_line":"        self.test_instance \u003d _create_test_instance()"},{"line_number":541,"context_line":"        self.image_service \u003d nova.tests.unit.image.fake.stub_out_image_service("},{"line_number":542,"context_line":"                self.stubs)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_3de66715","line":539,"updated":"2015-08-06 16:51:51.000000000","message":"What is this?  This probably in no way does what you expected it to.","commit_id":"9a09674220a071e51fdca7911b52c0027c01ff64"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"3297783b7a2c8c13413d959edc641c6e814aec5c","unresolved":false,"context_lines":[{"line_number":536,"context_line":"                       imagebackend.Image._get_driver_format)"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        self.useFixture(fakelibvirt.FakeLibvirtFixture())"},{"line_number":539,"context_line":"        mock.patch.object(host.Host, \"has_min_version\", return_value\u003dTrue)"},{"line_number":540,"context_line":"        self.test_instance \u003d _create_test_instance()"},{"line_number":541,"context_line":"        self.image_service \u003d nova.tests.unit.image.fake.stub_out_image_service("},{"line_number":542,"context_line":"                self.stubs)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_02173c52","line":539,"in_reply_to":"1a4dcd0f_3de66715","updated":"2015-08-17 18:19:41.000000000","message":"Well the code behind this method changed, without this mock that return True the test will fail","commit_id":"9a09674220a071e51fdca7911b52c0027c01ff64"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dfb0dea5d3d599e16777037a916f2ef48503809f","unresolved":false,"context_lines":[{"line_number":536,"context_line":"                       imagebackend.Image._get_driver_format)"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        self.useFixture(fakelibvirt.FakeLibvirtFixture())"},{"line_number":539,"context_line":"        mock.patch.object(host.Host, \"has_min_version\", return_value\u003dTrue)"},{"line_number":540,"context_line":"        self.test_instance \u003d _create_test_instance()"},{"line_number":541,"context_line":"        self.image_service \u003d nova.tests.unit.image.fake.stub_out_image_service("},{"line_number":542,"context_line":"                self.stubs)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_32116fad","line":539,"in_reply_to":"fa1b9901_02173c52","updated":"2015-08-17 19:34:59.000000000","message":"I had removed this in another change and the tests passed since it\u0027s mocked via decorators in the test cases that actually need it.\n\nThis is also done incorrectly - if you\u0027re going to do it like this, you get a patcher back which you start and then have to cleanup by calling stop() on it later, which is especially dangerous in a setUp method, as noted in the docs:\n\nhttps://docs.python.org/3/library/unittest.mock.html#patch-methods-start-and-stop\n\n\"Caution If you use this technique you must ensure that the patching is “undone” by calling stop. This can be fiddlier than you might think, because if an exception is raised in the setUp then tearDown is not called.\"\n\nTurns out that there were more problems beyond this which danpb fixed.","commit_id":"9a09674220a071e51fdca7911b52c0027c01ff64"}],"nova/tests/unit/virt/libvirt/test_vif.py":[{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"ce4b73d7c054a49d1bda0d5ea77b80c8ad331122","unresolved":false,"context_lines":[{"line_number":430,"context_line":"        d \u003d vif.LibvirtGenericVIFDriver()"},{"line_number":431,"context_line":"        image_meta \u003d {\u0027properties\u0027: {\u0027hw_vif_model\u0027: \u0027virtio\u0027,"},{"line_number":432,"context_line":"                                     \u0027hw_vif_multiqueue_enabled\u0027: \u0027true\u0027}}"},{"line_number":433,"context_line":"        xml \u003d self._get_instance_xml(d, self.vif_bridge,"},{"line_number":434,"context_line":"                                     image_meta, flavor)"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        node \u003d self._get_node(xml)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_7bf7d859","line":433,"updated":"2015-07-10 07:31:03.000000000","message":"maybe add another test verfiying that for vhostuser vifs multiqueing is not set? (e.g. extend the vhostuser test?)","commit_id":"6dbe999e528aed08711b7a2201aa536b91384424"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"a1d2c2fa66b59d50a0c642a2828fe318613990ca","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    def test_virtio_multiqueue(self):"},{"line_number":419,"context_line":"        self.flags(use_virtio_for_bridges\u003dTrue,"},{"line_number":420,"context_line":"                   virt_type\u003d\u0027kvm\u0027,"},{"line_number":421,"context_line":"                   group\u003d\u0027libvirt\u0027)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        flavor \u003d objects.Flavor(name\u003d\u0027m1.small\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_8f7f1c14","line":420,"updated":"2015-07-16 07:44:19.000000000","message":"I personally would like to see an additional test that verifies that at least for qemu the driver is not being overiden but still set to \u0027qemu\u0027. I think you could achieve this easily in the \"_test_model_qemu\" method. You should just enrich the call to get the instance xml with your image_meta. The last assert in the method (_assertModel) already checks that qemu is used as driver.","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"9a6dd2c66186ffe091dc43c5d2d5cd99e41165c4","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    def test_virtio_multiqueue(self):"},{"line_number":419,"context_line":"        self.flags(use_virtio_for_bridges\u003dTrue,"},{"line_number":420,"context_line":"                   virt_type\u003d\u0027kvm\u0027,"},{"line_number":421,"context_line":"                   group\u003d\u0027libvirt\u0027)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        flavor \u003d objects.Flavor(name\u003d\u0027m1.small\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_a42db8ff","line":420,"in_reply_to":"3a50d1a3_4413b066","updated":"2015-07-22 07:35:47.000000000","message":"I\u0027m coming from the Test driven development corner (I know that this is not the claim of Openstack). But let me ask a question: What would happen if, someone changes your condition in the production code (for whatever reasons) from\n\n(virt_type \u003d\u003d \u0027kvm\u0027 and\t model \u003d\u003d network_model.VIF_MODEL_VIRTIO)\n\nto just\n\n(model \u003d\u003d network_model.VIF_MODEL_VIRTIO)\n\nThis code change would not cause any failing unittest. And now you would be able to use qemu as well, although this use case is technically not supported. Today the qemu test doesn\u0027t execute your path, as the metadata is not available. Verifying that qemu can NOT be used nearly comes for free (by modifying 1 line) like described in my comment above. (At least I assume so - haven\u0027t tested it). So why not do gain better test coverage it if it is that easy?","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"a9e4191c4508a5b5593da2ecf47e298af7245b93","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    def test_virtio_multiqueue(self):"},{"line_number":419,"context_line":"        self.flags(use_virtio_for_bridges\u003dTrue,"},{"line_number":420,"context_line":"                   virt_type\u003d\u0027kvm\u0027,"},{"line_number":421,"context_line":"                   group\u003d\u0027libvirt\u0027)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        flavor \u003d objects.Flavor(name\u003d\u0027m1.small\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_4413b066","line":420,"in_reply_to":"9a41bdd9_8f7f1c14","updated":"2015-07-21 18:56:19.000000000","message":"I don\u0027t see how this is related to my change.","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"a1d2c2fa66b59d50a0c642a2828fe318613990ca","unresolved":false,"context_lines":[{"line_number":433,"context_line":"                    id\u003d2, disabled\u003dFalse, rxtx_factor\u003d1.0)"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        d \u003d vif.LibvirtGenericVIFDriver()"},{"line_number":436,"context_line":"        image_meta \u003d {\u0027properties\u0027: {\u0027hw_vif_model\u0027: \u0027virtio\u0027,"},{"line_number":437,"context_line":"                                     \u0027hw_vif_multiqueue_enabled\u0027: \u0027true\u0027}}"},{"line_number":438,"context_line":"        xml \u003d self._get_instance_xml(d, self.vif_bridge,"},{"line_number":439,"context_line":"                                     image_meta, flavor)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_8c7acabb","line":436,"updated":"2015-07-16 07:44:19.000000000","message":"make this a class variable, as it\u0027s used in your other test as well. Name it to \"multiqueue_image_meta\" or similar.","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"a1d2c2fa66b59d50a0c642a2828fe318613990ca","unresolved":false,"context_lines":[{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        node \u003d self._get_node(xml)"},{"line_number":442,"context_line":"        driver \u003d node.find(\"driver\").get(\"name\")"},{"line_number":443,"context_line":"        self.assertEqual(driver, \u0027vhost\u0027)"},{"line_number":444,"context_line":"        queues \u003d node.find(\"driver\").get(\"queues\")"},{"line_number":445,"context_line":"        self.assertEqual(queues, \u00274\u0027)"},{"line_number":446,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_4c75a22f","line":443,"updated":"2015-07-16 07:44:19.000000000","message":"Please change all your assertEqual(observed, expected) to assertEqual(expected, observed). (This was also new to me!) See [1]\n\n[1] https://bugs.launchpad.net/heat/+bug/1259292","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"a9e4191c4508a5b5593da2ecf47e298af7245b93","unresolved":false,"context_lines":[{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        node \u003d self._get_node(xml)"},{"line_number":442,"context_line":"        driver \u003d node.find(\"driver\").get(\"name\")"},{"line_number":443,"context_line":"        self.assertEqual(driver, \u0027vhost\u0027)"},{"line_number":444,"context_line":"        queues \u003d node.find(\"driver\").get(\"queues\")"},{"line_number":445,"context_line":"        self.assertEqual(queues, \u00274\u0027)"},{"line_number":446,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_ef33f6f4","line":443,"in_reply_to":"9a41bdd9_4c75a22f","updated":"2015-07-21 18:56:19.000000000","message":"You are right, however, all of this file is performs these validations in an opposite way, I\u0027m just being consistent.\nI think I\u0027ll just push a following patch to replace it all at once.","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"9a6dd2c66186ffe091dc43c5d2d5cd99e41165c4","unresolved":false,"context_lines":[{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        node \u003d self._get_node(xml)"},{"line_number":442,"context_line":"        driver \u003d node.find(\"driver\").get(\"name\")"},{"line_number":443,"context_line":"        self.assertEqual(driver, \u0027vhost\u0027)"},{"line_number":444,"context_line":"        queues \u003d node.find(\"driver\").get(\"queues\")"},{"line_number":445,"context_line":"        self.assertEqual(queues, \u00274\u0027)"},{"line_number":446,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_e18e5278","line":443,"in_reply_to":"9a41bdd9_ef33f6f4","updated":"2015-07-22 07:35:47.000000000","message":"ok","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"a1d2c2fa66b59d50a0c642a2828fe318613990ca","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        driver \u003d node.find(\"driver\").get(\"name\")"},{"line_number":443,"context_line":"        self.assertEqual(driver, \u0027vhost\u0027)"},{"line_number":444,"context_line":"        queues \u003d node.find(\"driver\").get(\"queues\")"},{"line_number":445,"context_line":"        self.assertEqual(queues, \u00274\u0027)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_multiple_nics(self):"},{"line_number":448,"context_line":"        conf \u003d self._get_conf()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_ccfc5274","line":445,"updated":"2015-07-16 07:44:19.000000000","message":"same here","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"a1d2c2fa66b59d50a0c642a2828fe318613990ca","unresolved":false,"context_lines":[{"line_number":1169,"context_line":"                                     \u0027hw_vif_multiqueue_enabled\u0027: \u0027true\u0027}}"},{"line_number":1170,"context_line":"        xml \u003d self._get_instance_xml(d, self.vif_vhostuser, image_meta)"},{"line_number":1171,"context_line":"        node \u003d self._get_node(xml)"},{"line_number":1172,"context_line":"        self.assertEqual(node.get(\"type\"),"},{"line_number":1173,"context_line":"                         network_model.VIF_TYPE_VHOSTUSER)"},{"line_number":1174,"context_line":"        self._assertMacEquals(node, self.vif_vhostuser)"},{"line_number":1175,"context_line":"        driver \u003d node.find(\"driver\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_ecffd663","line":1172,"updated":"2015-07-16 07:44:19.000000000","message":"same here","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"a1d2c2fa66b59d50a0c642a2828fe318613990ca","unresolved":false,"context_lines":[{"line_number":1175,"context_line":"        driver \u003d node.find(\"driver\")"},{"line_number":1176,"context_line":"        self.assertIsNone(driver, None)"},{"line_number":1177,"context_line":""},{"line_number":1178,"context_line":"    def test_vhostuser_driver_noI_path(self):"},{"line_number":1179,"context_line":"        d \u003d vif.LibvirtGenericVIFDriver()"},{"line_number":1180,"context_line":""},{"line_number":1181,"context_line":"        self.assertRaises(exception.VifDetailsMissingVhostuserSockPath,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_6fa738a7","line":1178,"updated":"2015-07-16 07:44:19.000000000","message":"remove that added \u0027I\u0027?","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"a9e4191c4508a5b5593da2ecf47e298af7245b93","unresolved":false,"context_lines":[{"line_number":1175,"context_line":"        driver \u003d node.find(\"driver\")"},{"line_number":1176,"context_line":"        self.assertIsNone(driver, None)"},{"line_number":1177,"context_line":""},{"line_number":1178,"context_line":"    def test_vhostuser_driver_noI_path(self):"},{"line_number":1179,"context_line":"        d \u003d vif.LibvirtGenericVIFDriver()"},{"line_number":1180,"context_line":""},{"line_number":1181,"context_line":"        self.assertRaises(exception.VifDetailsMissingVhostuserSockPath,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_cf863265","line":1178,"in_reply_to":"9a41bdd9_6fa738a7","updated":"2015-07-21 18:56:19.000000000","message":"Done","commit_id":"372f7002c5d0dce928450121725a017163accc70"}],"nova/virt/libvirt/designer.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"b84180a1524f52eaf658ccd0f68409af69b5e80b","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova.pci import utils as pci_utils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def set_vif_guest_frontend_config(conf, mac, model, driver, driver_opts\u003dNone):"},{"line_number":26,"context_line":"    \"\"\"Populate a LibvirtConfigGuestInterface instance"},{"line_number":27,"context_line":"    with guest frontend details."},{"line_number":28,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_9d3dd7bd","line":25,"updated":"2015-05-15 13:59:04.000000000","message":"Don\u0027t pass in free-form dicts here - use explicit parameters","commit_id":"fa12c3de5cf4c97e4cb41aa7f3f274dbfffaca82"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"ce4b73d7c054a49d1bda0d5ea77b80c8ad331122","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    conf.vhostuser_type \u003d \"unix\""},{"line_number":153,"context_line":"    conf.vhostuser_mode \u003d mode"},{"line_number":154,"context_line":"    conf.vhostuser_path \u003d path"},{"line_number":155,"context_line":"    conf.driver_name \u003d None"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"def set_vif_bandwidth_config(conf, inst_type):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_1bc56c09","line":155,"updated":"2015-07-10 07:31:03.000000000","message":"So this value ensures, that vhostuser never configures multiqueueing. If a user requested multiqueuing but it cannot be served, as he is using vhostuser interface, will there be any warning or so?","commit_id":"6dbe999e528aed08711b7a2201aa536b91384424"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"a1d2c2fa66b59d50a0c642a2828fe318613990ca","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    conf.vhostuser_type \u003d \"unix\""},{"line_number":155,"context_line":"    conf.vhostuser_mode \u003d mode"},{"line_number":156,"context_line":"    conf.vhostuser_path \u003d path"},{"line_number":157,"context_line":"    conf.driver_name \u003d None"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"def set_vif_bandwidth_config(conf, inst_type):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_5869ddf7","line":157,"updated":"2015-07-16 07:44:19.000000000","message":"Could you add a little comment that you\u0027re overriding a potentially set driver_name as vhostuser does not support such a name at all? From just looking at this code it\u0027s not clear to me that you\u0027re overriding something.","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"a9e4191c4508a5b5593da2ecf47e298af7245b93","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    conf.vhostuser_type \u003d \"unix\""},{"line_number":155,"context_line":"    conf.vhostuser_mode \u003d mode"},{"line_number":156,"context_line":"    conf.vhostuser_path \u003d path"},{"line_number":157,"context_line":"    conf.driver_name \u003d None"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"def set_vif_bandwidth_config(conf, inst_type):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_b442630d","line":157,"in_reply_to":"9a41bdd9_5869ddf7","updated":"2015-07-21 18:56:19.000000000","message":"It doesn\u0027t override anything.\nMethods in this module are providing settings for classes in config.py\nHence this is the place that sets the policy. In this case, vhostuser should not be configured with a driver.\n\nWith that said, I\u0027m going to remove this default in the next patch, as vhostuser queues will be available in libvirt version 1.2.17","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"9a6dd2c66186ffe091dc43c5d2d5cd99e41165c4","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    conf.vhostuser_type \u003d \"unix\""},{"line_number":155,"context_line":"    conf.vhostuser_mode \u003d mode"},{"line_number":156,"context_line":"    conf.vhostuser_path \u003d path"},{"line_number":157,"context_line":"    conf.driver_name \u003d None"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"def set_vif_bandwidth_config(conf, inst_type):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_41c4e68f","line":157,"in_reply_to":"9a41bdd9_b442630d","updated":"2015-07-22 07:35:47.000000000","message":"having a look at the code, the flow is like this:\n\nget_config_vhostuser\n\n - get_base_config: calculates queues, if kvm \u0026 virtio and requested by metadata\n\n -- set_vif_guest_frontend_config: sets driver and queues to conf\n\n - designer.set_vif_host_backend_vhostuser_config: is overriding the driver again with the None here\n\nDid I miss a point?\n\nAnyhow, you moved it out of the get_config method, which seems to be a better place for it.","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"b9a6bfe9de7a47e598cd042013e87fa9428b93aa","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        conf.model \u003d model"},{"line_number":34,"context_line":"    if driver is not None:"},{"line_number":35,"context_line":"        conf.driver_name \u003d driver"},{"line_number":36,"context_line":"    if queues is not None:"},{"line_number":37,"context_line":"        conf.vhost_queues \u003d queues"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_9d0f9238","line":36,"updated":"2015-08-06 10:07:15.000000000","message":"vhost_queues is None by default on the config object so this check is not really needed but meh","commit_id":"9a09674220a071e51fdca7911b52c0027c01ff64"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"10e049e8c782acbcbab79dc26a3a22de9048d702","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            host\u003dself._host)"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        self.vif_driver \u003d libvirt_vif.LibvirtGenericVIFDriver()"},{"line_number":422,"context_line":"        self.vif_driver.support_vhostuser_mq \u003d self._host.has_min_version("},{"line_number":423,"context_line":"                                                      MIN_LIBVIRT_VHOSTUSER_MQ)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        self.volume_drivers \u003d driver.driver_dict_from_config("}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_33c1de2f","line":422,"updated":"2015-07-28 11:32:27.000000000","message":"would it no be better to set this value from within LibvirtGenericVIFDriver?\nYou can pass the MIN_LIBVIRT_VHOSTUSER_MQ as a parameter","commit_id":"21d1a9c10a8cf8733963b6c6ac2c47dcc98c4481"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"dcb1ce4c61b3174337b2936fa4d61a947be55fd8","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            host\u003dself._host)"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        self.vif_driver \u003d libvirt_vif.LibvirtGenericVIFDriver()"},{"line_number":422,"context_line":"        self.vif_driver.support_vhostuser_mq \u003d self._host.has_min_version("},{"line_number":423,"context_line":"                                                      MIN_LIBVIRT_VHOSTUSER_MQ)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        self.volume_drivers \u003d driver.driver_dict_from_config("}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_abd9ee57","line":422,"in_reply_to":"3a50d1a3_33c1de2f","updated":"2015-07-28 14:40:39.000000000","message":"In that case I will have to pass self._host as well.\nMy concern is that the LibvirtGenericVIFDriver was a configuration only class, so far and I wanted to keep it this way.\nDidn\u0027t want to call libvirt for the version check, from within that class..","commit_id":"21d1a9c10a8cf8733963b6c6ac2c47dcc98c4481"}],"nova/virt/libvirt/vif.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4c659e6ae36f9be18edbe742ee1f477f6119b8be","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        vhost_queues \u003d None"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        if (image_meta and image_meta.get(\u0027properties\u0027, {})"},{"line_number":150,"context_line":"            .get(\u0027hw_vif_multiqueue_enabled\u0027, \u0027false\u0027).lower() \u003d\u003d \u0027true\u0027):"},{"line_number":151,"context_line":"            driver \u003d \u0027vhost\u0027"},{"line_number":152,"context_line":"            vhost_queues \u003d flavor.vcpus"},{"line_number":153,"context_line":"        return (driver, vhost_queues)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_4900ce01","line":150,"range":{"start_line":150,"start_character":18,"end_line":150,"end_character":43},"updated":"2015-06-30 14:16:13.000000000","message":"You need to add hw_vif_multiqueue_enabled to the image metadata object. Please see https://github.com/openstack/nova/blob/master/nova/objects/image_meta.py#L106\nI suggest that you do that on another patch","commit_id":"34cab8f94530103d8744e4c68c6fa7fbc542e537"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"cadbd0ec72904b358d386e1fdd17850b488b27de","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        vhost_queues \u003d None"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        if (image_meta and image_meta.get(\u0027properties\u0027, {})"},{"line_number":150,"context_line":"            .get(\u0027hw_vif_multiqueue_enabled\u0027, \u0027false\u0027).lower() \u003d\u003d \u0027true\u0027):"},{"line_number":151,"context_line":"            driver \u003d \u0027vhost\u0027"},{"line_number":152,"context_line":"            vhost_queues \u003d flavor.vcpus"},{"line_number":153,"context_line":"        return (driver, vhost_queues)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_8421dbfd","line":150,"in_reply_to":"ba3cc151_4900ce01","updated":"2015-06-30 14:41:25.000000000","message":"You are right and I will.\n\nHowever, I didn\u0027t want enable the use this object here, as I\u0027m waiting for this series to be merged, which fixes bugs around it\u0027s usage: https://review.openstack.org/#/q/status:open+project:openstack/nova+branch:master+topic:virtimageprops-17,n,z\n\nI\u0027m using dict here as it was suggested in https://review.openstack.org/#/c/188789/6/nova/tests/unit/virt/libvirt/test_driver.py\nonce the series is merged I\u0027ll switch to the object.","commit_id":"34cab8f94530103d8744e4c68c6fa7fbc542e537"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"ce4b73d7c054a49d1bda0d5ea77b80c8ad331122","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                                           model):"},{"line_number":129,"context_line":"            raise exception.UnsupportedHardware(model\u003dmodel,"},{"line_number":130,"context_line":"                                                virt\u003dvirt_type)"},{"line_number":131,"context_line":"        if (virt_type \u003d\u003d \u0027kvm\u0027 and"},{"line_number":132,"context_line":"            model \u003d\u003d network_model.VIF_MODEL_VIRTIO):"},{"line_number":133,"context_line":"            vhost_drv, vhost_queues \u003d self._get_virtio_mq_settings(image_meta,"},{"line_number":134,"context_line":"                                                                   inst_type)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_5b4774bc","line":131,"updated":"2015-07-10 07:31:03.000000000","message":"is qemu not supported?","commit_id":"6dbe999e528aed08711b7a2201aa536b91384424"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"9594ee2a7bf7ff06f37656653b8dc58a971e75a4","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                                           model):"},{"line_number":129,"context_line":"            raise exception.UnsupportedHardware(model\u003dmodel,"},{"line_number":130,"context_line":"                                                virt\u003dvirt_type)"},{"line_number":131,"context_line":"        if (virt_type \u003d\u003d \u0027kvm\u0027 and"},{"line_number":132,"context_line":"            model \u003d\u003d network_model.VIF_MODEL_VIRTIO):"},{"line_number":133,"context_line":"            vhost_drv, vhost_queues \u003d self._get_virtio_mq_settings(image_meta,"},{"line_number":134,"context_line":"                                                                   inst_type)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_ad742636","line":131,"in_reply_to":"ba3cc151_5b4774bc","updated":"2015-07-14 13:36:47.000000000","message":"vhost doesn\u0027t work with qemu. You need to use \u0027qemu\u0027 driver with virtio, as it is on line 123.","commit_id":"6dbe999e528aed08711b7a2201aa536b91384424"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"a1d2c2fa66b59d50a0c642a2828fe318613990ca","unresolved":false,"context_lines":[{"line_number":372,"context_line":"                                                        vif_id\u003dvif[\u0027id\u0027])"},{"line_number":373,"context_line":"        designer.set_vif_host_backend_vhostuser_config(conf, mode, sock_path)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"        if (image_meta and image_meta.get(\u0027properties\u0027, {})"},{"line_number":376,"context_line":"            .get(\u0027hw_vif_multiqueue_enabled\u0027, \u0027false\u0027).lower() \u003d\u003d \u0027true\u0027):"},{"line_number":377,"context_line":"            LOG.debug(\u0027Queues are not a vhostuser supported feature.\u0027)"},{"line_number":378,"context_line":"        return conf"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_58f47d59","line":375,"updated":"2015-07-16 07:44:19.000000000","message":"Could you refactor this \"if\" to a separate method like \"is_hw_vif_multiqueue_enabled(self, image_meta)\". It\u0027s just duplicated code with the if in _get_virtio_mq_settings above. And it would make the code more readable!","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"9a6dd2c66186ffe091dc43c5d2d5cd99e41165c4","unresolved":false,"context_lines":[{"line_number":372,"context_line":"                                                        vif_id\u003dvif[\u0027id\u0027])"},{"line_number":373,"context_line":"        designer.set_vif_host_backend_vhostuser_config(conf, mode, sock_path)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"        if (image_meta and image_meta.get(\u0027properties\u0027, {})"},{"line_number":376,"context_line":"            .get(\u0027hw_vif_multiqueue_enabled\u0027, \u0027false\u0027).lower() \u003d\u003d \u0027true\u0027):"},{"line_number":377,"context_line":"            LOG.debug(\u0027Queues are not a vhostuser supported feature.\u0027)"},{"line_number":378,"context_line":"        return conf"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_c17b168b","line":375,"in_reply_to":"3a50d1a3_34100f01","updated":"2015-07-22 07:35:47.000000000","message":"makes sense","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"a9e4191c4508a5b5593da2ecf47e298af7245b93","unresolved":false,"context_lines":[{"line_number":372,"context_line":"                                                        vif_id\u003dvif[\u0027id\u0027])"},{"line_number":373,"context_line":"        designer.set_vif_host_backend_vhostuser_config(conf, mode, sock_path)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"        if (image_meta and image_meta.get(\u0027properties\u0027, {})"},{"line_number":376,"context_line":"            .get(\u0027hw_vif_multiqueue_enabled\u0027, \u0027false\u0027).lower() \u003d\u003d \u0027true\u0027):"},{"line_number":377,"context_line":"            LOG.debug(\u0027Queues are not a vhostuser supported feature.\u0027)"},{"line_number":378,"context_line":"        return conf"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_34100f01","line":375,"in_reply_to":"9a41bdd9_58f47d59","updated":"2015-07-21 18:56:19.000000000","message":"Next will have only one check.\nMoreover, all of this if statement is going to be replaced with ImageMetaProps object, when this series will be merged: https://review.openstack.org/#/q/status:open+project:openstack/nova+branch:master+topic:virtimageprops-17,n,z\n\nIMHO, It is better to keep this as one part to replace it easily.","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"a1d2c2fa66b59d50a0c642a2828fe318613990ca","unresolved":false,"context_lines":[{"line_number":374,"context_line":""},{"line_number":375,"context_line":"        if (image_meta and image_meta.get(\u0027properties\u0027, {})"},{"line_number":376,"context_line":"            .get(\u0027hw_vif_multiqueue_enabled\u0027, \u0027false\u0027).lower() \u003d\u003d \u0027true\u0027):"},{"line_number":377,"context_line":"            LOG.debug(\u0027Queues are not a vhostuser supported feature.\u0027)"},{"line_number":378,"context_line":"        return conf"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def get_config_vrouter(self, instance, vif, image_meta,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_b828299b","line":377,"updated":"2015-07-16 07:44:19.000000000","message":"Good thing logging that out!","commit_id":"372f7002c5d0dce928450121725a017163accc70"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"e31face62153a5855fb0718eaf9d2d5dd09f16d6","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    \"\"\"Generic VIF driver for libvirt networking.\"\"\""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def __init__(self):"},{"line_number":87,"context_line":"        self.support_vhostuser_mq \u003d None"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _normalize_vif_type(self, vif_type):"},{"line_number":90,"context_line":"        return vif_type.replace(\u00272.1q\u0027, \u00272q\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_e1a89222","line":87,"updated":"2015-07-22 07:42:41.000000000","message":"Why not use true/false here?","commit_id":"4bd6aeb603a300663520b08020172015d22abcb0"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"e31face62153a5855fb0718eaf9d2d5dd09f16d6","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        designer.set_vif_host_backend_vhostuser_config(conf, mode, sock_path)"},{"line_number":377,"context_line":"        # (vladikr) Not setting up driver and queues for vhostuser"},{"line_number":378,"context_line":"        # as queues are not supported in Libvirt until version 1.2.17"},{"line_number":379,"context_line":"        if not self.support_vhostuser_mq:"},{"line_number":380,"context_line":"            LOG.debug(\u0027Queues are not a vhostuser supported feature.\u0027)"},{"line_number":381,"context_line":"            conf.driver_name \u003d None"},{"line_number":382,"context_line":"            conf.vhost_queues \u003d None"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_446874b9","line":379,"updated":"2015-07-22 07:42:41.000000000","message":"Not sure how it is treated in other scenarios, but couldn\u0027t we make a libvirt version check here instead having this hard coded class variable?","commit_id":"4bd6aeb603a300663520b08020172015d22abcb0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"10e049e8c782acbcbab79dc26a3a22de9048d702","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def __init__(self):"},{"line_number":88,"context_line":"        self.support_vhostuser_mq \u003d False"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _normalize_vif_type(self, vif_type):"},{"line_number":91,"context_line":"        return vif_type.replace(\u00272.1q\u0027, \u00272q\u0027)"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_130aa28a","line":89,"updated":"2015-07-28 11:32:27.000000000","message":"consider \n\ndef __init__(self, support_vhostuser_mq\u003dFalse):\n    self.support_vhostuser_mq \u003d support_vhostuser_mq\n\nThen you do not need to override the value outside of the driver","commit_id":"21d1a9c10a8cf8733963b6c6ac2c47dcc98c4481"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"dcb1ce4c61b3174337b2936fa4d61a947be55fd8","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def __init__(self):"},{"line_number":88,"context_line":"        self.support_vhostuser_mq \u003d False"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _normalize_vif_type(self, vif_type):"},{"line_number":91,"context_line":"        return vif_type.replace(\u00272.1q\u0027, \u00272q\u0027)"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_2bb63e3e","line":89,"in_reply_to":"3a50d1a3_130aa28a","updated":"2015-07-28 14:40:39.000000000","message":"Agree, thanks, it\u0027s better this way.","commit_id":"21d1a9c10a8cf8733963b6c6ac2c47dcc98c4481"}]}
