)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5d5c0750f07f8babce126101942acf926fecc125","unresolved":false,"context_lines":[{"line_number":16,"context_line":"option, vif details are calculated by the OVS mech driver. If"},{"line_number":17,"context_line":"datapath_type \u003d\u003d \u0027netdev\u0027 and OVS on the agent host is capable of"},{"line_number":18,"context_line":"supporting dpdkvhostuser, then it is used."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: I5047f1d1276e2f52ff02a0cba136e222779d059c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3a29b11f_3db87a10","line":19,"updated":"2015-10-23 11:55:29.000000000","message":"this should have\nCloses-Bug: #1506127","commit_id":"7ad53527c1aaa308045c1eb7d8a39017050e5bee"}],"doc/source/devref/ovs_vhostuser.rst":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ac145ccc2c2dfe98c90a4ae83253c01287703307","unresolved":false,"context_lines":[{"line_number":12,"context_line":"      under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"      Convention for heading levels in Neutron devref:"},{"line_number":16,"context_line":"      \u003d\u003d\u003d\u003d\u003d\u003d\u003d  Heading 0 (reserved for the title in a document)"},{"line_number":17,"context_line":"      -------  Heading 1"},{"line_number":18,"context_line":"      ~~~~~~~  Heading 2"}],"source_content_type":"text/x-rst","patch_set":15,"id":"ba8a016a_95bb17e5","line":15,"updated":"2015-11-18 00:51:34.000000000","message":"im not sure this is need but will be useful if anyone want to extend this devref in the future.","commit_id":"d2a0823843125c25fd5a15696d27f32ab4e25999"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"f7a97ef5def22828d8df6f06aaff89e7ddcbdc8f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"      under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"      Convention for heading levels in Neutron devref:"},{"line_number":16,"context_line":"      \u003d\u003d\u003d\u003d\u003d\u003d\u003d  Heading 0 (reserved for the title in a document)"},{"line_number":17,"context_line":"      -------  Heading 1"},{"line_number":18,"context_line":"      ~~~~~~~  Heading 2"}],"source_content_type":"text/x-rst","patch_set":15,"id":"ba8a016a_42c2a235","line":15,"in_reply_to":"ba8a016a_52611704","updated":"2015-11-18 20:03:54.000000000","message":"Yeah, Henry put this note in all .rst files, it\u0027s pretty useful I think.","commit_id":"d2a0823843125c25fd5a15696d27f32ab4e25999"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"ca85b64accd094ce04455097d6f7a53206285ef3","unresolved":false,"context_lines":[{"line_number":12,"context_line":"      under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"      Convention for heading levels in Neutron devref:"},{"line_number":16,"context_line":"      \u003d\u003d\u003d\u003d\u003d\u003d\u003d  Heading 0 (reserved for the title in a document)"},{"line_number":17,"context_line":"      -------  Heading 1"},{"line_number":18,"context_line":"      ~~~~~~~  Heading 2"}],"source_content_type":"text/x-rst","patch_set":15,"id":"ba8a016a_52611704","line":15,"in_reply_to":"ba8a016a_95bb17e5","updated":"2015-11-18 17:44:48.000000000","message":"I noticed several other devrefs had it, so I copied it.","commit_id":"d2a0823843125c25fd5a15696d27f32ab4e25999"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"b5c6ab583c32e62fb875a88288c2a0a9b7b7a756","unresolved":false,"context_lines":[{"line_number":34,"context_line":"\u0027configurations\u0027 dictionary. The ML2 driver uses this information to select"},{"line_number":35,"context_line":"the proper VIF type and binding details."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Other out-of-tree OVS-based \"fast path\" drivers should be unaffected by the"},{"line_number":38,"context_line":"addition of this support."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Neutron+OVS+DPDK platform requirements"}],"source_content_type":"text/x-rst","patch_set":16,"id":"ba8a016a_f1dfde37","line":37,"updated":"2015-11-18 22:22:39.000000000","message":"I am not sure we can claim this statement to be true. I\u0027d just remove it.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"220e39c575cce0c18deb897ea9576a78bdef2fde","unresolved":false,"context_lines":[{"line_number":34,"context_line":"\u0027configurations\u0027 dictionary. The ML2 driver uses this information to select"},{"line_number":35,"context_line":"the proper VIF type and binding details."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Other out-of-tree OVS-based \"fast path\" drivers should be unaffected by the"},{"line_number":38,"context_line":"addition of this support."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Neutron+OVS+DPDK platform requirements"}],"source_content_type":"text/x-rst","patch_set":16,"id":"ba8a016a_b1d6054d","line":37,"in_reply_to":"ba8a016a_f1dfde37","updated":"2015-11-19 18:14:33.000000000","message":"Done","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"b5c6ab583c32e62fb875a88288c2a0a9b7b7a756","unresolved":false,"context_lines":[{"line_number":65,"context_line":"agent_type\u003dFancy OVS Agent"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Late in the Liberty release cycle, the agent_type option was added as"},{"line_number":68,"context_line":"deprecated in order to allow out-of-tree ML2 drivers which use the OVS agent"},{"line_number":69,"context_line":"to distinguish themselves as separate agents. While the intention is now to"},{"line_number":70,"context_line":"allow the OVS agent itself to determine its capabilities more robustly than a"},{"line_number":71,"context_line":"simple either/or option, the agent_type option is left available for"}],"source_content_type":"text/x-rst","patch_set":16,"id":"ba8a016a_71bf6eaa","line":68,"updated":"2015-11-18 22:22:39.000000000","message":"I\u0027d remove \u0027out-of-tree\u0027, and honestly I think that the hack [1] should have never  be allowed in the first place :)\n\nAre you telling now that you are keeping this variable in place? We should indeed pursue the initial intention of removing this variable and extend the agent in place, over time, step by step. Not in this patch of course, but then if we do, this devref should reflect that now or after.\n\n[1] https://review.openstack.org/#/c/197210/","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"220e39c575cce0c18deb897ea9576a78bdef2fde","unresolved":false,"context_lines":[{"line_number":65,"context_line":"agent_type\u003dFancy OVS Agent"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Late in the Liberty release cycle, the agent_type option was added as"},{"line_number":68,"context_line":"deprecated in order to allow out-of-tree ML2 drivers which use the OVS agent"},{"line_number":69,"context_line":"to distinguish themselves as separate agents. While the intention is now to"},{"line_number":70,"context_line":"allow the OVS agent itself to determine its capabilities more robustly than a"},{"line_number":71,"context_line":"simple either/or option, the agent_type option is left available for"}],"source_content_type":"text/x-rst","patch_set":16,"id":"ba8a016a_d102a9b3","line":68,"in_reply_to":"ba8a016a_71bf6eaa","updated":"2015-11-19 18:14:33.000000000","message":"I\u0027ll remove this section from the devref since the option is deprecated.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"b5c6ab583c32e62fb875a88288c2a0a9b7b7a756","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"The networking-ovs-dpdk repo will continue to exist and undergo active"},{"line_number":78,"context_line":"development. This feature just removes the necessity for a separate ML2 driver"},{"line_number":79,"context_line":"and OVS agent in the networking-ovs-dpdk repo. The networking-ovs-dpdk project"},{"line_number":80,"context_line":"also provides a devstack plugin which also allows automated CI, a puppet"},{"line_number":81,"context_line":"module, and an OpenFlow-based security group implementation."}],"source_content_type":"text/x-rst","patch_set":16,"id":"ba8a016a_b1f876c4","line":79,"updated":"2015-11-18 22:22:39.000000000","message":"So should this patch be followed by a patch in networking-ovs-dpdk that removes the ml2 driver, is there in progress? We should make this clear with a Depends-on on the commit message that points to the dpdk repo patch?.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"89857a680b8dfe433e51a582c4661d8d445ba574","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"The networking-ovs-dpdk repo will continue to exist and undergo active"},{"line_number":78,"context_line":"development. This feature just removes the necessity for a separate ML2 driver"},{"line_number":79,"context_line":"and OVS agent in the networking-ovs-dpdk repo. The networking-ovs-dpdk project"},{"line_number":80,"context_line":"also provides a devstack plugin which also allows automated CI, a puppet"},{"line_number":81,"context_line":"module, and an OpenFlow-based security group implementation."}],"source_content_type":"text/x-rst","patch_set":16,"id":"ba8a016a_72d3e904","line":79,"in_reply_to":"ba8a016a_43e2a130","updated":"2015-11-19 01:28:10.000000000","message":"thanks","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"852a6a507eff92ec8bdaf97d747ff72bfbd52362","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"The networking-ovs-dpdk repo will continue to exist and undergo active"},{"line_number":78,"context_line":"development. This feature just removes the necessity for a separate ML2 driver"},{"line_number":79,"context_line":"and OVS agent in the networking-ovs-dpdk repo. The networking-ovs-dpdk project"},{"line_number":80,"context_line":"also provides a devstack plugin which also allows automated CI, a puppet"},{"line_number":81,"context_line":"module, and an OpenFlow-based security group implementation."}],"source_content_type":"text/x-rst","patch_set":16,"id":"ba8a016a_43e2a130","line":79,"in_reply_to":"ba8a016a_b1f876c4","updated":"2015-11-19 00:28:02.000000000","message":"ill submit a patch to the networking-ovs-dpdk repo to remove the mechdriver and unit tests from and i willl make it depend on this change.\n\nso this is thecnical the reverse of what you suggest but it will mean there is always a mechdriver that works. ill upload that patch when i get into work tommrow but yes i had alway planned on removing the ml2 driver in the networking-ovs-dpdk repo when neutron supported it directly.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"}],"etc/neutron/plugins/ml2/openvswitch_agent.ini":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"0121daf407ddbf5b661547b6fb885da2944de56d","unresolved":false,"context_lines":[{"line_number":174,"context_line":"# to share a common ovs agent implementation. NOTE: this value will be"},{"line_number":175,"context_line":"# removed in the mitaka cycle."},{"line_number":176,"context_line":"#"},{"line_number":177,"context_line":"# agent_type \u003d \u0027Open vSwitch agent\u0027"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"[securitygroup]"},{"line_number":180,"context_line":"# Firewall driver for realizing neutron security group function."}],"source_content_type":"text/x-properties","patch_set":13,"id":"1a26ad4f_3d423c11","side":"PARENT","line":177,"updated":"2015-10-30 15:22:05.000000000","message":"is this patch the place to remove this? I\u0027d say no, because if you shoot yourself in the foot, and prevent this from being backported if you remotely wanted to.\n\nWhat am I missing?","commit_id":"4ccf21561c473ca85b5ee653920b0319cf6b4bd1"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"762203038af0fd68b9b6ece41e1de0007203ded3","unresolved":false,"context_lines":[{"line_number":174,"context_line":"# to share a common ovs agent implementation. NOTE: this value will be"},{"line_number":175,"context_line":"# removed in the mitaka cycle."},{"line_number":176,"context_line":"#"},{"line_number":177,"context_line":"# agent_type \u003d \u0027Open vSwitch agent\u0027"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"[securitygroup]"},{"line_number":180,"context_line":"# Firewall driver for realizing neutron security group function."}],"source_content_type":"text/x-properties","patch_set":13,"id":"1a26ad4f_09a93d90","side":"PARENT","line":177,"in_reply_to":"1a26ad4f_3d423c11","updated":"2015-10-31 01:25:41.000000000","message":"having a configurable agent type moves the ovs neutron agent one step closer to a modular layer 2 agent so we can respin without this change.\n\ni didn\u0027t consider that it would be a candidate for backport but if you think it could be then yes i totally agree this change should be in a different patchset if i the removal of the agent type wanted at all.\n\nif it could be backported to stable/liberty that would enable vhost-user support for ovs compiled with dpdk  without any external dependencies.","commit_id":"4ccf21561c473ca85b5ee653920b0319cf6b4bd1"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"b5c6ab583c32e62fb875a88288c2a0a9b7b7a756","unresolved":false,"context_lines":[{"line_number":82,"context_line":"# To enable the userspace datapath set this value to \u0027netdev\u0027"},{"line_number":83,"context_line":"# datapath_type \u003d system"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"# (StrOpt) OVS vhost-user socket directory."},{"line_number":86,"context_line":"# \u0027/var/run/openvswitch\u0027 is the default value"},{"line_number":87,"context_line":"# vhostuser_socket_dir \u003d /var/run/openvswitch"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-properties","patch_set":16,"id":"ba8a016a_1114e29d","line":85,"updated":"2015-11-18 22:22:39.000000000","message":"do you envision other dpdk related info to be added here over time? If so, I\u0027d suggest to add this under a dpdk section, to avoid littering the \u0027ovs\u0027 section.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"852a6a507eff92ec8bdaf97d747ff72bfbd52362","unresolved":false,"context_lines":[{"line_number":82,"context_line":"# To enable the userspace datapath set this value to \u0027netdev\u0027"},{"line_number":83,"context_line":"# datapath_type \u003d system"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"# (StrOpt) OVS vhost-user socket directory."},{"line_number":86,"context_line":"# \u0027/var/run/openvswitch\u0027 is the default value"},{"line_number":87,"context_line":"# vhostuser_socket_dir \u003d /var/run/openvswitch"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-properties","patch_set":16,"id":"ba8a016a_a3410d65","line":85,"in_reply_to":"ba8a016a_1114e29d","updated":"2015-11-19 00:28:02.000000000","message":"technically this is a vhost paramater rather then dpdk but no i dont think we will need other dpdk specif paramaters. if we did in the future i would agree that we should create a dpdk section. we have tried in the past make changes as generic as possible so rather then expclitly adding dpdk specif config options to neutron.  \n\nthe vhostuser_socket_dir option is actully need for packaging reasons.\nwhen you package ovs on fedora /var/run/openvswitch is the default location used to create openvswich contol sockets and is also used to create vhost-user sockets. On centos and ubuntu  /usr/var/run/openvswitch is used instead. so if you have a mixed hostOS cloud enviroment you need to say what socket to use on each host.\n\nin our devstack pluging we are building ovs from source so we could configure the same path regardless of the os. but as ovs-dpdk gets packed in more distros we will need this felxablity to use different base socket path depenent on the distro.\n\nOne other vhost-user paramater that may want to be add in the future is the vhos-user socket mode. dpdk and hence upstream openvswitch only supports client mode but it may support server mode eventually.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"89857a680b8dfe433e51a582c4661d8d445ba574","unresolved":false,"context_lines":[{"line_number":82,"context_line":"# To enable the userspace datapath set this value to \u0027netdev\u0027"},{"line_number":83,"context_line":"# datapath_type \u003d system"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"# (StrOpt) OVS vhost-user socket directory."},{"line_number":86,"context_line":"# \u0027/var/run/openvswitch\u0027 is the default value"},{"line_number":87,"context_line":"# vhostuser_socket_dir \u003d /var/run/openvswitch"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-properties","patch_set":16,"id":"ba8a016a_b232b15c","line":85,"in_reply_to":"ba8a016a_a3410d65","updated":"2015-11-19 01:28:10.000000000","message":"ok, so your answer is no. But I don\u0027t hear a resounding no :)\n\nSo where do we go from here? DPDK section or not?","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"220e39c575cce0c18deb897ea9576a78bdef2fde","unresolved":false,"context_lines":[{"line_number":82,"context_line":"# To enable the userspace datapath set this value to \u0027netdev\u0027"},{"line_number":83,"context_line":"# datapath_type \u003d system"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"# (StrOpt) OVS vhost-user socket directory."},{"line_number":86,"context_line":"# \u0027/var/run/openvswitch\u0027 is the default value"},{"line_number":87,"context_line":"# vhostuser_socket_dir \u003d /var/run/openvswitch"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-properties","patch_set":16,"id":"ba8a016a_31a2159a","line":85,"in_reply_to":"ba8a016a_b232b15c","updated":"2015-11-19 18:14:33.000000000","message":"Since none of these options are technically DPDK-specific, I\u0027d prefer them in [OVS]. Leaving as-is for the next patch set, anyway. :)","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"}],"neutron/agent/common/ovs_lib.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"53dc542d362889d0af13e34b4f15f32263d65efa","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @property"},{"line_number":150,"context_line":"    def config(self):"},{"line_number":151,"context_line":"        return self.ovsdb.db_list(\"Open_vSwitch\").execute()[0]"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"class OVSBridge(BaseOVS):"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_83940943","line":151,"updated":"2015-11-18 22:36:25.000000000","message":"Can we document what the output of this command looks like? Like this it\u0027s basically undocumented blob.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"220e39c575cce0c18deb897ea9576a78bdef2fde","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @property"},{"line_number":150,"context_line":"    def config(self):"},{"line_number":151,"context_line":"        return self.ovsdb.db_list(\"Open_vSwitch\").execute()[0]"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"class OVSBridge(BaseOVS):"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_54f22707","line":151,"in_reply_to":"ba8a016a_83940943","updated":"2015-11-19 18:14:33.000000000","message":"Done","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"}],"neutron/plugins/ml2/drivers/openvswitch/agent/common/config.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"b5c6ab583c32e62fb875a88288c2a0a9b7b7a756","unresolved":false,"context_lines":[{"line_number":53,"context_line":"               choices\u003d[constants.OVS_DATAPATH_SYSTEM,"},{"line_number":54,"context_line":"                        constants.OVS_DATAPATH_NETDEV],"},{"line_number":55,"context_line":"               help\u003d_(\"OVS datapath to use.\")),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027vhostuser_socket_dir\u0027, default\u003dconstants.VHOST_USER_SOCKET_DIR,"},{"line_number":57,"context_line":"               help\u003d_(\"OVS vhost-user socket directory.\")),"},{"line_number":58,"context_line":"    cfg.IPOpt(\u0027of_listen_address\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":59,"context_line":"              help\u003d_(\"Address to listen on for OpenFlow connections. \""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_f10efe8a","line":56,"updated":"2015-11-18 22:22:39.000000000","message":"see my comment on the ini file, this should probably be its own section, if you foresee the list of config options to grow. It\u0027ll be cleaner in the long run.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"220e39c575cce0c18deb897ea9576a78bdef2fde","unresolved":false,"context_lines":[{"line_number":53,"context_line":"               choices\u003d[constants.OVS_DATAPATH_SYSTEM,"},{"line_number":54,"context_line":"                        constants.OVS_DATAPATH_NETDEV],"},{"line_number":55,"context_line":"               help\u003d_(\"OVS datapath to use.\")),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027vhostuser_socket_dir\u0027, default\u003dconstants.VHOST_USER_SOCKET_DIR,"},{"line_number":57,"context_line":"               help\u003d_(\"OVS vhost-user socket directory.\")),"},{"line_number":58,"context_line":"    cfg.IPOpt(\u0027of_listen_address\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":59,"context_line":"              help\u003d_(\"Address to listen on for OpenFlow connections. \""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_14c81fa5","line":56,"in_reply_to":"ba8a016a_d20e558b","updated":"2015-11-19 18:14:33.000000000","message":"As per previous comment, leaving for now since these aren\u0027t really dpdk-specific options in OVS, even if that is the only way we currently use them.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"89857a680b8dfe433e51a582c4661d8d445ba574","unresolved":false,"context_lines":[{"line_number":53,"context_line":"               choices\u003d[constants.OVS_DATAPATH_SYSTEM,"},{"line_number":54,"context_line":"                        constants.OVS_DATAPATH_NETDEV],"},{"line_number":55,"context_line":"               help\u003d_(\"OVS datapath to use.\")),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027vhostuser_socket_dir\u0027, default\u003dconstants.VHOST_USER_SOCKET_DIR,"},{"line_number":57,"context_line":"               help\u003d_(\"OVS vhost-user socket directory.\")),"},{"line_number":58,"context_line":"    cfg.IPOpt(\u0027of_listen_address\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":59,"context_line":"              help\u003d_(\"Address to listen on for OpenFlow connections. \""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_d20e558b","line":56,"in_reply_to":"ba8a016a_d905207a","updated":"2015-11-19 01:28:10.000000000","message":"as I said, I raised the issue. It\u0027s a lot easier to make a decision now than deal with the deprecation cycle if we want to shuffle configs around.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"852a6a507eff92ec8bdaf97d747ff72bfbd52362","unresolved":false,"context_lines":[{"line_number":53,"context_line":"               choices\u003d[constants.OVS_DATAPATH_SYSTEM,"},{"line_number":54,"context_line":"                        constants.OVS_DATAPATH_NETDEV],"},{"line_number":55,"context_line":"               help\u003d_(\"OVS datapath to use.\")),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027vhostuser_socket_dir\u0027, default\u003dconstants.VHOST_USER_SOCKET_DIR,"},{"line_number":57,"context_line":"               help\u003d_(\"OVS vhost-user socket directory.\")),"},{"line_number":58,"context_line":"    cfg.IPOpt(\u0027of_listen_address\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":59,"context_line":"              help\u003d_(\"Address to listen on for OpenFlow connections. \""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_d905207a","line":56,"in_reply_to":"ba8a016a_f10efe8a","updated":"2015-11-19 00:28:02.000000000","message":"i dont know of any dpdk spcific paramters that it would be useful to tell neutron about currently but yes a seperate section would be cleaner in the long run if we were to add any.  \n\nparamters that have been added to enable dpdk in the past have also been generic. for example the datapath_type feild is used to tell neutron what datapath type to use when creating bridges. if you compile ovs with dpdk on linux you would set the datapath_type to netdev to enable the dpdk datapath. if you were using using ovs on freebsd you would also set the datapath type to netdev.\n\nby the way i have no strong feeling either way on if it should be in a dpdk section or not. i dont forsee a non dpdk based impentation of vhost-user being added to standard ovs so as far as ovs goes vhost-user is a dpdk enabled feature even though the vhost-user interface in qemu does not require dpdk to work.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"601a053486c46d69ed3892d5c74b5476eaf53751","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                constants.OVS_DATAPATH_NETDEV not in"},{"line_number":188,"context_line":"                ovs.config.get(\u0027datapath_types\u0027, [])):"},{"line_number":189,"context_line":"            raise RuntimeError("},{"line_number":190,"context_line":"                _(\u0027Configured to use netdev datapath, but no OVS support\u0027))"},{"line_number":191,"context_line":"        # init bridge classes with configured datapath type."},{"line_number":192,"context_line":"        self.br_int_cls, self.br_phys_cls, self.br_tun_cls \u003d ("},{"line_number":193,"context_line":"            functools.partial(bridge_classes[b],"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_b797cc38","line":190,"updated":"2015-10-23 11:53:18.000000000","message":"this check should not necessary as the netdev datapath is always available.","commit_id":"7ad53527c1aaa308045c1eb7d8a39017050e5bee"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"844a4f56cc391829f9b42f673cc4b847de015228","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                               self.conf.AGENT.log_agent_heartbeats,"},{"line_number":285,"context_line":"                               \u0027extensions\u0027: self.ext_manager.names()},"},{"line_number":286,"context_line":"            \u0027datapath_type\u0027: self.conf.OVS.datapath_type,"},{"line_number":287,"context_line":"            \u0027ovs_capabilities\u0027: ovs_lib.BaseOVS().config,"},{"line_number":288,"context_line":"            \u0027agent_type\u0027: n_const.AGENT_TYPE_OVS,"},{"line_number":289,"context_line":"            \u0027start_flag\u0027: True}"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_7e5ea513","line":287,"updated":"2015-10-29 02:54:45.000000000","message":"lines 286 and 287 should be part of the configurations dict.\nthe } should be moved from 285 to 287 for this to work","commit_id":"e7d851ed2e55b31781cf96c2b4bfd71c6d662c75"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"247fb1c4dc797f7d7c81b894a038684a28844834","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                               self.conf.AGENT.log_agent_heartbeats,"},{"line_number":285,"context_line":"                               \u0027extensions\u0027: self.ext_manager.names()},"},{"line_number":286,"context_line":"            \u0027datapath_type\u0027: self.conf.OVS.datapath_type,"},{"line_number":287,"context_line":"            \u0027ovs_capabilities\u0027: ovs_lib.BaseOVS().config,"},{"line_number":288,"context_line":"            \u0027agent_type\u0027: n_const.AGENT_TYPE_OVS,"},{"line_number":289,"context_line":"            \u0027start_flag\u0027: True}"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_ea5aef82","line":287,"in_reply_to":"1a26ad4f_7e5ea513","updated":"2015-10-29 06:49:18.000000000","message":"Gah. I can\u0027t believe I did that. That\u0027s what I get for rushing. Done.","commit_id":"e7d851ed2e55b31781cf96c2b4bfd71c6d662c75"},{"author":{"_account_id":13869,"name":"Maxime Leroy","email":"maxime.leroy@6wind.com","username":"mleroy"},"change_message_id":"24d5b34156b3394c9d869d2ee763f5d325275d5d","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                               \u0027extensions\u0027: self.ext_manager.names()},"},{"line_number":286,"context_line":"            \u0027datapath_type\u0027: self.conf.OVS.datapath_type,"},{"line_number":287,"context_line":"            \u0027ovs_capabilities\u0027: ovs_lib.BaseOVS().config,"},{"line_number":288,"context_line":"            \u0027agent_type\u0027: n_const.AGENT_TYPE_OVS,"},{"line_number":289,"context_line":"            \u0027start_flag\u0027: True}"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        report_interval \u003d self.conf.AGENT.report_interval"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_4193ce4f","line":288,"updated":"2015-10-29 04:47:27.000000000","message":"For ML2 mechanism driver ovs-fp, we use the same ovs agent than the one in the neutron tree. \n\nWe want to use the agent_type to set this one to a different value that AGENT_TYPE_OVS \u0027Open vSwitch agent\u0027, i.e. AGENT_TYPE_OVS_FP \u0027Open VSwitch fast path agent\u0027 for compute node running the fast path.\n\nThen, our mechanism driver will only set the port binding (vif type vhostuser, and not ovs) for these specific computes nodes.\n\nWhy do you remove this option ?","commit_id":"e7d851ed2e55b31781cf96c2b4bfd71c6d662c75"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"cbe6114ca77327ce94721fefef2f0a802769ce15","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                               \u0027extensions\u0027: self.ext_manager.names()},"},{"line_number":286,"context_line":"            \u0027datapath_type\u0027: self.conf.OVS.datapath_type,"},{"line_number":287,"context_line":"            \u0027ovs_capabilities\u0027: ovs_lib.BaseOVS().config,"},{"line_number":288,"context_line":"            \u0027agent_type\u0027: n_const.AGENT_TYPE_OVS,"},{"line_number":289,"context_line":"            \u0027start_flag\u0027: True}"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        report_interval \u003d self.conf.AGENT.report_interval"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_756d6097","line":288,"in_reply_to":"1a26ad4f_4193ce4f","updated":"2015-10-29 06:58:13.000000000","message":"One reason is that the agent itself may be capable of supporting multiple types of ports. There is only one agent type, and it is specifically checked. If a host can support multiple options, this breaks.","commit_id":"e7d851ed2e55b31781cf96c2b4bfd71c6d662c75"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8f1a93f9d24e3bf640c99ca91b8133536bcdf77b","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                               \u0027extensions\u0027: self.ext_manager.names()},"},{"line_number":286,"context_line":"            \u0027datapath_type\u0027: self.conf.OVS.datapath_type,"},{"line_number":287,"context_line":"            \u0027ovs_capabilities\u0027: ovs_lib.BaseOVS().config,"},{"line_number":288,"context_line":"            \u0027agent_type\u0027: n_const.AGENT_TYPE_OVS,"},{"line_number":289,"context_line":"            \u0027start_flag\u0027: True}"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        report_interval \u003d self.conf.AGENT.report_interval"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_8447b44a","line":288,"in_reply_to":"1a26ad4f_4193ce4f","updated":"2015-10-29 05:08:58.000000000","message":"the option to set the agent type was added with the express understanding that it would be removed early in the mitaka cycle.\n\nit was introduced as deprecated as this change was not ready to submit in liberty.\n\nif you wish to keep the deprecated config value a separate patch/rfe bug should be submitted to remove the deprecation flag.","commit_id":"e7d851ed2e55b31781cf96c2b4bfd71c6d662c75"},{"author":{"_account_id":13869,"name":"Maxime Leroy","email":"maxime.leroy@6wind.com","username":"mleroy"},"change_message_id":"b80f354cd0b8b6e9f9aadfd398166c9d19529d27","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                               \u0027extensions\u0027: self.ext_manager.names()},"},{"line_number":286,"context_line":"            \u0027datapath_type\u0027: self.conf.OVS.datapath_type,"},{"line_number":287,"context_line":"            \u0027ovs_capabilities\u0027: ovs_lib.BaseOVS().config,"},{"line_number":288,"context_line":"            \u0027agent_type\u0027: n_const.AGENT_TYPE_OVS,"},{"line_number":289,"context_line":"            \u0027start_flag\u0027: True}"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        report_interval \u003d self.conf.AGENT.report_interval"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_b026a6cc","line":288,"in_reply_to":"1a26ad4f_756d6097","updated":"2015-10-29 08:04:35.000000000","message":"\u003e Terry\n\nCurrently all the interfaces are added to the br-int bridge. This bridge can be:\n-  netdev (userspace), in this case for ovs-dpdk, you want to use VIF_TYPE_VHOSTUSER\n-  system (kernel space) in this case, you want to use VIF_TYPE_OVS.\n\nI don\u0027t see how you can potentially have VHOSTUSER port or OVS (i.e. vhost-net) port on the same compute. \n\nWhat am I missing ?","commit_id":"e7d851ed2e55b31781cf96c2b4bfd71c6d662c75"},{"author":{"_account_id":13869,"name":"Maxime Leroy","email":"maxime.leroy@6wind.com","username":"mleroy"},"change_message_id":"b80f354cd0b8b6e9f9aadfd398166c9d19529d27","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                               \u0027extensions\u0027: self.ext_manager.names()},"},{"line_number":286,"context_line":"            \u0027datapath_type\u0027: self.conf.OVS.datapath_type,"},{"line_number":287,"context_line":"            \u0027ovs_capabilities\u0027: ovs_lib.BaseOVS().config,"},{"line_number":288,"context_line":"            \u0027agent_type\u0027: n_const.AGENT_TYPE_OVS,"},{"line_number":289,"context_line":"            \u0027start_flag\u0027: True}"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        report_interval \u003d self.conf.AGENT.report_interval"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_10ec3a8e","line":288,"in_reply_to":"1a26ad4f_8447b44a","updated":"2015-10-29 08:04:35.000000000","message":"\u003e Sean\n\nOk, I have submit a RFE bug to keep this config option: https://bugs.launchpad.net/networking-6wind/+bug/1511250","commit_id":"e7d851ed2e55b31781cf96c2b4bfd71c6d662c75"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"9fe9ef1077c1ae715335e6e88b2a198a320b2849","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                               \u0027extensions\u0027: self.ext_manager.names()},"},{"line_number":286,"context_line":"            \u0027datapath_type\u0027: self.conf.OVS.datapath_type,"},{"line_number":287,"context_line":"            \u0027ovs_capabilities\u0027: ovs_lib.BaseOVS().config,"},{"line_number":288,"context_line":"            \u0027agent_type\u0027: n_const.AGENT_TYPE_OVS,"},{"line_number":289,"context_line":"            \u0027start_flag\u0027: True}"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        report_interval \u003d self.conf.AGENT.report_interval"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_a7ed0df1","line":288,"in_reply_to":"1a26ad4f_b026a6cc","updated":"2015-10-29 08:49:33.000000000","message":"You aren\u0027t missing anything exactly with that particular use. But there is nothing keeping eventual multiple port types that use the same datapath from being used simultaneously, for example. Also, the way that was decided when the agent_type config option was merged was that it would immediately be replaced by this very implementation: using detection of capabilities from OVS itself to decide instead of relying on agent type.","commit_id":"e7d851ed2e55b31781cf96c2b4bfd71c6d662c75"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"b5c6ab583c32e62fb875a88288c2a0a9b7b7a756","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                               self.conf.AGENT.log_agent_heartbeats,"},{"line_number":285,"context_line":"                               \u0027extensions\u0027: self.ext_manager.names(),"},{"line_number":286,"context_line":"                               \u0027datapath_type\u0027: self.conf.OVS.datapath_type,"},{"line_number":287,"context_line":"                               \u0027ovs_capabilities\u0027: ovs_lib.BaseOVS().config,"},{"line_number":288,"context_line":"                               \u0027vhostuser_socket_dir\u0027:"},{"line_number":289,"context_line":"                               self.conf.OVS.vhostuser_socket_dir},"},{"line_number":290,"context_line":"            \u0027agent_type\u0027: self.conf.AGENT.agent_type,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_d1573a58","line":287,"updated":"2015-11-18 22:22:39.000000000","message":"are we sure we don\u0027t want to sanitize/format what\u0027s being returned by ovs_lib.BaseOVS().config? A plain passthrough without knowing the data and being returned is spilling cross-cutting concerns.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"f564b060b894385361c75d6897c89f38a4bb5887","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                               self.conf.AGENT.log_agent_heartbeats,"},{"line_number":285,"context_line":"                               \u0027extensions\u0027: self.ext_manager.names(),"},{"line_number":286,"context_line":"                               \u0027datapath_type\u0027: self.conf.OVS.datapath_type,"},{"line_number":287,"context_line":"                               \u0027ovs_capabilities\u0027: ovs_lib.BaseOVS().config,"},{"line_number":288,"context_line":"                               \u0027vhostuser_socket_dir\u0027:"},{"line_number":289,"context_line":"                               self.conf.OVS.vhostuser_socket_dir},"},{"line_number":290,"context_line":"            \u0027agent_type\u0027: self.conf.AGENT.agent_type,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_82301cea","line":287,"in_reply_to":"ba8a016a_0546997a","updated":"2015-11-20 15:56:29.000000000","message":"\u003e Imagine ovs_lib.BaseOVS().config fails silently and the dict is empty. We are going to propagate the error all the way to the server. Is that a good thing? probably not.\n\nThe solution in this patch has been to always use get() with a default on the server when accessing the config() dict. I don\u0027t know of a way around this requirement, even with something more narrowly defined since any runtime querying of the OVS installation will variable results over time. They most likely aren\u0027t going to remove options to break backward compatibility (I mean, they only just this year removed support for Python 2.4!) but we may choose to use features that don\u0027t exist in older versions.\n\nIt is useful to have a function in BaseOVS that returns the contents of the Open_vSwitch table\u0027s contents, whatever they are. With that said, agent[\u0027configurations\u0027][\u0027ovs_capabilities\u0027] doesn\u0027t have to pass the results of that method directly. I wouldn\u0027t be opposed to adding a helper function somewhere that filters config() and defines what \u0027ovs_capabilities\u0027 looks like.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"a6b88cad9c92068cd24b22edba94059ffa01f9c5","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                               self.conf.AGENT.log_agent_heartbeats,"},{"line_number":285,"context_line":"                               \u0027extensions\u0027: self.ext_manager.names(),"},{"line_number":286,"context_line":"                               \u0027datapath_type\u0027: self.conf.OVS.datapath_type,"},{"line_number":287,"context_line":"                               \u0027ovs_capabilities\u0027: ovs_lib.BaseOVS().config,"},{"line_number":288,"context_line":"                               \u0027vhostuser_socket_dir\u0027:"},{"line_number":289,"context_line":"                               self.conf.OVS.vhostuser_socket_dir},"},{"line_number":290,"context_line":"            \u0027agent_type\u0027: self.conf.AGENT.agent_type,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_0546997a","line":287,"in_reply_to":"ba8a016a_832409c5","updated":"2015-11-20 00:57:13.000000000","message":"A dict of values of unknown or fluid schema is not readable and self-documenting. Now I can agree that we have this type of practice all over the place...but is it a good practice? I personally don\u0027t think so.\n\nImagine ovs_lib.BaseOVS().config fails silently and the dict is empty. We are going to propagate the error all the way to the server. Is that a good thing? probably not.\n\nIn other words, with this we can\u0027t distinguish between what we expect to be present in this table at all times. If the table schema changes, surely the OVS agent is future proof, but we are only masking the issue that is going to propagate all the way to the server.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"220e39c575cce0c18deb897ea9576a78bdef2fde","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                               self.conf.AGENT.log_agent_heartbeats,"},{"line_number":285,"context_line":"                               \u0027extensions\u0027: self.ext_manager.names(),"},{"line_number":286,"context_line":"                               \u0027datapath_type\u0027: self.conf.OVS.datapath_type,"},{"line_number":287,"context_line":"                               \u0027ovs_capabilities\u0027: ovs_lib.BaseOVS().config,"},{"line_number":288,"context_line":"                               \u0027vhostuser_socket_dir\u0027:"},{"line_number":289,"context_line":"                               self.conf.OVS.vhostuser_socket_dir},"},{"line_number":290,"context_line":"            \u0027agent_type\u0027: self.conf.AGENT.agent_type,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_832409c5","line":287,"in_reply_to":"ba8a016a_d1573a58","updated":"2015-11-19 18:14:33.000000000","message":"It is just a dict of values. The reason I pass the whole thing instead of just what we use is that we already have datapath_types and iface_types that were added as columns in the table. Other columns for other run-time support checks could be added in the future, so it seemed reasonable to just pass the entire dict.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"852a6a507eff92ec8bdaf97d747ff72bfbd52362","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                               self.conf.AGENT.log_agent_heartbeats,"},{"line_number":285,"context_line":"                               \u0027extensions\u0027: self.ext_manager.names(),"},{"line_number":286,"context_line":"                               \u0027datapath_type\u0027: self.conf.OVS.datapath_type,"},{"line_number":287,"context_line":"                               \u0027ovs_capabilities\u0027: ovs_lib.BaseOVS().config,"},{"line_number":288,"context_line":"                               \u0027vhostuser_socket_dir\u0027:"},{"line_number":289,"context_line":"                               self.conf.OVS.vhostuser_socket_dir},"},{"line_number":290,"context_line":"            \u0027agent_type\u0027: self.conf.AGENT.agent_type,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_fc957232","line":287,"in_reply_to":"ba8a016a_d1573a58","updated":"2015-11-19 00:28:02.000000000","message":"im in two minds about this. the info being returned by ovs_lib.BaseOVS().config looks like this.\n\n sudo ovs-vsctl list Open_vSwitch\n_uuid : b8761c30-5845-4bbd-885b-ee1d2e026568\nbridges : [1003bd42-5e7f-4867-af8f-b927789610b7, 3fe690a5-b197-494c-8edf-dcba7592838a, 4fab8831-cbb7-492f-8025-13bde85abccc]\ncur_cfg : 20\ndatapath_types : [netdev, system]\ndb_version : []\nexternal_ids : {}\niface_types : [dpdk, dpdkr, dpdkvhostuser, geneve, gre, internal, ipsec_gre, lisp, patch, stt, system, tap, vxlan]\nmanager_options : []\nnext_cfg : 20\nother_config : {pmd-cpu-mask\u003d\"4000000004\"}\novs_version : []\nssl : []\nstatistics : {}\nsystem_type : []\nsystem_version : []\n\nthe only infomation currently used by this mechanisium is the iface_types list.\n\non one hand it would be nice to parse the json dictionary returned and build a versioned object on the other hand i would not want to have to update neutron to add a new feild unless we wanted to consume the info from that feild. \n\nat present the feild i think are most interesting are the \niface_types,datapath_types,other_config,ovs_version and maybe the system_version and external_ids. the ovs_version is blank because i buit from git and it is only populated in release packages. the system_version i belive stores the version of the ovs kernel module, i was using dpdk so it is blank.  the version feilds might be nice to have if you want to do sanity checks for features such as connection tracking support(hopefully in 2.5) or multicast support (in 2.4 though i think that has to be enabled in the other config setion also)\n\nif we created an object for just those 5/6 feild then that may be nicer in the long run. to be somewhat decoupled from the ovs impention  i would not want to be too specif about type of each feild byond list of strings,dictonary of strings or string feilds.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"99ebd582da37c6622daa8657217bd5ed62ee2f5d","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                               self.conf.AGENT.log_agent_heartbeats,"},{"line_number":285,"context_line":"                               \u0027extensions\u0027: self.ext_manager.names(),"},{"line_number":286,"context_line":"                               \u0027datapath_type\u0027: self.conf.OVS.datapath_type,"},{"line_number":287,"context_line":"                               \u0027ovs_capabilities\u0027: self.int_br.capabilities,"},{"line_number":288,"context_line":"                               \u0027vhostuser_socket_dir\u0027:"},{"line_number":289,"context_line":"                               self.conf.OVS.vhostuser_socket_dir},"},{"line_number":290,"context_line":"            \u0027agent_type\u0027: self.conf.AGENT.agent_type,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba8a016a_2b110bb0","line":287,"updated":"2015-11-20 16:00:47.000000000","message":"This is semantically pretty confusing... We\u0027re not interested in br_int\u0027s capabilities, we\u0027re interested in the underlying OVS capabilities. To put it another way, the capabilities don\u0027t belong to a specific bridge, they belong to OVS itself. I think that ovs_lib.BaseOVS().capabilities would be clearer.","commit_id":"eb0fe96599f5c35cb032935d58cd03551758b376"}],"neutron/plugins/ml2/drivers/openvswitch/mech_driver/mech_openvswitch.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"601a053486c46d69ed3892d5c74b5476eaf53751","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def get_vif_type(agent, context):"},{"line_number":34,"context_line":"    caps \u003d agent[\u0027configurations\u0027].get(\u0027ovs_capabilities\u0027, {})"},{"line_number":35,"context_line":"    if (\u0027dpdkvhostuser\u0027 in caps.get(\u0027iface_types\u0027, []) and"},{"line_number":36,"context_line":"            agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) \u003d\u003d"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_d1de183d","line":33,"updated":"2015-10-23 11:53:18.000000000","message":"im not a fan of functions that sometimes return and sometimes dont.\n\ncan we make this a instance method and return self.vif_type instead","commit_id":"7ad53527c1aaa308045c1eb7d8a39017050e5bee"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"601a053486c46d69ed3892d5c74b5476eaf53751","unresolved":false,"context_lines":[{"line_number":41,"context_line":"def get_vif_details(agent, context):"},{"line_number":42,"context_line":"    if (agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) !\u003d"},{"line_number":43,"context_line":"            a_const.OVS_DATAPATH_NETDEV):"},{"line_number":44,"context_line":"        return None  # No override"},{"line_number":45,"context_line":"    caps \u003d agent[\u0027configurations\u0027].get(\u0027ovs_capabilities\u0027, {})"},{"line_number":46,"context_line":"    if \u0027dpdkvhostuser\u0027 in caps.get(\u0027iface_types\u0027, []):"},{"line_number":47,"context_line":"        sock_name \u003d (constants.PORT_PREFIX + context.current[\u0027id\u0027])[:14]"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_51fd28af","line":44,"updated":"2015-10-23 11:53:18.000000000","message":"same as above if you make this a instance method then you can return\nself.vif_details","commit_id":"7ad53527c1aaa308045c1eb7d8a39017050e5bee"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"601a053486c46d69ed3892d5c74b5476eaf53751","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        \"\"\"Currently Openvswitch driver doesn\u0027t support vlan transparency.\"\"\""},{"line_number":88,"context_line":"        return False"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def try_to_bind_segment_for_agent(self, context, segment, agent):"},{"line_number":91,"context_line":"        vif_type \u003d get_vif_type(agent, context) or self.vif_type"},{"line_number":92,"context_line":"        vif_details \u003d get_vif_details(agent, context) or self.vif_details"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_f191d447","line":90,"updated":"2015-10-23 11:53:18.000000000","message":"you can remove or self.vif_type and or self.vif_details if you make the changes above.","commit_id":"7ad53527c1aaa308045c1eb7d8a39017050e5bee"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f63bbfdd4ad839bb687c24f02d003d04ea9a59a6","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            return self.vif_details"},{"line_number":87,"context_line":"        caps \u003d agent[\u0027configurations\u0027].get(\u0027ovs_capabilities\u0027, {})"},{"line_number":88,"context_line":"        if \u0027dpdkvhostuser\u0027 in caps.get(\u0027iface_types\u0027, []):"},{"line_number":89,"context_line":"            sock_name \u003d (constants.PORT_PREFIX + context.current[\u0027id\u0027])[:14]"},{"line_number":90,"context_line":"            sock_path \u003d os.path.join(constants.VHOSTUSER_SOCKET_DIR, sock_name)"},{"line_number":91,"context_line":"            return {"},{"line_number":92,"context_line":"                portbindings.CAP_PORT_FILTER: False,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a26ad4f_87f251d1","line":89,"updated":"2015-10-29 08:50:25.000000000","message":"the constants.PORT_PREFIX is not defined in neutron.common.constants.py\n\ni would suggest adding a VHOST_USER_PORT_PREFIX to the common constants. i will make this change locally and retest to ensure no other modifications are required.","commit_id":"84e2d51105058d740c47d6382a69082f79164533"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"f7a97ef5def22828d8df6f06aaff89e7ddcbdc8f","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        else:"},{"line_number":73,"context_line":"            return False"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def get_vif_type(self, agent, context):"},{"line_number":76,"context_line":"        caps \u003d agent[\u0027configurations\u0027].get(\u0027ovs_capabilities\u0027, {})"},{"line_number":77,"context_line":"        if (\u0027dpdkvhostuser\u0027 in caps.get(\u0027iface_types\u0027, []) and"},{"line_number":78,"context_line":"                agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) \u003d\u003d"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_42ab8275","line":75,"updated":"2015-11-18 20:03:54.000000000","message":"Shouldn\u0027t the OVS agent report a single value in the configurations dict that states that it\u0027s actually running in \u0027DPDK\u0027 mode? The logic here that checks that the agent is both capable of dpdk and that the datapath_type is set doesn\u0027t \u0027feel\u0027 right, it feels like agent logic. I\u0027m asking you since you\u0027ve given this a lot more thought than I have.","commit_id":"d2a0823843125c25fd5a15696d27f32ab4e25999"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"2b56b351db47bb48efea24890bf51965ab9b0591","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        else:"},{"line_number":73,"context_line":"            return False"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def get_vif_type(self, agent, context):"},{"line_number":76,"context_line":"        caps \u003d agent[\u0027configurations\u0027].get(\u0027ovs_capabilities\u0027, {})"},{"line_number":77,"context_line":"        if (\u0027dpdkvhostuser\u0027 in caps.get(\u0027iface_types\u0027, []) and"},{"line_number":78,"context_line":"                agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) \u003d\u003d"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_45f06c91","line":75,"in_reply_to":"ba8a016a_42ab8275","updated":"2015-11-18 22:44:52.000000000","message":"This is kind of what my initial patch did, but I believe Sean had concerns about differing configuration between this and agentless drivers using dpdk like ODL? It may have just been that I used a configuration value specifying that dpdk could should be used and passing that over that he objected to, though.","commit_id":"d2a0823843125c25fd5a15696d27f32ab4e25999"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cfd352d9e1daec22ad823e70cae1c4006b7f4a5b","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        else:"},{"line_number":73,"context_line":"            return False"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def get_vif_type(self, agent, context):"},{"line_number":76,"context_line":"        caps \u003d agent[\u0027configurations\u0027].get(\u0027ovs_capabilities\u0027, {})"},{"line_number":77,"context_line":"        if (\u0027dpdkvhostuser\u0027 in caps.get(\u0027iface_types\u0027, []) and"},{"line_number":78,"context_line":"                agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) \u003d\u003d"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_37bc7305","line":75,"in_reply_to":"ba8a016a_45f06c91","updated":"2015-11-19 00:39:56.000000000","message":"hi yes my original concern was to keep the semantics as close to the implementation that we were submitting for netwoking-odl https://review.openstack.org/#/c/215612/. in both cases the ml2 driver will determin what vif_type to use by comparing the datapath type and testing for the existnace of the dpdkvhostuser interface in the iface_types list.\n\nin the ovs mech driver it gets this info from the agent report configuration section below and in the odl case it queries odl for the infomation via the odl topology api but the basic logic is the same.","commit_id":"d2a0823843125c25fd5a15696d27f32ab4e25999"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"f7a97ef5def22828d8df6f06aaff89e7ddcbdc8f","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def get_vif_type(self, agent, context):"},{"line_number":76,"context_line":"        caps \u003d agent[\u0027configurations\u0027].get(\u0027ovs_capabilities\u0027, {})"},{"line_number":77,"context_line":"        if (\u0027dpdkvhostuser\u0027 in caps.get(\u0027iface_types\u0027, []) and"},{"line_number":78,"context_line":"                agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) \u003d\u003d"},{"line_number":79,"context_line":"                a_const.OVS_DATAPATH_NETDEV):"},{"line_number":80,"context_line":"            return portbindings.VIF_TYPE_VHOST_USER"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_a21fce06","line":77,"updated":"2015-11-18 20:03:54.000000000","message":"dpdkvhostuser should probably be a constant.","commit_id":"d2a0823843125c25fd5a15696d27f32ab4e25999"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"2b56b351db47bb48efea24890bf51965ab9b0591","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def get_vif_type(self, agent, context):"},{"line_number":76,"context_line":"        caps \u003d agent[\u0027configurations\u0027].get(\u0027ovs_capabilities\u0027, {})"},{"line_number":77,"context_line":"        if (\u0027dpdkvhostuser\u0027 in caps.get(\u0027iface_types\u0027, []) and"},{"line_number":78,"context_line":"                agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) \u003d\u003d"},{"line_number":79,"context_line":"                a_const.OVS_DATAPATH_NETDEV):"},{"line_number":80,"context_line":"            return portbindings.VIF_TYPE_VHOST_USER"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_65ed70b6","line":77,"in_reply_to":"ba8a016a_a21fce06","updated":"2015-11-18 22:44:52.000000000","message":"Done.","commit_id":"d2a0823843125c25fd5a15696d27f32ab4e25999"},{"author":{"_account_id":13869,"name":"Maxime Leroy","email":"maxime.leroy@6wind.com","username":"mleroy"},"change_message_id":"80844aa343ffddcfbb550846c41b5d60062bde24","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) \u003d\u003d"},{"line_number":79,"context_line":"                a_const.OVS_DATAPATH_NETDEV):"},{"line_number":80,"context_line":"            return portbindings.VIF_TYPE_VHOST_USER"},{"line_number":81,"context_line":"        return self.vif_type"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def get_vif_details(self, agent, context):"},{"line_number":84,"context_line":"        if (agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) !\u003d"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_8d39a4f4","line":81,"updated":"2015-11-18 18:01:46.000000000","message":"It\u0027s not logical to have a self.vif_type attribute in the OpenvswitchMechanismDriver class and the get_vif_type methods can returns a different value.\n\nIn fact, you are breaking the logic that SimpleAgentMechanismDriverBase supports only one vif_type.\n\nIf we want to support several vif_type, we should do the modification on  SimpleAgentMechanismDriverBase class.\n\nI have started to work on this topic, see: https://review.openstack.org/#/c/247064/\n\nWhat do you think ?","commit_id":"d2a0823843125c25fd5a15696d27f32ab4e25999"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cf3abe4d120db615c6704fb6250bcee453ff9823","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) \u003d\u003d"},{"line_number":79,"context_line":"                a_const.OVS_DATAPATH_NETDEV):"},{"line_number":80,"context_line":"            return portbindings.VIF_TYPE_VHOST_USER"},{"line_number":81,"context_line":"        return self.vif_type"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def get_vif_details(self, agent, context):"},{"line_number":84,"context_line":"        if (agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) !\u003d"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_feefb4e6","line":81,"in_reply_to":"ba8a016a_83cf3328","updated":"2015-11-18 19:00:15.000000000","message":"this is also not the first driver that inherited form the SimpleAgentMechansimDriver  to change the to  vif type in the bind port.\n\nboth the Mellanox and bigswitch plugins used to report diffent VIF types when appropriate  in  icehouse/juno. \n\ni dont know if they still do but there is no contract in place that a plugin or ml2 driver should always return the same vif_type.\n\ni dont think we should extend the SimpleAgentMechansimDriver  we could but i dont see what would be gained and it may break existing ml2 drivers if we did.","commit_id":"d2a0823843125c25fd5a15696d27f32ab4e25999"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"833647eccb2ce0bc93ed0f480081c0f8994354fe","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) \u003d\u003d"},{"line_number":79,"context_line":"                a_const.OVS_DATAPATH_NETDEV):"},{"line_number":80,"context_line":"            return portbindings.VIF_TYPE_VHOST_USER"},{"line_number":81,"context_line":"        return self.vif_type"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def get_vif_details(self, agent, context):"},{"line_number":84,"context_line":"        if (agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) !\u003d"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_83cf3328","line":81,"in_reply_to":"ba8a016a_8d39a4f4","updated":"2015-11-18 18:33:38.000000000","message":"SimpleAgentMechanismDriver has never actually used self.vif_type, etc. in anything but the try_to_bind_segment_for_agent function. There is no contract that the vif type can\u0027t be changed just because one can be assigned during init. I had a solution in another patch that didn\u0027t do this, but due to other reviews I added it.\n\nThe goal here was specifically not to break users of SimpleAgentMechansimDriver who might do something with self.vif_driver. It seemed like completely changing its API as you do could be harmful/have far-reaching consequences.\n\nI like having defined classes for the various VIF details/types (my first patch which was abandoned because of other comments had something similar), but not making API-breaking changes to the SimpleAgentMechanismDriver.","commit_id":"d2a0823843125c25fd5a15696d27f32ab4e25999"},{"author":{"_account_id":13869,"name":"Maxime Leroy","email":"maxime.leroy@6wind.com","username":"mleroy"},"change_message_id":"87030074cdce430a5a5739d37896175c8e39d778","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) \u003d\u003d"},{"line_number":79,"context_line":"                a_const.OVS_DATAPATH_NETDEV):"},{"line_number":80,"context_line":"            return portbindings.VIF_TYPE_VHOST_USER"},{"line_number":81,"context_line":"        return self.vif_type"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def get_vif_details(self, agent, context):"},{"line_number":84,"context_line":"        if (agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) !\u003d"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_16d5b81a","line":81,"in_reply_to":"ba8a016a_feefb4e6","updated":"2015-11-18 21:48:15.000000000","message":"Your actually code  works. But it\u0027s still going against the logic that SimpleAgentMechanismDriver has only one vif type. \n\nThe patch I propose, doesn\u0027t break at all the API of SimpleAgentMechanismDriver. It just extends this one to support several vif_type. It doesn\u0027t require any modification on other mech driver. Other mech driver still works like before.\n\nI also plan to modify the open vSwitch mech driver and linux bridge mech driver to support fast path offload with vhost_user vif type. It\u0027s why we need a proper api to support multiple vif type in SimpleAgentMechanismDriver.","commit_id":"d2a0823843125c25fd5a15696d27f32ab4e25999"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"f7a97ef5def22828d8df6f06aaff89e7ddcbdc8f","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        sockdir \u003d agent[\u0027configurations\u0027].get(\u0027vhostuser_socket_dir\u0027,"},{"line_number":89,"context_line":"                                              a_const.VHOST_USER_SOCKET_DIR)"},{"line_number":90,"context_line":"        if \u0027dpdkvhostuser\u0027 in caps.get(\u0027iface_types\u0027, []):"},{"line_number":91,"context_line":"            sock_name \u003d (constants.VHOST_USER_DEVICE_PREFIX"},{"line_number":92,"context_line":"                         + context.current[\u0027id\u0027])[:14]"},{"line_number":93,"context_line":"            sock_path \u003d os.path.join(sockdir, sock_name)"},{"line_number":94,"context_line":"            return {"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_02a33ab3","line":91,"updated":"2015-11-18 20:03:54.000000000","message":"Lines 91 + 92 can be whisked away to a function that accepts a port ID and returns the socket path.","commit_id":"d2a0823843125c25fd5a15696d27f32ab4e25999"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"2b56b351db47bb48efea24890bf51965ab9b0591","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        sockdir \u003d agent[\u0027configurations\u0027].get(\u0027vhostuser_socket_dir\u0027,"},{"line_number":89,"context_line":"                                              a_const.VHOST_USER_SOCKET_DIR)"},{"line_number":90,"context_line":"        if \u0027dpdkvhostuser\u0027 in caps.get(\u0027iface_types\u0027, []):"},{"line_number":91,"context_line":"            sock_name \u003d (constants.VHOST_USER_DEVICE_PREFIX"},{"line_number":92,"context_line":"                         + context.current[\u0027id\u0027])[:14]"},{"line_number":93,"context_line":"            sock_path \u003d os.path.join(sockdir, sock_name)"},{"line_number":94,"context_line":"            return {"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_70bf6caa","line":91,"in_reply_to":"ba8a016a_02a33ab3","updated":"2015-11-18 22:44:52.000000000","message":"I suppose they could, but then it would take 2 lines and make it 5 (3 lines + 2 empty lines) and still only be used in one place. :)\n\nJust kidding. I added the helper function.","commit_id":"d2a0823843125c25fd5a15696d27f32ab4e25999"}],"neutron/tests/functional/agent/test_l2_ovs_agent.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"b5c6ab583c32e62fb875a88288c2a0a9b7b7a756","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                                     expected,"},{"line_number":41,"context_line":"                                     \"OVS\")"},{"line_number":42,"context_line":"        if \u0027datapath_types\u0027 not in self.ovs.config:"},{"line_number":43,"context_line":"            import mock"},{"line_number":44,"context_line":"            mock.patch(\u0027neutron.agent.common.ovs_lib.BaseOVS.config\u0027,"},{"line_number":45,"context_line":"                       new_callable\u003dmock.PropertyMock,"},{"line_number":46,"context_line":"                       return_value\u003d{\u0027datapath_types\u0027: [\u0027system\u0027, \u0027netdev\u0027],"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_114ce29c","line":43,"updated":"2015-11-18 22:22:39.000000000","message":"the behavior of this test changes on which platform you\u0027re running it...this is a bit dodgy, this isn\u0027t very fancy...besides our emeritus testing LT tells us that we should refrain from mocking in system-env interaction.\n\nIdeally we\u0027d split this into dpdk and non-dpdk env and make one skip or the other depending on the environment.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"db6d45e5660221ef0fa342109a22ba60acacec8e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                                     expected,"},{"line_number":41,"context_line":"                                     \"OVS\")"},{"line_number":42,"context_line":"        if \u0027datapath_types\u0027 not in self.ovs.config:"},{"line_number":43,"context_line":"            import mock"},{"line_number":44,"context_line":"            mock.patch(\u0027neutron.agent.common.ovs_lib.BaseOVS.config\u0027,"},{"line_number":45,"context_line":"                       new_callable\u003dmock.PropertyMock,"},{"line_number":46,"context_line":"                       return_value\u003d{\u0027datapath_types\u0027: [\u0027system\u0027, \u0027netdev\u0027],"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_f796ebee","line":43,"in_reply_to":"ba8a016a_114ce29c","updated":"2015-11-19 00:53:09.000000000","message":"Armando has a point. We can conditionally skip test_datapath_type_netdev according to system capabilities. Kind of a more straight forward approach than the mocking.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"220e39c575cce0c18deb897ea9576a78bdef2fde","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                                     expected,"},{"line_number":41,"context_line":"                                     \"OVS\")"},{"line_number":42,"context_line":"        if \u0027datapath_types\u0027 not in self.ovs.config:"},{"line_number":43,"context_line":"            import mock"},{"line_number":44,"context_line":"            mock.patch(\u0027neutron.agent.common.ovs_lib.BaseOVS.config\u0027,"},{"line_number":45,"context_line":"                       new_callable\u003dmock.PropertyMock,"},{"line_number":46,"context_line":"                       return_value\u003d{\u0027datapath_types\u0027: [\u0027system\u0027, \u0027netdev\u0027],"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_40a4a106","line":43,"in_reply_to":"ba8a016a_114ce29c","updated":"2015-11-19 18:14:33.000000000","message":"I just tested running with self.ovs.config returning {} and even without the mock, this test works. This must have been a holdover from a previous version of the patch. Removing.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"89857a680b8dfe433e51a582c4661d8d445ba574","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                                     expected,"},{"line_number":41,"context_line":"                                     \"OVS\")"},{"line_number":42,"context_line":"        if \u0027datapath_types\u0027 not in self.ovs.config:"},{"line_number":43,"context_line":"            import mock"},{"line_number":44,"context_line":"            mock.patch(\u0027neutron.agent.common.ovs_lib.BaseOVS.config\u0027,"},{"line_number":45,"context_line":"                       new_callable\u003dmock.PropertyMock,"},{"line_number":46,"context_line":"                       return_value\u003d{\u0027datapath_types\u0027: [\u0027system\u0027, \u0027netdev\u0027],"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_52f7c558","line":43,"in_reply_to":"ba8a016a_f796ebee","updated":"2015-11-19 01:28:10.000000000","message":"Thanks mate! I knew I wasn\u0027t going to let you down :)","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7a9a83d837dae59c0ca16ad5330bd51227534d50","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                                     expected,"},{"line_number":41,"context_line":"                                     \"OVS\")"},{"line_number":42,"context_line":"        if \u0027datapath_types\u0027 not in self.ovs.config:"},{"line_number":43,"context_line":"            import mock"},{"line_number":44,"context_line":"            mock.patch(\u0027neutron.agent.common.ovs_lib.BaseOVS.config\u0027,"},{"line_number":45,"context_line":"                       new_callable\u003dmock.PropertyMock,"},{"line_number":46,"context_line":"                       return_value\u003d{\u0027datapath_types\u0027: [\u0027system\u0027, \u0027netdev\u0027],"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_b23871ef","line":43,"in_reply_to":"ba8a016a_f796ebee","updated":"2015-11-19 02:28:27.000000000","message":"actully just one question  regarding CIs.\n\ncurrently our intel-netwoking-ci runs on every patch to neutron and runs a subset of the tempest test.\n\ni believe we currently run tempest.api.network.* and tempest.scenario.test_network_basic_ops.TestNetworkBasicOps\nwe could extend this if desired to run more or all of tempest but this the basic subset that is currently used.\n\nhttp://intel-openstack-ci-logs.ovh/networking-ci/refs/changes/64/237264/14/tempest/testr_results.html\n\nwe should be able to add running the neutron functional test to our ci to execute this test but does it make sense to add infra gate job at somepoint? \nit might make more sense to wait until ovs-dpdk is packaged as a non experimental package in a major disto which will not happen in this release cycle so i dont think we need a gate job now.\n\nin either case i will ask the engineers working on our networking ci to look at  adding a second job to run the standard neutron functional tests. we have a docker container based ci so we may need to create  or update our docker image to enable the fuctests to work. we would have to write a separate Jenkins job to run the functests and caputre the logs but i think it should be doable. i have manually run the functional test in a docker container against ovs-dpdk before but im just not sure how much work it is to automate in a reliable way.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"b5c6ab583c32e62fb875a88288c2a0a9b7b7a756","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            \u0027neutron.agent.common.ovs_lib.OVSBridge.get_ports_attributes\u0027,"},{"line_number":130,"context_line":"            return_value\u003d[]).start()"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        mock.patch(\u0027neutron.agent.common.ovs_lib.BaseOVS.config\u0027,"},{"line_number":133,"context_line":"                   new_callable\u003dmock.PropertyMock,"},{"line_number":134,"context_line":"                   return_value\u003d{}).start()"},{"line_number":135,"context_line":"        with mock.patch.object(self.mod_agent.OVSNeutronAgent,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_5156ea2a","line":132,"updated":"2015-11-18 22:22:39.000000000","message":"I wonder if this should be mocked in a common, base place.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"220e39c575cce0c18deb897ea9576a78bdef2fde","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            \u0027neutron.agent.common.ovs_lib.OVSBridge.get_ports_attributes\u0027,"},{"line_number":130,"context_line":"            return_value\u003d[]).start()"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        mock.patch(\u0027neutron.agent.common.ovs_lib.BaseOVS.config\u0027,"},{"line_number":133,"context_line":"                   new_callable\u003dmock.PropertyMock,"},{"line_number":134,"context_line":"                   return_value\u003d{}).start()"},{"line_number":135,"context_line":"        with mock.patch.object(self.mod_agent.OVSNeutronAgent,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_20e63d15","line":132,"in_reply_to":"ba8a016a_5156ea2a","updated":"2015-11-19 18:14:33.000000000","message":"It seems like maybe it should, but this class doesn\u0027t inherit from anything else so I\u0027m not sure where that would be. So for now I\u0027m just leaving it here in the base class for all of the ovs agent test classes.","commit_id":"19e17c5e45eb59434ae8fc4959177b111ff8dae8"}]}
