)]}'
{"nova/network/model.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c205c3733061e31aea799a1b555b3bb2d822ad41","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        self[\u0027network\u0027] \u003d network or None"},{"line_number":220,"context_line":"        self[\u0027type\u0027] \u003d type"},{"line_number":221,"context_line":"        self[\u0027devname\u0027] \u003d devname"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        self[\u0027ovs_interfaceid\u0027] \u003d ovs_interfaceid"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        self[\u0027qbh_profileid\u0027] \u003d qbh_profileid"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2FOYU%3D","line":222,"updated":"2013-02-04 15:05:50.000000000","message":"Would it not be better if the qbh and qgb data was stored in a dictionary?\nIt may be more flexible moving forwards. An also keep the data structure cleaner.","commit_id":"6dc2851a5aa9f6ba69ca8a0927262d5cf7b3fca9"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"acdfd7f6c9db0569b1f98278cde4b4d9c61adcd8","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        self[\u0027network\u0027] \u003d network or None"},{"line_number":220,"context_line":"        self[\u0027type\u0027] \u003d type"},{"line_number":221,"context_line":"        self[\u0027devname\u0027] \u003d devname"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        self[\u0027ovs_interfaceid\u0027] \u003d ovs_interfaceid"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        self[\u0027qbh_profileid\u0027] \u003d qbh_profileid"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2FFwM%3D","line":222,"in_reply_to":"AAAAM3%2F%2FHPQ%3D","updated":"2013-02-07 13:24:54.000000000","message":"Ok, I\u0027ll introduce a 8021QbgParameters and 8021QbhParameters classes. They won\u0027t help much at first, since we have to flatten everything out for the legacy model. There\u0027s code to switch libvirt to the non-legacy network model though, whereupon this will be more useful","commit_id":"6dc2851a5aa9f6ba69ca8a0927262d5cf7b3fca9"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"ab215abac343fa5f316c4e4fe14129f3198854ef","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        self[\u0027network\u0027] \u003d network or None"},{"line_number":220,"context_line":"        self[\u0027type\u0027] \u003d type"},{"line_number":221,"context_line":"        self[\u0027devname\u0027] \u003d devname"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        self[\u0027ovs_interfaceid\u0027] \u003d ovs_interfaceid"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        self[\u0027qbh_profileid\u0027] \u003d qbh_profileid"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2FHPQ%3D","line":222,"in_reply_to":"AAAAM3%2F%2FOYU%3D","updated":"2013-02-06 20:07:52.000000000","message":"I think I have to agree with garyk here; passing around a single dictionary with all the data that\u0027s needed seems to make a lot more sense than throwing a whole bunch of abbreviated parameters…","commit_id":"6dc2851a5aa9f6ba69ca8a0927262d5cf7b3fca9"}],"nova/tests/test_libvirt_vif.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"ab215abac343fa5f316c4e4fe14129f3198854ef","unresolved":false,"context_lines":[{"line_number":500,"context_line":"                                     self.net_8021,"},{"line_number":501,"context_line":"                                     self.mapping_8021qbh)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        doc \u003d etree.fromstring(xml)"},{"line_number":504,"context_line":"        print xml"},{"line_number":505,"context_line":"        ret \u003d doc.findall(\u0027./devices/interface\u0027)"},{"line_number":506,"context_line":"        self.assertEqual(len(ret), 1)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2FHOU%3D","line":503,"updated":"2013-02-06 20:07:52.000000000","message":"It\u0027s worth pointing out that there is now an XMLMatches matcher that could be used to compare two XML documents reliably.  To use, you need only:\n\n    from nova.tests import matches\n\nThen use:\n\n    self.assertThat(actual_xml, matchers.XMLMatches(expected_xml))","commit_id":"6dc2851a5aa9f6ba69ca8a0927262d5cf7b3fca9"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"acdfd7f6c9db0569b1f98278cde4b4d9c61adcd8","unresolved":false,"context_lines":[{"line_number":500,"context_line":"                                     self.net_8021,"},{"line_number":501,"context_line":"                                     self.mapping_8021qbh)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        doc \u003d etree.fromstring(xml)"},{"line_number":504,"context_line":"        print xml"},{"line_number":505,"context_line":"        ret \u003d doc.findall(\u0027./devices/interface\u0027)"},{"line_number":506,"context_line":"        self.assertEqual(len(ret), 1)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2FFwY%3D","line":503,"in_reply_to":"AAAAM3%2F%2FHOU%3D","updated":"2013-02-07 13:24:54.000000000","message":"Good point. Given that this coding pattern is already used throughout this test suite though, I think I\u0027ll stick with it as is for this changeset. I\u0027ll submit another change which converts this entire test suite to use the XMLMatches API in one go.","commit_id":"6dc2851a5aa9f6ba69ca8a0927262d5cf7b3fca9"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"ab215abac343fa5f316c4e4fe14129f3198854ef","unresolved":false,"context_lines":[{"line_number":501,"context_line":"                                     self.mapping_8021qbh)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        doc \u003d etree.fromstring(xml)"},{"line_number":504,"context_line":"        print xml"},{"line_number":505,"context_line":"        ret \u003d doc.findall(\u0027./devices/interface\u0027)"},{"line_number":506,"context_line":"        self.assertEqual(len(ret), 1)"},{"line_number":507,"context_line":"        node \u003d ret[0]"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2FHPI%3D","line":504,"updated":"2013-02-06 20:07:52.000000000","message":"Double-checking: Do you mean to leave this print in?","commit_id":"6dc2851a5aa9f6ba69ca8a0927262d5cf7b3fca9"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"acdfd7f6c9db0569b1f98278cde4b4d9c61adcd8","unresolved":false,"context_lines":[{"line_number":501,"context_line":"                                     self.mapping_8021qbh)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        doc \u003d etree.fromstring(xml)"},{"line_number":504,"context_line":"        print xml"},{"line_number":505,"context_line":"        ret \u003d doc.findall(\u0027./devices/interface\u0027)"},{"line_number":506,"context_line":"        self.assertEqual(len(ret), 1)"},{"line_number":507,"context_line":"        node \u003d ret[0]"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2FFwU%3D","line":504,"in_reply_to":"AAAAM3%2F%2FHPI%3D","updated":"2013-02-07 13:24:54.000000000","message":"Ha, no, of course not :-)","commit_id":"6dc2851a5aa9f6ba69ca8a0927262d5cf7b3fca9"}],"nova/virt/libvirt/config.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c205c3733061e31aea799a1b555b3bb2d822ad41","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        self.mac_addr \u003d None"},{"line_number":550,"context_line":"        self.script \u003d None"},{"line_number":551,"context_line":"        self.source_dev \u003d None"},{"line_number":552,"context_line":"        self.source_mode \u003d \"private\""},{"line_number":553,"context_line":"        self.vporttype \u003d None"},{"line_number":554,"context_line":"        self.vportparams \u003d []"},{"line_number":555,"context_line":"        self.filtername \u003d None"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2FOYI%3D","line":552,"updated":"2013-02-04 15:05:50.000000000","message":"Can you please explain this?","commit_id":"6dc2851a5aa9f6ba69ca8a0927262d5cf7b3fca9"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"acdfd7f6c9db0569b1f98278cde4b4d9c61adcd8","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        self.mac_addr \u003d None"},{"line_number":550,"context_line":"        self.script \u003d None"},{"line_number":551,"context_line":"        self.source_dev \u003d None"},{"line_number":552,"context_line":"        self.source_mode \u003d \"private\""},{"line_number":553,"context_line":"        self.vporttype \u003d None"},{"line_number":554,"context_line":"        self.vportparams \u003d []"},{"line_number":555,"context_line":"        self.filtername \u003d None"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2FFwE%3D","line":552,"in_reply_to":"AAAAM3%2F%2FOYI%3D","updated":"2013-02-07 13:24:54.000000000","message":"This is libvirt terminology for indicating a Macvtap device in bridge mode (as opposed to vepa mode, or its other various modes).","commit_id":"6dc2851a5aa9f6ba69ca8a0927262d5cf7b3fca9"}],"nova/virt/libvirt/designer.py":[{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"91664e0137fc302451efd5064aa1908cd5b59bc1","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    conf.net_type \u003d \"direct\""},{"line_number":97,"context_line":"    conf.source_dev \u003d devname"},{"line_number":98,"context_line":"    conf.source_mode \u003d \"vepa\""},{"line_number":99,"context_line":"    conf.vporttype \u003d \"802.1Qbh\""},{"line_number":100,"context_line":"    conf.add_vport_param(\"profileid\", profileid)"},{"line_number":101,"context_line":"    if tapname:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FesM%3D","line":98,"updated":"2013-01-19 21:04:18.000000000","message":"802.1Qbh is actually called \"VN-Tag\", not VEPA.","commit_id":"99d844aa73356a74caa737b9f88a7d8e69c15472"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"2a68b445826c34ebb84688fd56f2558684affb04","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    conf.net_type \u003d \"direct\""},{"line_number":97,"context_line":"    conf.source_dev \u003d devname"},{"line_number":98,"context_line":"    conf.source_mode \u003d \"vepa\""},{"line_number":99,"context_line":"    conf.vporttype \u003d \"802.1Qbh\""},{"line_number":100,"context_line":"    conf.add_vport_param(\"profileid\", profileid)"},{"line_number":101,"context_line":"    if tapname:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FdSg%3D","line":98,"in_reply_to":"AAAAM3%2F%2FeGc%3D","updated":"2013-01-21 21:02:41.000000000","message":"Got it, it\u0027s just conceptually this is confusing.","commit_id":"99d844aa73356a74caa737b9f88a7d8e69c15472"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"b6341e5bfd582d46b2bfcc2efba3912fc24281ef","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    conf.net_type \u003d \"direct\""},{"line_number":97,"context_line":"    conf.source_dev \u003d devname"},{"line_number":98,"context_line":"    conf.source_mode \u003d \"vepa\""},{"line_number":99,"context_line":"    conf.vporttype \u003d \"802.1Qbh\""},{"line_number":100,"context_line":"    conf.add_vport_param(\"profileid\", profileid)"},{"line_number":101,"context_line":"    if tapname:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FeGc%3D","line":98,"in_reply_to":"AAAAM3%2F%2FesM%3D","updated":"2013-01-21 09:50:24.000000000","message":"NB This is the mode name that Linux \u0026 libvirt use for configuring the macvtap device, so we don\u0027t have the choice to call it \u0027VN-Tag\u0027 from OpenStack\u0027s POV","commit_id":"99d844aa73356a74caa737b9f88a7d8e69c15472"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c205c3733061e31aea799a1b555b3bb2d822ad41","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    conf.script \u003d \"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"def set_vif_host_backend_802qbg_config(conf, devname, managerid,"},{"line_number":74,"context_line":"                                       typeid, typeidversion,"},{"line_number":75,"context_line":"                                       instanceid, tapname\u003dNone):"},{"line_number":76,"context_line":"    \"\"\"Populate a LibvirtConfigGuestInterface instance"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2FOX4%3D","line":73,"updated":"2013-02-04 15:05:50.000000000","message":"the 802 functions have quite a lot of stuff in common - is it work while to have that in a helper func?","commit_id":"6dc2851a5aa9f6ba69ca8a0927262d5cf7b3fca9"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"acdfd7f6c9db0569b1f98278cde4b4d9c61adcd8","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    conf.script \u003d \"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"def set_vif_host_backend_802qbg_config(conf, devname, managerid,"},{"line_number":74,"context_line":"                                       typeid, typeidversion,"},{"line_number":75,"context_line":"                                       instanceid, tapname\u003dNone):"},{"line_number":76,"context_line":"    \"\"\"Populate a LibvirtConfigGuestInterface instance"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2FFv0%3D","line":73,"in_reply_to":"AAAAM3%2F%2FHOE%3D","updated":"2013-02-07 13:24:54.000000000","message":"Yeah, I don\u0027t think they have anything more in common that the other network modes really. I wanted to have clearly distinct APIs here for each specific network config we aim to support","commit_id":"6dc2851a5aa9f6ba69ca8a0927262d5cf7b3fca9"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"ab215abac343fa5f316c4e4fe14129f3198854ef","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    conf.script \u003d \"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"def set_vif_host_backend_802qbg_config(conf, devname, managerid,"},{"line_number":74,"context_line":"                                       typeid, typeidversion,"},{"line_number":75,"context_line":"                                       instanceid, tapname\u003dNone):"},{"line_number":76,"context_line":"    \"\"\"Populate a LibvirtConfigGuestInterface instance"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2FHOE%3D","line":73,"in_reply_to":"AAAAM3%2F%2FOX4%3D","updated":"2013-02-06 20:07:52.000000000","message":"Personally, I don\u0027t think so.","commit_id":"6dc2851a5aa9f6ba69ca8a0927262d5cf7b3fca9"}],"nova/virt/libvirt/vif.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"3d3812232eb96d9f0ae345636ae8c1cc4e36c3d5","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def plug_802qbh(self, instance, vif):"},{"line_number":333,"context_line":"        super(LibvirtGenericVIFDriver,"},{"line_number":334,"context_line":"              self).plug(instance, vif)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def plug(self, instance, vif):"},{"line_number":337,"context_line":"        network, mapping \u003d vif"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2FRMk%3D","line":334,"updated":"2013-01-30 21:02:45.000000000","message":"kind of seems like overkill, but i guess it works for symmetry :)","commit_id":"6dc2851a5aa9f6ba69ca8a0927262d5cf7b3fca9"}]}
