)]}'
{"etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini":[{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":60,"context_line":"# tunnel_id_ranges \u003d"},{"line_number":61,"context_line":"# Example: tunnel_id_ranges \u003d 1:1000"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"# (IntOpt) A single integer representing the port number to utilize if"},{"line_number":64,"context_line":"# tenant_network_type is \u0027vxlan\u0027. By default, this will make use of the"},{"line_number":65,"context_line":"# Open vSwitch default value of \u00274789\u0027 if not specified."},{"line_number":66,"context_line":"#"}],"source_content_type":"text/x-properties","patch_set":21,"id":"AAAAPH%2F%2FcsI%3D","line":63,"updated":"2013-06-03 18:30:12.000000000","message":"Just a nit, but the integer is the port number, not a representation of it. How about something like \"The port number to utilize ...\" or \"An integer specifying the port number to utilize ...\"?","commit_id":"925e1a6a783c5f6d6a7cf5ff89f5fc871bd6a14f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":60,"context_line":"# tunnel_id_ranges \u003d"},{"line_number":61,"context_line":"# Example: tunnel_id_ranges \u003d 1:1000"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"# (IntOpt) A single integer representing the port number to utilize if"},{"line_number":64,"context_line":"# tenant_network_type is \u0027vxlan\u0027. By default, this will make use of the"},{"line_number":65,"context_line":"# Open vSwitch default value of \u00274789\u0027 if not specified."},{"line_number":66,"context_line":"#"}],"source_content_type":"text/x-properties","patch_set":21,"id":"AAAAPH%2F%2Fcj4%3D","line":63,"in_reply_to":"AAAAPH%2F%2FcsI%3D","updated":"2013-06-03 18:55:59.000000000","message":"Done","commit_id":"925e1a6a783c5f6d6a7cf5ff89f5fc871bd6a14f"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":64,"context_line":"# tenant_network_type is \u0027vxlan\u0027. By default, this will make use of the"},{"line_number":65,"context_line":"# Open vSwitch default value of \u00274789\u0027 if not specified."},{"line_number":66,"context_line":"#"},{"line_number":67,"context_line":"# Default: vxlan_udp_port \u003d"},{"line_number":68,"context_line":"# Example: vxlan_udp_port \u003d 8472"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"# Do not change this parameter unless you have a good reason to."}],"source_content_type":"text/x-properties","patch_set":21,"id":"AAAAPH%2F%2Fcr4%3D","line":67,"updated":"2013-06-03 18:30:12.000000000","message":"A recent patch removed the \"Default: \" prefix from all the comments like the line above.","commit_id":"925e1a6a783c5f6d6a7cf5ff89f5fc871bd6a14f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":64,"context_line":"# tenant_network_type is \u0027vxlan\u0027. By default, this will make use of the"},{"line_number":65,"context_line":"# Open vSwitch default value of \u00274789\u0027 if not specified."},{"line_number":66,"context_line":"#"},{"line_number":67,"context_line":"# Default: vxlan_udp_port \u003d"},{"line_number":68,"context_line":"# Example: vxlan_udp_port \u003d 8472"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"# Do not change this parameter unless you have a good reason to."}],"source_content_type":"text/x-properties","patch_set":21,"id":"AAAAPH%2F%2Fcj0%3D","line":67,"in_reply_to":"AAAAPH%2F%2Fcr4%3D","updated":"2013-06-03 18:55:59.000000000","message":"Done","commit_id":"925e1a6a783c5f6d6a7cf5ff89f5fc871bd6a14f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":112,"context_line":"# this will make use of the Open vSwitch default value of \u00274789\u0027 if not"},{"line_number":113,"context_line":"# specified."},{"line_number":114,"context_line":"#"},{"line_number":115,"context_line":"# vxlan_udp_port \u003d"},{"line_number":116,"context_line":"# Example: vxlan_udp_port \u003d 8472"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"[SECURITYGROUP]"}],"source_content_type":"text/x-properties","patch_set":25,"id":"AAAAPX%2F%2FzsE%3D","line":115,"updated":"2013-06-10 06:20:16.000000000","message":"Please show the default port here 4789\n# vxlan_udp_port \u003d 4798","commit_id":"7958042d06d4b532b5e5f64b0b6cda6a73342d84"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":112,"context_line":"# this will make use of the Open vSwitch default value of \u00274789\u0027 if not"},{"line_number":113,"context_line":"# specified."},{"line_number":114,"context_line":"#"},{"line_number":115,"context_line":"# vxlan_udp_port \u003d"},{"line_number":116,"context_line":"# Example: vxlan_udp_port \u003d 8472"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"[SECURITYGROUP]"}],"source_content_type":"text/x-properties","patch_set":25,"id":"AAAAPX%2F%2Fy%2FE%3D","line":115,"in_reply_to":"AAAAPX%2F%2FzIs%3D","updated":"2013-06-10 14:11:40.000000000","message":"Gary, the default configuration is to not specify vxlan_udp_port, causing OVS to use the default value of 4789. So I believe the way Kyle has it is correct. I hope this makes sense -- I am finding it a little difficult to word it right.","commit_id":"7958042d06d4b532b5e5f64b0b6cda6a73342d84"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":112,"context_line":"# this will make use of the Open vSwitch default value of \u00274789\u0027 if not"},{"line_number":113,"context_line":"# specified."},{"line_number":114,"context_line":"#"},{"line_number":115,"context_line":"# vxlan_udp_port \u003d"},{"line_number":116,"context_line":"# Example: vxlan_udp_port \u003d 8472"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"[SECURITYGROUP]"}],"source_content_type":"text/x-properties","patch_set":25,"id":"AAAAPX%2F%2FzIs%3D","line":115,"in_reply_to":"AAAAPX%2F%2FzsE%3D","updated":"2013-06-10 13:38:17.000000000","message":"Please look 3 lines above to see the default value referenced.","commit_id":"7958042d06d4b532b5e5f64b0b6cda6a73342d84"}],"etc/quantum/rootwrap.d/openvswitch-plugin.filters":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":11,"context_line":"# openvswitch-agent"},{"line_number":12,"context_line":"# unclear whether both variants are necessary, but I\u0027m transliterating"},{"line_number":13,"context_line":"# from the old mechanism"},{"line_number":14,"context_line":"modinfo: CommandFilter, modinfo, root"},{"line_number":15,"context_line":"ovs-vsctl: CommandFilter, ovs-vsctl, root"},{"line_number":16,"context_line":"ovs-ofctl: CommandFilter, ovs-ofctl, root"},{"line_number":17,"context_line":"xe: CommandFilter, xe, root"}],"source_content_type":"application/octet-stream","patch_set":25,"id":"AAAAPX%2F%2F0hs%3D","line":14,"updated":"2013-06-08 23:36:51.000000000","message":"nit: I don\u0027t think we need this in here as it doesn\u0027t require root to run.","commit_id":"7958042d06d4b532b5e5f64b0b6cda6a73342d84"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":11,"context_line":"# openvswitch-agent"},{"line_number":12,"context_line":"# unclear whether both variants are necessary, but I\u0027m transliterating"},{"line_number":13,"context_line":"# from the old mechanism"},{"line_number":14,"context_line":"modinfo: CommandFilter, modinfo, root"},{"line_number":15,"context_line":"ovs-vsctl: CommandFilter, ovs-vsctl, root"},{"line_number":16,"context_line":"ovs-ofctl: CommandFilter, ovs-ofctl, root"},{"line_number":17,"context_line":"xe: CommandFilter, xe, root"}],"source_content_type":"application/octet-stream","patch_set":25,"id":"AAAAPX%2F%2FzIg%3D","line":14,"in_reply_to":"AAAAPX%2F%2F0hs%3D","updated":"2013-06-10 13:38:17.000000000","message":"Done","commit_id":"7958042d06d4b532b5e5f64b0b6cda6a73342d84"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":11,"context_line":"# openvswitch-agent"},{"line_number":12,"context_line":"# unclear whether both variants are necessary, but I\u0027m transliterating"},{"line_number":13,"context_line":"# from the old mechanism"},{"line_number":14,"context_line":"modinfo: CommandFilter, modinfo, root"},{"line_number":15,"context_line":"ovs-vsctl: CommandFilter, ovs-vsctl, root"},{"line_number":16,"context_line":"ovs-ofctl: CommandFilter, ovs-ofctl, root"},{"line_number":17,"context_line":"xe: CommandFilter, xe, root"}],"source_content_type":"application/octet-stream","patch_set":25,"id":"AAAAPX%2F%2FztU%3D","line":14,"in_reply_to":"AAAAPX%2F%2F0hs%3D","updated":"2013-06-10 06:20:16.000000000","message":"I agree with Aaron. Please remove this.","commit_id":"7958042d06d4b532b5e5f64b0b6cda6a73342d84"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":11,"context_line":"# openvswitch-agent"},{"line_number":12,"context_line":"# unclear whether both variants are necessary, but I\u0027m transliterating"},{"line_number":13,"context_line":"# from the old mechanism"},{"line_number":14,"context_line":"modinfo: CommandFilter, modinfo, root"},{"line_number":15,"context_line":"ovs-vsctl: CommandFilter, ovs-vsctl, root"},{"line_number":16,"context_line":"ovs-ofctl: CommandFilter, ovs-ofctl, root"},{"line_number":17,"context_line":"xe: CommandFilter, xe, root"}],"source_content_type":"application/octet-stream","patch_set":25,"id":"AAAAPX%2F%2FzIc%3D","line":14,"in_reply_to":"AAAAPX%2F%2FztU%3D","updated":"2013-06-10 13:38:17.000000000","message":"Done","commit_id":"7958042d06d4b532b5e5f64b0b6cda6a73342d84"}],"quantum/agent/linux/ovs_lib.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"b9555fbaab9eda7d24c17c9de9900ec91d43f4e9","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from quantum.agent.linux import utils"},{"line_number":24,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":25,"context_line":"from quantum.plugins.openvswitch.common import constants as constants"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FvTY%3D","line":25,"updated":"2013-05-24 02:36:57.000000000","message":"\"as constants\" not needed if you are not renaming.","commit_id":"3a98a96a67d94488cc4d40b9fa91925e8105eacd"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from quantum.agent.linux import utils"},{"line_number":24,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":25,"context_line":"from quantum.plugins.openvswitch.common import constants as constants"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FvQg%3D","line":25,"in_reply_to":"AAAAPH%2F%2FvTY%3D","updated":"2013-05-24 02:43:05.000000000","message":"Done","commit_id":"3a98a96a67d94488cc4d40b9fa91925e8105eacd"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":169,"context_line":"        if tunnel_type \u003d\u003d constants.TYPE_VXLAN:"},{"line_number":170,"context_line":"            self.set_db_attribute(\"Interface\", port_name, \"type\", \"vxlan\")"},{"line_number":171,"context_line":"        else:"},{"line_number":172,"context_line":"            self.set_db_attribute(\"Interface\", port_name, \"type\", \"gre\")"},{"line_number":173,"context_line":"        self.set_db_attribute(\"Interface\", port_name, \"options:remote_ip\","},{"line_number":174,"context_line":"                              remote_ip)"},{"line_number":175,"context_line":"        self.set_db_attribute(\"Interface\", port_name, \"options:in_key\", \"flow\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2FsmU%3D","line":172,"updated":"2013-05-25 22:44:12.000000000","message":"Given the values assigned to the constants, why don\u0027t pass them directly to set_db_attribute?\n\nDo you want to keep it safe in case we change our constant values?","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":169,"context_line":"        if tunnel_type \u003d\u003d constants.TYPE_VXLAN:"},{"line_number":170,"context_line":"            self.set_db_attribute(\"Interface\", port_name, \"type\", \"vxlan\")"},{"line_number":171,"context_line":"        else:"},{"line_number":172,"context_line":"            self.set_db_attribute(\"Interface\", port_name, \"type\", \"gre\")"},{"line_number":173,"context_line":"        self.set_db_attribute(\"Interface\", port_name, \"options:remote_ip\","},{"line_number":174,"context_line":"                              remote_ip)"},{"line_number":175,"context_line":"        self.set_db_attribute(\"Interface\", port_name, \"options:in_key\", \"flow\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fq9Y%3D","line":172,"in_reply_to":"AAAAPH%2F%2FsgY%3D","updated":"2013-05-28 02:15:42.000000000","message":"Done","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":169,"context_line":"        if tunnel_type \u003d\u003d constants.TYPE_VXLAN:"},{"line_number":170,"context_line":"            self.set_db_attribute(\"Interface\", port_name, \"type\", \"vxlan\")"},{"line_number":171,"context_line":"        else:"},{"line_number":172,"context_line":"            self.set_db_attribute(\"Interface\", port_name, \"type\", \"gre\")"},{"line_number":173,"context_line":"        self.set_db_attribute(\"Interface\", port_name, \"options:remote_ip\","},{"line_number":174,"context_line":"                              remote_ip)"},{"line_number":175,"context_line":"        self.set_db_attribute(\"Interface\", port_name, \"options:in_key\", \"flow\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2FsgY%3D","line":172,"in_reply_to":"AAAAPH%2F%2FsmU%3D","updated":"2013-05-26 06:47:46.000000000","message":"+1","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":169,"context_line":"        if tunnel_type \u003d\u003d constants.TYPE_VXLAN:"},{"line_number":170,"context_line":"            self.set_db_attribute(\"Interface\", port_name, \"type\", \"vxlan\")"},{"line_number":171,"context_line":"        else:"},{"line_number":172,"context_line":"            self.set_db_attribute(\"Interface\", port_name, \"type\", \"gre\")"},{"line_number":173,"context_line":"        self.set_db_attribute(\"Interface\", port_name, \"options:remote_ip\","},{"line_number":174,"context_line":"                              remote_ip)"},{"line_number":175,"context_line":"        self.set_db_attribute(\"Interface\", port_name, \"options:in_key\", \"flow\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fq9c%3D","line":172,"in_reply_to":"AAAAPH%2F%2FsmU%3D","updated":"2013-05-28 02:15:42.000000000","message":"Done","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":308,"context_line":""},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"def check_version(root_helper):"},{"line_number":311,"context_line":"    args \u003d [\"ovs-vsctl\", \"--timeout\u003d2\", \"--version\"]"},{"line_number":312,"context_line":"    try:"},{"line_number":313,"context_line":"        return utils.execute(args, root_helper\u003droot_helper)"},{"line_number":314,"context_line":"    except Exception as e:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2FsmY%3D","line":311,"updated":"2013-05-25 22:44:12.000000000","message":"timeout has not effect for version, I think","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":308,"context_line":""},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"def check_version(root_helper):"},{"line_number":311,"context_line":"    args \u003d [\"ovs-vsctl\", \"--timeout\u003d2\", \"--version\"]"},{"line_number":312,"context_line":"    try:"},{"line_number":313,"context_line":"        return utils.execute(args, root_helper\u003droot_helper)"},{"line_number":314,"context_line":"    except Exception as e:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fq9Q%3D","line":311,"in_reply_to":"AAAAPH%2F%2FsmY%3D","updated":"2013-05-28 02:15:42.000000000","message":"Fair point, removing.","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":312,"context_line":"    try:"},{"line_number":313,"context_line":"        return utils.execute(args, root_helper\u003droot_helper)"},{"line_number":314,"context_line":"    except Exception as e:"},{"line_number":315,"context_line":"        LOG.exception(_(\"Unable to retrieve version. Exception: %s\"), e)"},{"line_number":316,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fsf4%3D","line":315,"updated":"2013-05-26 06:47:46.000000000","message":"I do not think that the exception needs to be passed to the LOG.exception.","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":312,"context_line":"    try:"},{"line_number":313,"context_line":"        return utils.execute(args, root_helper\u003droot_helper)"},{"line_number":314,"context_line":"    except Exception as e:"},{"line_number":315,"context_line":"        LOG.exception(_(\"Unable to retrieve version. Exception: %s\"), e)"},{"line_number":316,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fq9M%3D","line":315,"in_reply_to":"AAAAPH%2F%2Fsf4%3D","updated":"2013-05-28 02:15:42.000000000","message":"Done","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":171,"context_line":"                                  constants.TYPE_VXLAN)"},{"line_number":172,"context_line":"        else:"},{"line_number":173,"context_line":"            self.set_db_attribute(\"Interface\", port_name, \"type\","},{"line_number":174,"context_line":"                                  constants.TYPE_GRE)"},{"line_number":175,"context_line":"        self.set_db_attribute(\"Interface\", port_name, \"options:remote_ip\","},{"line_number":176,"context_line":"                              remote_ip)"},{"line_number":177,"context_line":"        self.set_db_attribute(\"Interface\", port_name, \"options:in_key\", \"flow\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2Fq48%3D","line":174,"updated":"2013-05-28 03:08:07.000000000","message":"There seems no need of \"if\". Please consider the following instead of L.169-174.\n\nself.set_db_attribute(\"Interface\", port_name, \"type\", tunnel_type)","commit_id":"5370576fe0c4845f0595aaba6f66e095342889ef"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":171,"context_line":"                                  constants.TYPE_VXLAN)"},{"line_number":172,"context_line":"        else:"},{"line_number":173,"context_line":"            self.set_db_attribute(\"Interface\", port_name, \"type\","},{"line_number":174,"context_line":"                                  constants.TYPE_GRE)"},{"line_number":175,"context_line":"        self.set_db_attribute(\"Interface\", port_name, \"options:remote_ip\","},{"line_number":176,"context_line":"                              remote_ip)"},{"line_number":177,"context_line":"        self.set_db_attribute(\"Interface\", port_name, \"options:in_key\", \"flow\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2Fq4I%3D","line":174,"in_reply_to":"AAAAPH%2F%2Fq48%3D","updated":"2013-05-28 03:25:36.000000000","message":"Done","commit_id":"5370576fe0c4845f0595aaba6f66e095342889ef"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":309,"context_line":"        return []"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"def check_version(root_helper):"},{"line_number":313,"context_line":"    args \u003d [\"ovs-vsctl\", \"--version\"]"},{"line_number":314,"context_line":"    try:"},{"line_number":315,"context_line":"        return utils.execute(args, root_helper\u003droot_helper)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2Fq4o%3D","line":312,"updated":"2013-05-28 03:08:07.000000000","message":"get_version is a better method name.","commit_id":"5370576fe0c4845f0595aaba6f66e095342889ef"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":309,"context_line":"        return []"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"def check_version(root_helper):"},{"line_number":313,"context_line":"    args \u003d [\"ovs-vsctl\", \"--version\"]"},{"line_number":314,"context_line":"    try:"},{"line_number":315,"context_line":"        return utils.execute(args, root_helper\u003droot_helper)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2Fq4A%3D","line":312,"in_reply_to":"AAAAPH%2F%2Fq4o%3D","updated":"2013-05-28 03:25:36.000000000","message":"Done","commit_id":"5370576fe0c4845f0595aaba6f66e095342889ef"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c56d172ed94cd8be30a715c013916eace043b419","unresolved":false,"context_lines":[{"line_number":316,"context_line":"    try:"},{"line_number":317,"context_line":"        cmd \u003d utils.execute(args, root_helper\u003droot_helper)"},{"line_number":318,"context_line":"        ver \u003d re.findall(\"\\d+.\\d+\", cmd)[0]"},{"line_number":319,"context_line":"        return ver"},{"line_number":320,"context_line":"    except Exception:"},{"line_number":321,"context_line":"        LOG.exception(_(\"Unable to retrieve version.\"))"},{"line_number":322,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqRQ%3D","line":319,"updated":"2013-05-28 12:46:19.000000000","message":"Should convert to float, so no additional error checking is needed on the value.","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":316,"context_line":"    try:"},{"line_number":317,"context_line":"        cmd \u003d utils.execute(args, root_helper\u003droot_helper)"},{"line_number":318,"context_line":"        ver \u003d re.findall(\"\\d+.\\d+\", cmd)[0]"},{"line_number":319,"context_line":"        return ver"},{"line_number":320,"context_line":"    except Exception:"},{"line_number":321,"context_line":"        LOG.exception(_(\"Unable to retrieve version.\"))"},{"line_number":322,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqFA%3D","line":319,"in_reply_to":"AAAAPH%2F%2FqRQ%3D","updated":"2013-05-28 14:02:36.000000000","message":"Done","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c56d172ed94cd8be30a715c013916eace043b419","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        return ver"},{"line_number":320,"context_line":"    except Exception:"},{"line_number":321,"context_line":"        LOG.exception(_(\"Unable to retrieve version.\"))"},{"line_number":322,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqRU%3D","line":322,"updated":"2013-05-28 12:46:19.000000000","message":"Log line - maybe say unable to retrieve OVS version? Do you want to log here and in the caller, or would one place suffice?\n\nReturning an empty list on failure seems incorrect, when the good case returns a string. Would think you\u0027d want to either raise a ValueError for any failure in trying to get the version and then caller can just check for that exception, or return a known value that will always fail any tests (e.g. 0.0).","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":319,"context_line":"        return ver"},{"line_number":320,"context_line":"    except Exception:"},{"line_number":321,"context_line":"        LOG.exception(_(\"Unable to retrieve version.\"))"},{"line_number":322,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqE8%3D","line":322,"in_reply_to":"AAAAPH%2F%2FqRU%3D","updated":"2013-05-28 14:02:36.000000000","message":"Done","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":328,"context_line":"        ver \u003d re.findall(\"\\d+.\\d+\", cmd)[0]"},{"line_number":329,"context_line":"        return ver"},{"line_number":330,"context_line":"    except Exception:"},{"line_number":331,"context_line":"        return 0.0"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2Fp2E%3D","line":331,"updated":"2013-05-28 14:54:28.000000000","message":"In the good case this function returns a string. In the bad case, a float? Maybe better to return None?","commit_id":"a03c162af42e0d0b471dfb40b6bd52dc078fd244"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":328,"context_line":"        ver \u003d re.findall(\"\\d+.\\d+\", cmd)[0]"},{"line_number":329,"context_line":"        return ver"},{"line_number":330,"context_line":"    except Exception:"},{"line_number":331,"context_line":"        return 0.0"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2FpzU%3D","line":331,"in_reply_to":"AAAAPH%2F%2Fp2E%3D","updated":"2013-05-28 15:01:35.000000000","message":"Good catch, updating.","commit_id":"a03c162af42e0d0b471dfb40b6bd52dc078fd244"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":321,"context_line":"        return []"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"def get_version(root_helper):"},{"line_number":325,"context_line":"    args \u003d [\"ovs-vsctl\", \"--version\"]"},{"line_number":326,"context_line":"    try:"},{"line_number":327,"context_line":"        cmd \u003d utils.execute(args, root_helper\u003droot_helper)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fo1Q%3D","line":324,"updated":"2013-05-28 20:03:49.000000000","message":"get_installed_version?","commit_id":"658a673e5daa2966e3822fb183f2724d0ee76cb2"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":321,"context_line":"        return []"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"def get_version(root_helper):"},{"line_number":325,"context_line":"    args \u003d [\"ovs-vsctl\", \"--version\"]"},{"line_number":326,"context_line":"    try:"},{"line_number":327,"context_line":"        cmd \u003d utils.execute(args, root_helper\u003droot_helper)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fow4%3D","line":324,"in_reply_to":"AAAAPH%2F%2Fo1Q%3D","updated":"2013-05-28 20:42:28.000000000","message":"I agree, I like that better. Will change this.","commit_id":"658a673e5daa2966e3822fb183f2724d0ee76cb2"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":327,"context_line":"        cmd \u003d utils.execute(args, root_helper\u003droot_helper)"},{"line_number":328,"context_line":"        ver \u003d re.findall(\"\\d+.\\d+\", cmd)[0]"},{"line_number":329,"context_line":"        return ver"},{"line_number":330,"context_line":"    except Exception:"},{"line_number":331,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPH%2F%2FiWk%3D","line":330,"updated":"2013-05-31 00:17:20.000000000","message":"nit consider adding LOG.exception()\n\nThen we can drop the return statement.","commit_id":"7849033ece987febca188f7198b6accb9d18bfde"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":327,"context_line":"        cmd \u003d utils.execute(args, root_helper\u003droot_helper)"},{"line_number":328,"context_line":"        ver \u003d re.findall(\"\\d+.\\d+\", cmd)[0]"},{"line_number":329,"context_line":"        return ver"},{"line_number":330,"context_line":"    except Exception:"},{"line_number":331,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPH%2F%2FiSw%3D","line":330,"in_reply_to":"AAAAPH%2F%2FiWk%3D","updated":"2013-05-31 01:22:13.000000000","message":"I can do this, and in fact I had this in a prior version of the patch, though someone suggested removing it. I now see that the above function also uses it. however, so will add it back in. But don\u0027t I still need the return statement here so this function returns None?","commit_id":"7849033ece987febca188f7198b6accb9d18bfde"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":329,"context_line":"        return ver"},{"line_number":330,"context_line":"    except Exception as e:"},{"line_number":331,"context_line":"        LOG.exception(_(\"Unable to retrieve OVS version. Exception: %s\"), e)"},{"line_number":332,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPH%2F%2FiQg%3D","line":332,"updated":"2013-05-31 01:50:51.000000000","message":"Line 332 not needed now that you have another statement under the except. (That\u0027s what Aaron meant).","commit_id":"1e9ae41e3ad8072662c674ff0732f92af2968057"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":329,"context_line":"        return ver"},{"line_number":330,"context_line":"    except Exception as e:"},{"line_number":331,"context_line":"        LOG.exception(_(\"Unable to retrieve OVS version. Exception: %s\"), e)"},{"line_number":332,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPH%2F%2FhK8%3D","line":332,"in_reply_to":"AAAAPH%2F%2FiQg%3D","updated":"2013-05-31 12:47:05.000000000","message":"Got it, thanks!","commit_id":"1e9ae41e3ad8072662c674ff0732f92af2968057"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":325,"context_line":"    args \u003d [\"ovs-vsctl\", \"--version\"]"},{"line_number":326,"context_line":"    try:"},{"line_number":327,"context_line":"        cmd \u003d utils.execute(args, root_helper\u003droot_helper)"},{"line_number":328,"context_line":"        ver \u003d re.findall(\"\\d+.\\d+\", cmd)[0]"},{"line_number":329,"context_line":"        return ver"},{"line_number":330,"context_line":"    except Exception as e:"},{"line_number":331,"context_line":"        LOG.exception(_(\"Unable to retrieve OVS version. Exception: %s\"), e)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAPH%2F%2FdM4%3D","line":328,"updated":"2013-06-03 15:40:24.000000000","message":"A period should be escaped with a backslash.","commit_id":"4fa369c6b39d5e2faf6e78a1e7bf99321d807937"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":325,"context_line":"    args \u003d [\"ovs-vsctl\", \"--version\"]"},{"line_number":326,"context_line":"    try:"},{"line_number":327,"context_line":"        cmd \u003d utils.execute(args, root_helper\u003droot_helper)"},{"line_number":328,"context_line":"        ver \u003d re.findall(\"\\d+.\\d+\", cmd)[0]"},{"line_number":329,"context_line":"        return ver"},{"line_number":330,"context_line":"    except Exception as e:"},{"line_number":331,"context_line":"        LOG.exception(_(\"Unable to retrieve OVS version. Exception: %s\"), e)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAPH%2F%2FdJY%3D","line":328,"in_reply_to":"AAAAPH%2F%2FdM4%3D","updated":"2013-06-03 16:02:19.000000000","message":"Done","commit_id":"4fa369c6b39d5e2faf6e78a1e7bf99321d807937"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":328,"context_line":"        ver \u003d re.findall(\"\\d+.\\d+\", cmd)[0]"},{"line_number":329,"context_line":"        return ver"},{"line_number":330,"context_line":"    except Exception as e:"},{"line_number":331,"context_line":"        LOG.exception(_(\"Unable to retrieve OVS version. Exception: %s\"), e)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAPH%2F%2FdNQ%3D","line":331,"updated":"2013-06-03 15:40:24.000000000","message":"LOG.exception automatically outputs the exception info, so \"Exception: %s\" is not needed.","commit_id":"4fa369c6b39d5e2faf6e78a1e7bf99321d807937"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":328,"context_line":"        ver \u003d re.findall(\"\\d+.\\d+\", cmd)[0]"},{"line_number":329,"context_line":"        return ver"},{"line_number":330,"context_line":"    except Exception as e:"},{"line_number":331,"context_line":"        LOG.exception(_(\"Unable to retrieve OVS version. Exception: %s\"), e)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAPH%2F%2FdJc%3D","line":331,"in_reply_to":"AAAAPH%2F%2FdNQ%3D","updated":"2013-06-03 16:02:19.000000000","message":"Will fix this. Please note the function right above this uses the same format, which is also incorrect.","commit_id":"4fa369c6b39d5e2faf6e78a1e7bf99321d807937"},{"author":{"_account_id":6820,"name":"Francois Eleouet","email":"f.eleouet@gmail.com","username":"fanchon"},"change_message_id":"b0c4543ab414badb83920652d669aacc37feda94","unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"def get_installed_version(root_helper):"},{"line_number":325,"context_line":"    args \u003d [\"ovs-vsctl\", \"--version\"]"},{"line_number":326,"context_line":"    try:"},{"line_number":327,"context_line":"        cmd \u003d utils.execute(args, root_helper\u003droot_helper)"},{"line_number":328,"context_line":"        ver \u003d re.findall(\"\\d+\\.\\d+\", cmd)[0]"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAPX%2F%2F%2B%2Fc%3D","line":325,"updated":"2013-06-04 17:08:04.000000000","message":"Shouldn\u0027t \"modinfo openvswitch\" also be checked to make sure it actually supports VXLAN?","commit_id":"4d38cbf1ea681c9c7d2684bef8d8cfbacc419d6e"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"def get_installed_version(root_helper):"},{"line_number":325,"context_line":"    args \u003d [\"ovs-vsctl\", \"--version\"]"},{"line_number":326,"context_line":"    try:"},{"line_number":327,"context_line":"        cmd \u003d utils.execute(args, root_helper\u003droot_helper)"},{"line_number":328,"context_line":"        ver \u003d re.findall(\"\\d+\\.\\d+\", cmd)[0]"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAPX%2F%2F5kQ%3D","line":325,"in_reply_to":"AAAAPX%2F%2F%2B%2Fc%3D","updated":"2013-06-06 19:21:08.000000000","message":"Yes, this is good feedback, incorporating this into the next version of the patch.","commit_id":"4d38cbf1ea681c9c7d2684bef8d8cfbacc419d6e"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":321,"context_line":"        return []"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"def get_installed_ovs_klm_version(root_helper):"},{"line_number":325,"context_line":"    args \u003d [\"modinfo\", \"openvswitch\"]"},{"line_number":326,"context_line":"    try:"},{"line_number":327,"context_line":"        cmd \u003d utils.execute(args, root_helper\u003droot_helper)"}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAAPX%2F%2Fzrc%3D","line":324,"updated":"2013-06-10 06:20:16.000000000","message":"Can you please add tests for this. It looks like it could be problematic:\n\nThis is the output from the command on RHEL:\nfilename:       /lib/modules/2.6.32-358.6.2.openstack.el6.x86_64/kernel/net/openvswitch/openvswitch.ko\nlicense:        GPL\ndescription:    Open vSwitch switching datapath\nsrcversion:     3E0B650FFD789D6A7AED38A\ndepends:        \nvermagic:       2.6.32-358.6.2.openstack.el6.x86_64 SMP mod_unload modversions \n\nThis is the output of the command from Ubuntu:\nfilename:       /lib/modules/3.5.0-17-generic/updates/dkms/openvswitch.ko\nlicense:        GPL\ndescription:    Open vSwitch switching datapath\nsrcversion:     16924D94DBE047F919E6384\ndepends:        \nvermagic:       3.5.0-17-generic SMP mod_unload modversions \n\nWhen I ran the code on the above it returned None and not the version. Can you please add a test case for this.","commit_id":"7958042d06d4b532b5e5f64b0b6cda6a73342d84"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":321,"context_line":"        return []"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"def get_installed_ovs_klm_version(root_helper):"},{"line_number":325,"context_line":"    args \u003d [\"modinfo\", \"openvswitch\"]"},{"line_number":326,"context_line":"    try:"},{"line_number":327,"context_line":"        cmd \u003d utils.execute(args, root_helper\u003droot_helper)"}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAAPX%2F%2FzGE%3D","line":324,"in_reply_to":"AAAAPX%2F%2FzrQ%3D","updated":"2013-06-10 13:38:17.000000000","message":"Yes, that\u0027s the \"userspace\" OVS versions. In the cases above, the kernel version for the RHEL case is the upstream OVS kernel module, and in the Ubuntu case is the dkms version, which is I believe a compilation of the upstream OVS kernel module. The reformatted routine will take into account the Ubuntu dkms case by throwing a warning if I detect OVS \u003e\u003d1.10 and the DKMS kernel module, since I have no way to tell what version of the upstream OVS kernel is running in that case using modinfo.","commit_id":"7958042d06d4b532b5e5f64b0b6cda6a73342d84"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":321,"context_line":"        return []"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"def get_installed_ovs_klm_version(root_helper):"},{"line_number":325,"context_line":"    args \u003d [\"modinfo\", \"openvswitch\"]"},{"line_number":326,"context_line":"    try:"},{"line_number":327,"context_line":"        cmd \u003d utils.execute(args, root_helper\u003droot_helper)"}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAAPX%2F%2FzrQ%3D","line":324,"in_reply_to":"AAAAPX%2F%2Fzrc%3D","updated":"2013-06-10 06:26:38.000000000","message":"Please note that in the above cases the OVS version is ovs_version: \"1.9.0\" and ovs_version: \"1.4.3\" respectively.","commit_id":"7958042d06d4b532b5e5f64b0b6cda6a73342d84"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":324,"context_line":"def get_installed_ovs_klm_version(root_helper):"},{"line_number":325,"context_line":"    args \u003d [\"modinfo\", \"openvswitch\"]"},{"line_number":326,"context_line":"    try:"},{"line_number":327,"context_line":"        cmd \u003d utils.execute(args, root_helper\u003droot_helper)"},{"line_number":328,"context_line":"        for line in cmd.split(\u0027\\n\u0027):"},{"line_number":329,"context_line":"            if \u0027version: \u0027 in line and not \u0027srcversion\u0027 in line:"},{"line_number":330,"context_line":"                ver \u003d re.findall(\"\\d+\\.\\d+\", line)"}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAAPX%2F%2Fzr8%3D","line":327,"updated":"2013-06-10 06:20:16.000000000","message":"i do not think that you need the root_helper here","commit_id":"7958042d06d4b532b5e5f64b0b6cda6a73342d84"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":324,"context_line":"def get_installed_ovs_klm_version(root_helper):"},{"line_number":325,"context_line":"    args \u003d [\"modinfo\", \"openvswitch\"]"},{"line_number":326,"context_line":"    try:"},{"line_number":327,"context_line":"        cmd \u003d utils.execute(args, root_helper\u003droot_helper)"},{"line_number":328,"context_line":"        for line in cmd.split(\u0027\\n\u0027):"},{"line_number":329,"context_line":"            if \u0027version: \u0027 in line and not \u0027srcversion\u0027 in line:"},{"line_number":330,"context_line":"                ver \u003d re.findall(\"\\d+\\.\\d+\", line)"}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAAPX%2F%2FzHg%3D","line":327,"in_reply_to":"AAAAPX%2F%2Fzr8%3D","updated":"2013-06-10 13:38:17.000000000","message":"Done","commit_id":"7958042d06d4b532b5e5f64b0b6cda6a73342d84"}],"quantum/plugins/openvswitch/agent/ovs_quantum_agent.py":[{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"7f812102ad18772a5b210e4537690d9138258829","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        :param root_helper: utility to use when running shell cmds."},{"line_number":161,"context_line":"        :param polling_interval: interval (secs) to poll DB."},{"line_number":162,"context_line":"        :param enable_tunneling: if True enable GRE or VXLAN networks."},{"line_number":163,"context_line":"        \u0027\u0027\u0027"},{"line_number":164,"context_line":"        self.root_helper \u003d root_helper"},{"line_number":165,"context_line":"        self.available_local_vlans \u003d set(xrange(q_const.MIN_VLAN_TAG,"},{"line_number":166,"context_line":"                                                q_const.MAX_VLAN_TAG))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fvdg%3D","line":163,"updated":"2013-05-24 00:32:06.000000000","message":"please, add the description for tunnel_type  :-)","commit_id":"3a98a96a67d94488cc4d40b9fa91925e8105eacd"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":160,"context_line":"        :param root_helper: utility to use when running shell cmds."},{"line_number":161,"context_line":"        :param polling_interval: interval (secs) to poll DB."},{"line_number":162,"context_line":"        :param enable_tunneling: if True enable GRE or VXLAN networks."},{"line_number":163,"context_line":"        \u0027\u0027\u0027"},{"line_number":164,"context_line":"        self.root_helper \u003d root_helper"},{"line_number":165,"context_line":"        self.available_local_vlans \u003d set(xrange(q_const.MIN_VLAN_TAG,"},{"line_number":166,"context_line":"                                                q_const.MAX_VLAN_TAG))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FvU4%3D","line":163,"in_reply_to":"AAAAPH%2F%2Fvdg%3D","updated":"2013-05-24 01:55:19.000000000","message":"Done","commit_id":"3a98a96a67d94488cc4d40b9fa91925e8105eacd"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"7f812102ad18772a5b210e4537690d9138258829","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        self.tunnel_count \u003d 0"},{"line_number":176,"context_line":"        self.tunnel_type \u003d tunnel_type"},{"line_number":177,"context_line":"        if self.tunnel_type \u003d\u003d constants.TYPE_VXLAN:"},{"line_number":178,"context_line":"            LOG.error(_(\"CHECKING VXLAN VERSION\"))"},{"line_number":179,"context_line":"            self.check_version()"},{"line_number":180,"context_line":"        if self.enable_tunneling:"},{"line_number":181,"context_line":"            self.setup_tunnel_br(tun_br)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FvdE%3D","line":178,"updated":"2013-05-24 00:32:06.000000000","message":"ERROR?\nIt should be DEBUG, isn\u0027t it?","commit_id":"3a98a96a67d94488cc4d40b9fa91925e8105eacd"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":175,"context_line":"        self.tunnel_count \u003d 0"},{"line_number":176,"context_line":"        self.tunnel_type \u003d tunnel_type"},{"line_number":177,"context_line":"        if self.tunnel_type \u003d\u003d constants.TYPE_VXLAN:"},{"line_number":178,"context_line":"            LOG.error(_(\"CHECKING VXLAN VERSION\"))"},{"line_number":179,"context_line":"            self.check_version()"},{"line_number":180,"context_line":"        if self.enable_tunneling:"},{"line_number":181,"context_line":"            self.setup_tunnel_br(tun_br)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FvQE%3D","line":178,"in_reply_to":"AAAAPH%2F%2FvSU%3D","updated":"2013-05-24 02:43:05.000000000","message":"Done","commit_id":"3a98a96a67d94488cc4d40b9fa91925e8105eacd"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"b9555fbaab9eda7d24c17c9de9900ec91d43f4e9","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        self.tunnel_count \u003d 0"},{"line_number":176,"context_line":"        self.tunnel_type \u003d tunnel_type"},{"line_number":177,"context_line":"        if self.tunnel_type \u003d\u003d constants.TYPE_VXLAN:"},{"line_number":178,"context_line":"            LOG.error(_(\"CHECKING VXLAN VERSION\"))"},{"line_number":179,"context_line":"            self.check_version()"},{"line_number":180,"context_line":"        if self.enable_tunneling:"},{"line_number":181,"context_line":"            self.setup_tunnel_br(tun_br)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FvSU%3D","line":178,"in_reply_to":"AAAAPH%2F%2FvUw%3D","updated":"2013-05-24 02:36:57.000000000","message":"\"Checking OVS version for VXLAN support\" might be clearer?","commit_id":"3a98a96a67d94488cc4d40b9fa91925e8105eacd"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":175,"context_line":"        self.tunnel_count \u003d 0"},{"line_number":176,"context_line":"        self.tunnel_type \u003d tunnel_type"},{"line_number":177,"context_line":"        if self.tunnel_type \u003d\u003d constants.TYPE_VXLAN:"},{"line_number":178,"context_line":"            LOG.error(_(\"CHECKING VXLAN VERSION\"))"},{"line_number":179,"context_line":"            self.check_version()"},{"line_number":180,"context_line":"        if self.enable_tunneling:"},{"line_number":181,"context_line":"            self.setup_tunnel_br(tun_br)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FvUw%3D","line":178,"in_reply_to":"AAAAPH%2F%2FvdE%3D","updated":"2013-05-24 01:55:19.000000000","message":"Done","commit_id":"3a98a96a67d94488cc4d40b9fa91925e8105eacd"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"7f812102ad18772a5b210e4537690d9138258829","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                                              root_helper)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    MINIMUM_VXLAN_VERSION \u003d 1.10"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def check_version(self):"},{"line_number":199,"context_line":"        ver \u003d 0"},{"line_number":200,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fvc8%3D","line":197,"updated":"2013-05-24 00:32:06.000000000","message":"can we move this to the constants section?","commit_id":"3a98a96a67d94488cc4d40b9fa91925e8105eacd"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":194,"context_line":"                                              root_helper)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    MINIMUM_VXLAN_VERSION \u003d 1.10"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def check_version(self):"},{"line_number":199,"context_line":"        ver \u003d 0"},{"line_number":200,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FvUU%3D","line":197,"in_reply_to":"AAAAPH%2F%2Fvc8%3D","updated":"2013-05-24 01:55:19.000000000","message":"Done","commit_id":"3a98a96a67d94488cc4d40b9fa91925e8105eacd"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"7f812102ad18772a5b210e4537690d9138258829","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    MINIMUM_VXLAN_VERSION \u003d 1.10"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def check_version(self):"},{"line_number":199,"context_line":"        ver \u003d 0"},{"line_number":200,"context_line":"        try:"},{"line_number":201,"context_line":"            cmd \u003d [\u0027ovs-vsctl\u0027, \u0027--version\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fvco%3D","line":198,"updated":"2013-05-24 00:32:06.000000000","message":"change this to: _check_ovs_version","commit_id":"3a98a96a67d94488cc4d40b9fa91925e8105eacd"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    MINIMUM_VXLAN_VERSION \u003d 1.10"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def check_version(self):"},{"line_number":199,"context_line":"        ver \u003d 0"},{"line_number":200,"context_line":"        try:"},{"line_number":201,"context_line":"            cmd \u003d [\u0027ovs-vsctl\u0027, \u0027--version\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FvUo%3D","line":198,"in_reply_to":"AAAAPH%2F%2Fvco%3D","updated":"2013-05-24 01:55:19.000000000","message":"Done","commit_id":"3a98a96a67d94488cc4d40b9fa91925e8105eacd"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":160,"context_line":"        :param root_helper: utility to use when running shell cmds."},{"line_number":161,"context_line":"        :param polling_interval: interval (secs) to poll DB."},{"line_number":162,"context_line":"        :param enable_tunneling: if True enable GRE or VXLAN networks."},{"line_number":163,"context_line":"        :param tunnel_type: Either GRE or VXLAN."},{"line_number":164,"context_line":"        \u0027\u0027\u0027"},{"line_number":165,"context_line":"        self.root_helper \u003d root_helper"},{"line_number":166,"context_line":"        self.available_local_vlans \u003d set(xrange(q_const.MIN_VLAN_TAG,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FvKg%3D","line":163,"updated":"2013-05-24 04:05:18.000000000","message":"It is better to make GRE and VXLAN lower. These constants are defined as lower case.\n\nIf enable_tunneling is False, can we pass a value other than \u0027gre\u0027 or \u0027vxlan\u0027 (such as None)? If so it is good to add some comment like \"(required if enable_tunneling is True)\".","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":160,"context_line":"        :param root_helper: utility to use when running shell cmds."},{"line_number":161,"context_line":"        :param polling_interval: interval (secs) to poll DB."},{"line_number":162,"context_line":"        :param enable_tunneling: if True enable GRE or VXLAN networks."},{"line_number":163,"context_line":"        :param tunnel_type: Either GRE or VXLAN."},{"line_number":164,"context_line":"        \u0027\u0027\u0027"},{"line_number":165,"context_line":"        self.root_helper \u003d root_helper"},{"line_number":166,"context_line":"        self.available_local_vlans \u003d set(xrange(q_const.MIN_VLAN_TAG,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FuM0%3D","line":163,"in_reply_to":"AAAAPH%2F%2FvKg%3D","updated":"2013-05-24 15:09:38.000000000","message":"Done. You can only pass \u0027gre\u0027 or \u0027vxlan\u0027, and it\u0027s only applicable if \u0027enable_tunneling\u0027 is True. Added that comment here.","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":177,"context_line":"        self.tunnel_type \u003d tunnel_type"},{"line_number":178,"context_line":"        if self.tunnel_type \u003d\u003d constants.TYPE_VXLAN:"},{"line_number":179,"context_line":"            LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":180,"context_line":"            self._check_ovs_version()"},{"line_number":181,"context_line":"        if self.enable_tunneling:"},{"line_number":182,"context_line":"            self.setup_tunnel_br(tun_br)"},{"line_number":183,"context_line":"        self.agent_state \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FvKs%3D","line":180,"updated":"2013-05-24 04:05:18.000000000","message":"_check_ovs_version is a little generic since this method just checks OVS version for vxlan support. One idea is to keep the name unchanged and move \"if tunne_type \u003d\u003d TYPE_VXLAN\" inside the method. It is in __init__(), so we don\u0027t need to consider overhead of method call so much.","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":177,"context_line":"        self.tunnel_type \u003d tunnel_type"},{"line_number":178,"context_line":"        if self.tunnel_type \u003d\u003d constants.TYPE_VXLAN:"},{"line_number":179,"context_line":"            LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":180,"context_line":"            self._check_ovs_version()"},{"line_number":181,"context_line":"        if self.enable_tunneling:"},{"line_number":182,"context_line":"            self.setup_tunnel_br(tun_br)"},{"line_number":183,"context_line":"        self.agent_state \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FuMc%3D","line":180,"in_reply_to":"AAAAPH%2F%2FvKs%3D","updated":"2013-05-24 15:09:38.000000000","message":"Done","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c56d172ed94cd8be30a715c013916eace043b419","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                                              self.plugin_rpc,"},{"line_number":195,"context_line":"                                              root_helper)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def _check_ovs_version(self):"},{"line_number":198,"context_line":"        ver \u003d 0"},{"line_number":199,"context_line":"        try:"},{"line_number":200,"context_line":"            cmd \u003d [\u0027ovs-vsctl\u0027, \u0027--version\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FulQ%3D","line":197,"updated":"2013-05-24 11:07:40.000000000","message":"_check_ovs_supports_vxlan?","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":194,"context_line":"                                              self.plugin_rpc,"},{"line_number":195,"context_line":"                                              root_helper)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def _check_ovs_version(self):"},{"line_number":198,"context_line":"        ver \u003d 0"},{"line_number":199,"context_line":"        try:"},{"line_number":200,"context_line":"            cmd \u003d [\u0027ovs-vsctl\u0027, \u0027--version\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FuMY%3D","line":197,"in_reply_to":"AAAAPH%2F%2FulQ%3D","updated":"2013-05-24 15:09:38.000000000","message":"Doing as Akihiro suggested instead.","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":199,"context_line":"        try:"},{"line_number":200,"context_line":"            cmd \u003d [\u0027ovs-vsctl\u0027, \u0027--version\u0027]"},{"line_number":201,"context_line":"            out \u003d utils.execute(cmd)"},{"line_number":202,"context_line":"            ver \u003d re.findall(\"\\d+.\\d+\", out)[0]"},{"line_number":203,"context_line":"            is_valid_vers \u003d float(ver) \u003e\u003d constants.MINIMUM_OVS_VXLAN_VERSION"},{"line_number":204,"context_line":"            if not is_valid_vers:"},{"line_number":205,"context_line":"                LOG.warning(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FvKc%3D","line":202,"updated":"2013-05-24 04:05:18.000000000","message":"Calling a cli command (L.200-202 or 203) is better to be moved to ovs_lib.","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":199,"context_line":"        try:"},{"line_number":200,"context_line":"            cmd \u003d [\u0027ovs-vsctl\u0027, \u0027--version\u0027]"},{"line_number":201,"context_line":"            out \u003d utils.execute(cmd)"},{"line_number":202,"context_line":"            ver \u003d re.findall(\"\\d+.\\d+\", out)[0]"},{"line_number":203,"context_line":"            is_valid_vers \u003d float(ver) \u003e\u003d constants.MINIMUM_OVS_VXLAN_VERSION"},{"line_number":204,"context_line":"            if not is_valid_vers:"},{"line_number":205,"context_line":"                LOG.warning(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FuMI%3D","line":202,"in_reply_to":"AAAAPH%2F%2FvKc%3D","updated":"2013-05-24 15:09:38.000000000","message":"Done","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":201,"context_line":"            out \u003d utils.execute(cmd)"},{"line_number":202,"context_line":"            ver \u003d re.findall(\"\\d+.\\d+\", out)[0]"},{"line_number":203,"context_line":"            is_valid_vers \u003d float(ver) \u003e\u003d constants.MINIMUM_OVS_VXLAN_VERSION"},{"line_number":204,"context_line":"            if not is_valid_vers:"},{"line_number":205,"context_line":"                LOG.warning(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"},{"line_number":206,"context_line":"                              \u0027vSwitch with VXLAN support. To use \u0027"},{"line_number":207,"context_line":"                              \u0027VXLAN tunnels with OVS, please ensure \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FvKU%3D","line":204,"updated":"2013-05-24 04:05:18.000000000","message":"We can write in one line:\n\nif float(ver) \u003c constants.MINIMUM_OVS_VXLAN_VERSION:","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":201,"context_line":"            out \u003d utils.execute(cmd)"},{"line_number":202,"context_line":"            ver \u003d re.findall(\"\\d+.\\d+\", out)[0]"},{"line_number":203,"context_line":"            is_valid_vers \u003d float(ver) \u003e\u003d constants.MINIMUM_OVS_VXLAN_VERSION"},{"line_number":204,"context_line":"            if not is_valid_vers:"},{"line_number":205,"context_line":"                LOG.warning(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"},{"line_number":206,"context_line":"                              \u0027vSwitch with VXLAN support. To use \u0027"},{"line_number":207,"context_line":"                              \u0027VXLAN tunnels with OVS, please ensure \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FuL8%3D","line":204,"in_reply_to":"AAAAPH%2F%2FvKU%3D","updated":"2013-05-24 15:09:38.000000000","message":"Done","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":212,"context_line":"        except (OSError, RuntimeError, IndexError, ValueError):"},{"line_number":213,"context_line":"            LOG.warning(_(\u0027Unable to determine Open vSwitch version. \u0027"},{"line_number":214,"context_line":"                          \u0027Please ensure that its version is %1.2f \u0027"},{"line_number":215,"context_line":"                          \u0027or above!\u0027), constants.MINIMUM_OVS_VXLAN_VERSION)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def _report_state(self):"},{"line_number":218,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FvKo%3D","line":215,"updated":"2013-05-24 04:05:18.000000000","message":"It is better to add \"to use VXLAN\" at the end of message.","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":212,"context_line":"        except (OSError, RuntimeError, IndexError, ValueError):"},{"line_number":213,"context_line":"            LOG.warning(_(\u0027Unable to determine Open vSwitch version. \u0027"},{"line_number":214,"context_line":"                          \u0027Please ensure that its version is %1.2f \u0027"},{"line_number":215,"context_line":"                          \u0027or above!\u0027), constants.MINIMUM_OVS_VXLAN_VERSION)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def _report_state(self):"},{"line_number":218,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FuL0%3D","line":215,"in_reply_to":"AAAAPH%2F%2FvKo%3D","updated":"2013-05-24 15:09:38.000000000","message":"Done","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c56d172ed94cd8be30a715c013916eace043b419","unresolved":false,"context_lines":[{"line_number":335,"context_line":"                                                         physical_network,"},{"line_number":336,"context_line":"                                                         segmentation_id)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        if network_type in [constants.TYPE_GRE, constants.TYPE_VXLAN]:"},{"line_number":339,"context_line":"            if self.enable_tunneling:"},{"line_number":340,"context_line":"                # outbound"},{"line_number":341,"context_line":"                self.tun_br.add_flow(priority\u003d4, in_port\u003dself.patch_int_ofport,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Fuks%3D","line":338,"updated":"2013-05-24 11:07:40.000000000","message":"These constants are used numerous times. Maybe create a constant list of tunnel types?","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":335,"context_line":"                                                         physical_network,"},{"line_number":336,"context_line":"                                                         segmentation_id)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        if network_type in [constants.TYPE_GRE, constants.TYPE_VXLAN]:"},{"line_number":339,"context_line":"            if self.enable_tunneling:"},{"line_number":340,"context_line":"                # outbound"},{"line_number":341,"context_line":"                self.tun_br.add_flow(priority\u003d4, in_port\u003dself.patch_int_ofport,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FuLw%3D","line":338,"in_reply_to":"AAAAPH%2F%2Fuks%3D","updated":"2013-05-24 15:09:38.000000000","message":"Done","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":790,"context_line":"                                              constants.TYPE_VXLAN]:"},{"line_number":791,"context_line":"            kwargs[\u0027tunnel_type\u0027] \u003d config.ovs.tenant_network_type"},{"line_number":792,"context_line":"        else:"},{"line_number":793,"context_line":"            msg \u003d (_(\u0027When Tunneling is enabled tenant_network_type \u0027"},{"line_number":794,"context_line":"                   \u0027should be %(gre)s or %(vxlan)s\u0027) %"},{"line_number":795,"context_line":"                   {\u0027gre\u0027: constants.TYPE_GRE,"},{"line_number":796,"context_line":"                   \u0027vxlan\u0027: constants.TYPE_VXLAN})"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FvK8%3D","line":793,"updated":"2013-05-24 04:05:18.000000000","message":"Tunneling -\u003e tunneling","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":790,"context_line":"                                              constants.TYPE_VXLAN]:"},{"line_number":791,"context_line":"            kwargs[\u0027tunnel_type\u0027] \u003d config.ovs.tenant_network_type"},{"line_number":792,"context_line":"        else:"},{"line_number":793,"context_line":"            msg \u003d (_(\u0027When Tunneling is enabled tenant_network_type \u0027"},{"line_number":794,"context_line":"                   \u0027should be %(gre)s or %(vxlan)s\u0027) %"},{"line_number":795,"context_line":"                   {\u0027gre\u0027: constants.TYPE_GRE,"},{"line_number":796,"context_line":"                   \u0027vxlan\u0027: constants.TYPE_VXLAN})"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FuLs%3D","line":793,"in_reply_to":"AAAAPH%2F%2FvK8%3D","updated":"2013-05-24 15:09:38.000000000","message":"Done","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":176,"context_line":"        self.local_ip \u003d local_ip"},{"line_number":177,"context_line":"        self.tunnel_count \u003d 0"},{"line_number":178,"context_line":"        self.tunnel_type \u003d tunnel_type"},{"line_number":179,"context_line":"        if self.enable_tunneling:"},{"line_number":180,"context_line":"            self._check_ovs_version(self, constants.MINIMUM_OVS_VXLAN_VERSION)"},{"line_number":181,"context_line":"            self.setup_tunnel_br(tun_br)"},{"line_number":182,"context_line":"        self.agent_state \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fsm0%3D","line":179,"updated":"2013-05-25 22:44:12.000000000","message":"the check should actually be on tunnel_type not enable_tunneling (or enable_tunnelling and tunnel_type \u003d\u003d VXLAN)\n\nBut I\u0027ve seen previous patchsets... so ignore this!\n(not worth raising a discussion on these small bits)","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":176,"context_line":"        self.local_ip \u003d local_ip"},{"line_number":177,"context_line":"        self.tunnel_count \u003d 0"},{"line_number":178,"context_line":"        self.tunnel_type \u003d tunnel_type"},{"line_number":179,"context_line":"        if self.enable_tunneling:"},{"line_number":180,"context_line":"            self._check_ovs_version(self, constants.MINIMUM_OVS_VXLAN_VERSION)"},{"line_number":181,"context_line":"            self.setup_tunnel_br(tun_br)"},{"line_number":182,"context_line":"        self.agent_state \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fq80%3D","line":179,"in_reply_to":"AAAAPH%2F%2Fsm0%3D","updated":"2013-05-28 02:15:42.000000000","message":"I tend to agree, actually, but as you said, will leave it as is for now.","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":203,"context_line":"            out \u003d ovs_lib.check_version(cls.root_helper)"},{"line_number":204,"context_line":"            ver \u003d re.findall(\"\\d+.\\d+\", out)[0]"},{"line_number":205,"context_line":"            if float(ver) \u003c ovs_version:"},{"line_number":206,"context_line":"                LOG.warning(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"},{"line_number":207,"context_line":"                              \u0027vSwitch with VXLAN support. To use \u0027"},{"line_number":208,"context_line":"                              \u0027VXLAN tunnels with OVS, please ensure \u0027"},{"line_number":209,"context_line":"                              \u0027the OVS version version is %1.2f \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fsmw%3D","line":206,"updated":"2013-05-25 22:44:12.000000000","message":"If that is fatal perhaps is a LOG.error at least","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":203,"context_line":"            out \u003d ovs_lib.check_version(cls.root_helper)"},{"line_number":204,"context_line":"            ver \u003d re.findall(\"\\d+.\\d+\", out)[0]"},{"line_number":205,"context_line":"            if float(ver) \u003c ovs_version:"},{"line_number":206,"context_line":"                LOG.warning(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"},{"line_number":207,"context_line":"                              \u0027vSwitch with VXLAN support. To use \u0027"},{"line_number":208,"context_line":"                              \u0027VXLAN tunnels with OVS, please ensure \u0027"},{"line_number":209,"context_line":"                              \u0027the OVS version version is %1.2f \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fq84%3D","line":206,"in_reply_to":"AAAAPH%2F%2Fsmw%3D","updated":"2013-05-28 02:15:42.000000000","message":"Done","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":783,"context_line":"        tunnel_type\u003dNone,"},{"line_number":784,"context_line":"    )"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    if kwargs[\u0027enable_tunneling\u0027]:"},{"line_number":787,"context_line":"        if not kwargs[\u0027local_ip\u0027]:"},{"line_number":788,"context_line":"            msg \u003d _(\u0027Tunneling cannot be enabled without a valid local_ip.\u0027)"},{"line_number":789,"context_line":"            raise ValueError(msg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fsf0%3D","line":786,"updated":"2013-05-26 06:47:46.000000000","message":"Do we still need the tunneling enables - the type can be used to indicate that the tunneling is enabled.","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":783,"context_line":"        tunnel_type\u003dNone,"},{"line_number":784,"context_line":"    )"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    if kwargs[\u0027enable_tunneling\u0027]:"},{"line_number":787,"context_line":"        if not kwargs[\u0027local_ip\u0027]:"},{"line_number":788,"context_line":"            msg \u003d _(\u0027Tunneling cannot be enabled without a valid local_ip.\u0027)"},{"line_number":789,"context_line":"            raise ValueError(msg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fq8o%3D","line":786,"in_reply_to":"AAAAPH%2F%2Fsf0%3D","updated":"2013-05-28 02:15:42.000000000","message":"I am inclined to leave this for now so the user will have to explicitly enable tunneling, but I could be swayed the other way. Either way, I think that could be a separate patch from this one, and I can open a bug to track it if you\u0027d like.","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    if kwargs[\u0027enable_tunneling\u0027]:"},{"line_number":787,"context_line":"        if not kwargs[\u0027local_ip\u0027]:"},{"line_number":788,"context_line":"            msg \u003d _(\u0027Tunneling cannot be enabled without a valid local_ip.\u0027)"},{"line_number":789,"context_line":"            raise ValueError(msg)"},{"line_number":790,"context_line":"        if config.ovs.tenant_network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":791,"context_line":"            kwargs[\u0027tunnel_type\u0027] \u003d config.ovs.tenant_network_type"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fsmk%3D","line":788,"updated":"2013-05-25 22:44:12.000000000","message":"Thanks for fixing the typo!","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    if kwargs[\u0027enable_tunneling\u0027]:"},{"line_number":787,"context_line":"        if not kwargs[\u0027local_ip\u0027]:"},{"line_number":788,"context_line":"            msg \u003d _(\u0027Tunneling cannot be enabled without a valid local_ip.\u0027)"},{"line_number":789,"context_line":"            raise ValueError(msg)"},{"line_number":790,"context_line":"        if config.ovs.tenant_network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":791,"context_line":"            kwargs[\u0027tunnel_type\u0027] \u003d config.ovs.tenant_network_type"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fq8w%3D","line":788,"in_reply_to":"AAAAPH%2F%2Fsmk%3D","updated":"2013-05-28 02:15:42.000000000","message":"Yes, saw it and it bothered me so figured I could clean it up with this patch.","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":201,"context_line":"        LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":202,"context_line":"        try:"},{"line_number":203,"context_line":"            out \u003d ovs_lib.check_version(cls.root_helper)"},{"line_number":204,"context_line":"            ver \u003d re.findall(\"\\d+.\\d+\", out)[0]"},{"line_number":205,"context_line":"            if float(ver) \u003c ovs_version:"},{"line_number":206,"context_line":"                LOG.error(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"},{"line_number":207,"context_line":"                            \u0027vSwitch with VXLAN support. To use \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2Fq4w%3D","line":204,"updated":"2013-05-28 03:08:07.000000000","message":"How about moving the logic extracting the version number (L.204 and float() in L.205) to ovs_lib? I think extracting the version number is a part of ovs_lib. It would be better if this method returns a version number like 1.10 or None (when failed to retrieve a version).\n\nI have no strong opinion check_version returns float or string of the version number.","commit_id":"5370576fe0c4845f0595aaba6f66e095342889ef"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":201,"context_line":"        LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":202,"context_line":"        try:"},{"line_number":203,"context_line":"            out \u003d ovs_lib.check_version(cls.root_helper)"},{"line_number":204,"context_line":"            ver \u003d re.findall(\"\\d+.\\d+\", out)[0]"},{"line_number":205,"context_line":"            if float(ver) \u003c ovs_version:"},{"line_number":206,"context_line":"                LOG.error(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"},{"line_number":207,"context_line":"                            \u0027vSwitch with VXLAN support. To use \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2Fq3w%3D","line":204,"in_reply_to":"AAAAPH%2F%2Fq4w%3D","updated":"2013-05-28 03:25:36.000000000","message":"Done, will make \"check_ver\" return string for now.","commit_id":"5370576fe0c4845f0595aaba6f66e095342889ef"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c56d172ed94cd8be30a715c013916eace043b419","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def __init__(self, integ_br, tun_br, local_ip,"},{"line_number":151,"context_line":"                 bridge_mappings, root_helper,"},{"line_number":152,"context_line":"                 polling_interval, enable_tunneling, tunnel_type):"},{"line_number":153,"context_line":"        \u0027\u0027\u0027Constructor."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :param integ_br: name of the integration bridge."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqN0%3D","line":152,"updated":"2013-05-28 12:46:19.000000000","message":"Should this have a default of \"gre\" to prevent changes to existing code?","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def __init__(self, integ_br, tun_br, local_ip,"},{"line_number":151,"context_line":"                 bridge_mappings, root_helper,"},{"line_number":152,"context_line":"                 polling_interval, enable_tunneling, tunnel_type):"},{"line_number":153,"context_line":"        \u0027\u0027\u0027Constructor."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :param integ_br: name of the integration bridge."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqE4%3D","line":152,"in_reply_to":"AAAAPH%2F%2FqN0%3D","updated":"2013-05-28 14:02:36.000000000","message":"Done","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":193,"context_line":"                                              self.plugin_rpc,"},{"line_number":194,"context_line":"                                              root_helper)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @staticmethod"},{"line_number":197,"context_line":"    def _check_ovs_version(cls, ovs_version):"},{"line_number":198,"context_line":"        ver \u003d 0"},{"line_number":199,"context_line":"        if cls.tunnel_type !\u003d constants.TYPE_VXLAN:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqFY%3D","line":196,"updated":"2013-05-28 13:23:30.000000000","message":"I am trying to figure out why you have made this a static method. Can you explain?","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":193,"context_line":"                                              self.plugin_rpc,"},{"line_number":194,"context_line":"                                              root_helper)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @staticmethod"},{"line_number":197,"context_line":"    def _check_ovs_version(cls, ovs_version):"},{"line_number":198,"context_line":"        ver \u003d 0"},{"line_number":199,"context_line":"        if cls.tunnel_type !\u003d constants.TYPE_VXLAN:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2Fpyg%3D","line":196,"in_reply_to":"AAAAPH%2F%2FqEA%3D","updated":"2013-05-28 14:58:47.000000000","message":"I am not convinced that this is a good enough reason. A \"static private\" method just seems weird to me.","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":193,"context_line":"                                              self.plugin_rpc,"},{"line_number":194,"context_line":"                                              root_helper)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @staticmethod"},{"line_number":197,"context_line":"    def _check_ovs_version(cls, ovs_version):"},{"line_number":198,"context_line":"        ver \u003d 0"},{"line_number":199,"context_line":"        if cls.tunnel_type !\u003d constants.TYPE_VXLAN:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqEA%3D","line":196,"in_reply_to":"AAAAPH%2F%2FqFY%3D","updated":"2013-05-28 14:02:36.000000000","message":"I think the intention was so I can call it from the unit test framework without having to instantiate an object of this type.","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":201,"context_line":"        LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":202,"context_line":"        try:"},{"line_number":203,"context_line":"            ver \u003d ovs_lib.get_version(cls.root_helper)"},{"line_number":204,"context_line":"            if float(ver) \u003c ovs_version:"},{"line_number":205,"context_line":"                LOG.error(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"},{"line_number":206,"context_line":"                            \u0027vSwitch with VXLAN support. To use \u0027"},{"line_number":207,"context_line":"                            \u0027VXLAN tunnels with OVS, please ensure \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqPc%3D","line":204,"updated":"2013-05-28 12:54:53.000000000","message":"I don\u0027t think this works. float(\u00271.10\u0027) is 1.1","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":201,"context_line":"        LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":202,"context_line":"        try:"},{"line_number":203,"context_line":"            ver \u003d ovs_lib.get_version(cls.root_helper)"},{"line_number":204,"context_line":"            if float(ver) \u003c ovs_version:"},{"line_number":205,"context_line":"                LOG.error(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"},{"line_number":206,"context_line":"                            \u0027vSwitch with VXLAN support. To use \u0027"},{"line_number":207,"context_line":"                            \u0027VXLAN tunnels with OVS, please ensure \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqEU%3D","line":204,"in_reply_to":"AAAAPH%2F%2FqI8%3D","updated":"2013-05-28 14:02:36.000000000","message":"Thanks for the catch, updating to utilize StrictVersion now.","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":201,"context_line":"        LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":202,"context_line":"        try:"},{"line_number":203,"context_line":"            ver \u003d ovs_lib.get_version(cls.root_helper)"},{"line_number":204,"context_line":"            if float(ver) \u003c ovs_version:"},{"line_number":205,"context_line":"                LOG.error(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"},{"line_number":206,"context_line":"                            \u0027vSwitch with VXLAN support. To use \u0027"},{"line_number":207,"context_line":"                            \u0027VXLAN tunnels with OVS, please ensure \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqEo%3D","line":204,"in_reply_to":"AAAAPH%2F%2FqPc%3D","updated":"2013-05-28 14:02:36.000000000","message":"Done","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":201,"context_line":"        LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":202,"context_line":"        try:"},{"line_number":203,"context_line":"            ver \u003d ovs_lib.get_version(cls.root_helper)"},{"line_number":204,"context_line":"            if float(ver) \u003c ovs_version:"},{"line_number":205,"context_line":"                LOG.error(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"},{"line_number":206,"context_line":"                            \u0027vSwitch with VXLAN support. To use \u0027"},{"line_number":207,"context_line":"                            \u0027VXLAN tunnels with OVS, please ensure \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqI8%3D","line":204,"in_reply_to":"AAAAPH%2F%2FqPc%3D","updated":"2013-05-28 13:04:29.000000000","message":"Good catch! distutils.version.StrictVersion or LooseVersion is a candidate for version comparator.\n\nStrictVersion(\u00271.10\u0027) \u003e StrictVersion(\u00271.8\u0027) \u003d\u003e True\n\nLooseVersion accepts an non-number version.","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c56d172ed94cd8be30a715c013916eace043b419","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                            \u0027the OVS version version is %1.2f \u0027"},{"line_number":209,"context_line":"                            \u0027or above!\u0027), ovs_version)"},{"line_number":210,"context_line":"                sys.exit(1)"},{"line_number":211,"context_line":"        except (OSError, RuntimeError, IndexError, ValueError):"},{"line_number":212,"context_line":"            LOG.warning(_(\u0027Unable to determine Open vSwitch version. \u0027"},{"line_number":213,"context_line":"                          \u0027Please ensure that its version is %1.2f \u0027"},{"line_number":214,"context_line":"                          \u0027or above to use VXLAN tunnels with OVS.\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqQY%3D","line":211,"updated":"2013-05-28 12:46:19.000000000","message":"You could have get_version() throw a ValueError, for any problem getting the version and then only check that exception.","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":208,"context_line":"                            \u0027the OVS version version is %1.2f \u0027"},{"line_number":209,"context_line":"                            \u0027or above!\u0027), ovs_version)"},{"line_number":210,"context_line":"                sys.exit(1)"},{"line_number":211,"context_line":"        except (OSError, RuntimeError, IndexError, ValueError):"},{"line_number":212,"context_line":"            LOG.warning(_(\u0027Unable to determine Open vSwitch version. \u0027"},{"line_number":213,"context_line":"                          \u0027Please ensure that its version is %1.2f \u0027"},{"line_number":214,"context_line":"                          \u0027or above to use VXLAN tunnels with OVS.\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqEI%3D","line":211,"in_reply_to":"AAAAPH%2F%2FqQY%3D","updated":"2013-05-28 14:02:36.000000000","message":"Will go the route of returning a known value.","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c56d172ed94cd8be30a715c013916eace043b419","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            LOG.warning(_(\u0027Unable to determine Open vSwitch version. \u0027"},{"line_number":213,"context_line":"                          \u0027Please ensure that its version is %1.2f \u0027"},{"line_number":214,"context_line":"                          \u0027or above to use VXLAN tunnels with OVS.\u0027),"},{"line_number":215,"context_line":"                        ovs_version)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def _report_state(self):"},{"line_number":218,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqOA%3D","line":215,"updated":"2013-05-28 12:46:19.000000000","message":"Should we be exiting, if we cannot determine the OVS version?  If it is handled the same as a version that is too low, and ovs_lib.check_version() returns 0.0 for any failures, you could use the if condition above for the test and pull the try block (maybe log an error in check_version() when unable to get the version).","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":212,"context_line":"            LOG.warning(_(\u0027Unable to determine Open vSwitch version. \u0027"},{"line_number":213,"context_line":"                          \u0027Please ensure that its version is %1.2f \u0027"},{"line_number":214,"context_line":"                          \u0027or above to use VXLAN tunnels with OVS.\u0027),"},{"line_number":215,"context_line":"                        ovs_version)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def _report_state(self):"},{"line_number":218,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqEM%3D","line":215,"in_reply_to":"AAAAPH%2F%2FqOA%3D","updated":"2013-05-28 14:02:36.000000000","message":"Yes, we have to exit if you are trying to use VXLAN with a version of OVS which does not support it.","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":200,"context_line":"        if cls.tunnel_type !\u003d constants.TYPE_VXLAN:"},{"line_number":201,"context_line":"            return"},{"line_number":202,"context_line":"        LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":203,"context_line":"        try:"},{"line_number":204,"context_line":"            ver \u003d ovs_lib.get_version(cls.root_helper)"},{"line_number":205,"context_line":"            if dist_version.StrictVersion(ver) \u003c dist_version.StrictVersion("},{"line_number":206,"context_line":"                    str(ovs_version)):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2Fp1A%3D","line":203,"updated":"2013-05-28 14:54:28.000000000","message":"ovs_lib.get_version() does not raise an exception, so remove the try and instead check with:\n\n    ver \u003d ovs_lib.get_version(...)\n    if ver:","commit_id":"a03c162af42e0d0b471dfb40b6bd52dc078fd244"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":200,"context_line":"        if cls.tunnel_type !\u003d constants.TYPE_VXLAN:"},{"line_number":201,"context_line":"            return"},{"line_number":202,"context_line":"        LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":203,"context_line":"        try:"},{"line_number":204,"context_line":"            ver \u003d ovs_lib.get_version(cls.root_helper)"},{"line_number":205,"context_line":"            if dist_version.StrictVersion(ver) \u003c dist_version.StrictVersion("},{"line_number":206,"context_line":"                    str(ovs_version)):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2FpyE%3D","line":203,"in_reply_to":"AAAAPH%2F%2Fp1A%3D","updated":"2013-05-28 15:01:35.000000000","message":"Done","commit_id":"a03c162af42e0d0b471dfb40b6bd52dc078fd244"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":203,"context_line":"        try:"},{"line_number":204,"context_line":"            ver \u003d ovs_lib.get_version(cls.root_helper)"},{"line_number":205,"context_line":"            if dist_version.StrictVersion(ver) \u003c dist_version.StrictVersion("},{"line_number":206,"context_line":"                    str(ovs_version)):"},{"line_number":207,"context_line":"                LOG.error(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"},{"line_number":208,"context_line":"                            \u0027vSwitch with VXLAN support. To use \u0027"},{"line_number":209,"context_line":"                            \u0027VXLAN tunnels with OVS, please ensure \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2Fp28%3D","line":206,"updated":"2013-05-28 14:54:28.000000000","message":"This doesn\u0027t work either because str(1.10) \u003d\u003d \u00271.1\u0027","commit_id":"a03c162af42e0d0b471dfb40b6bd52dc078fd244"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":203,"context_line":"        try:"},{"line_number":204,"context_line":"            ver \u003d ovs_lib.get_version(cls.root_helper)"},{"line_number":205,"context_line":"            if dist_version.StrictVersion(ver) \u003c dist_version.StrictVersion("},{"line_number":206,"context_line":"                    str(ovs_version)):"},{"line_number":207,"context_line":"                LOG.error(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"},{"line_number":208,"context_line":"                            \u0027vSwitch with VXLAN support. To use \u0027"},{"line_number":209,"context_line":"                            \u0027VXLAN tunnels with OVS, please ensure \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2Fpx4%3D","line":206,"in_reply_to":"AAAAPH%2F%2Fp28%3D","updated":"2013-05-28 15:01:35.000000000","message":"Done","commit_id":"a03c162af42e0d0b471dfb40b6bd52dc078fd244"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c56d172ed94cd8be30a715c013916eace043b419","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                            \u0027or above!\u0027), ovs_version)"},{"line_number":212,"context_line":"                sys.exit(1)"},{"line_number":213,"context_line":"        except (OSError, RuntimeError, IndexError, ValueError):"},{"line_number":214,"context_line":"            LOG.warning(_(\u0027Unable to determine Open vSwitch version. \u0027"},{"line_number":215,"context_line":"                          \u0027Please ensure that its version is %1.2f \u0027"},{"line_number":216,"context_line":"                          \u0027or above to use VXLAN tunnels with OVS.\u0027),"},{"line_number":217,"context_line":"                        ovs_version)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2Fp1w%3D","line":214,"updated":"2013-05-28 14:46:08.000000000","message":"Should we be exiting, if we cannot determine the version?\n\nSince ovs_lib.get_version() will not return an exception, can we remove the try block, or will there be a possible exception from StrictVersion()?","commit_id":"a03c162af42e0d0b471dfb40b6bd52dc078fd244"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":211,"context_line":"                            \u0027or above!\u0027), ovs_version)"},{"line_number":212,"context_line":"                sys.exit(1)"},{"line_number":213,"context_line":"        except (OSError, RuntimeError, IndexError, ValueError):"},{"line_number":214,"context_line":"            LOG.warning(_(\u0027Unable to determine Open vSwitch version. \u0027"},{"line_number":215,"context_line":"                          \u0027Please ensure that its version is %1.2f \u0027"},{"line_number":216,"context_line":"                          \u0027or above to use VXLAN tunnels with OVS.\u0027),"},{"line_number":217,"context_line":"                        ovs_version)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2Fo%2BQ%3D","line":214,"in_reply_to":"AAAAPH%2F%2Fp1w%3D","updated":"2013-05-28 19:10:44.000000000","message":"Paul, I changed my mind, you\u0027re right, if we can\u0027t get the version, we should be exiting. I\u0027ve updated the patch I\u0027m uploading now with this new logic.","commit_id":"a03c162af42e0d0b471dfb40b6bd52dc078fd244"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":211,"context_line":"                            \u0027or above!\u0027), ovs_version)"},{"line_number":212,"context_line":"                sys.exit(1)"},{"line_number":213,"context_line":"        except (OSError, RuntimeError, IndexError, ValueError):"},{"line_number":214,"context_line":"            LOG.warning(_(\u0027Unable to determine Open vSwitch version. \u0027"},{"line_number":215,"context_line":"                          \u0027Please ensure that its version is %1.2f \u0027"},{"line_number":216,"context_line":"                          \u0027or above to use VXLAN tunnels with OVS.\u0027),"},{"line_number":217,"context_line":"                        ovs_version)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2Fp08%3D","line":214,"in_reply_to":"AAAAPH%2F%2Fp1w%3D","updated":"2013-05-28 14:48:08.000000000","message":"Yes, we need to exit if the user configures VXLAN with a version of OVS which does not support it.\n\nWith regards to the exception, I think catching those here should be ok, but am open to a firm opinion either way.","commit_id":"a03c162af42e0d0b471dfb40b6bd52dc078fd244"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":194,"context_line":"                                              self.plugin_rpc,"},{"line_number":195,"context_line":"                                              root_helper)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    @staticmethod"},{"line_number":198,"context_line":"    def _check_ovs_version(cls, ovs_version):"},{"line_number":199,"context_line":"        ver \u003d 0"},{"line_number":200,"context_line":"        if cls.tunnel_type !\u003d constants.TYPE_VXLAN:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2FppI%3D","line":197,"updated":"2013-05-28 15:50:03.000000000","message":"I think Henry had a reasonable comment on why this is static and private.\n\nMy gut feeling is that this method probably does not belong to this class, and it should be separate.\n\nThe instance of the class passed to it is used only for checking the type of tunnel. I think with a bit of refactoring you can have a private helper method that calls a module level function which does the actual checking.\n\nthis way, unit tests could just call the function, and you\u0027d be able to preserve the check on tunnel_type","commit_id":"a95eaa29c65756c41d8a2b3d9f0ab770486cecd7"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":194,"context_line":"                                              self.plugin_rpc,"},{"line_number":195,"context_line":"                                              root_helper)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    @staticmethod"},{"line_number":198,"context_line":"    def _check_ovs_version(cls, ovs_version):"},{"line_number":199,"context_line":"        ver \u003d 0"},{"line_number":200,"context_line":"        if cls.tunnel_type !\u003d constants.TYPE_VXLAN:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2FpNg%3D","line":197,"in_reply_to":"AAAAPH%2F%2FppI%3D","updated":"2013-05-28 18:12:17.000000000","message":"Sounds good, refactoring based on your and Henry\u0027s input.","commit_id":"a95eaa29c65756c41d8a2b3d9f0ab770486cecd7"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c56d172ed94cd8be30a715c013916eace043b419","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    @staticmethod"},{"line_number":198,"context_line":"    def _check_ovs_version(cls, ovs_version):"},{"line_number":199,"context_line":"        ver \u003d 0"},{"line_number":200,"context_line":"        if cls.tunnel_type !\u003d constants.TYPE_VXLAN:"},{"line_number":201,"context_line":"            return"},{"line_number":202,"context_line":"        LOG.debug(_(\"Checking OVS version for VXLAN support\"))"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2FpmU%3D","line":199,"updated":"2013-05-28 16:03:32.000000000","message":"This doesn\u0027t make sense any more, if using version as a string.","commit_id":"a95eaa29c65756c41d8a2b3d9f0ab770486cecd7"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    @staticmethod"},{"line_number":198,"context_line":"    def _check_ovs_version(cls, ovs_version):"},{"line_number":199,"context_line":"        ver \u003d 0"},{"line_number":200,"context_line":"        if cls.tunnel_type !\u003d constants.TYPE_VXLAN:"},{"line_number":201,"context_line":"            return"},{"line_number":202,"context_line":"        LOG.debug(_(\"Checking OVS version for VXLAN support\"))"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2FpSk%3D","line":199,"in_reply_to":"AAAAPH%2F%2FpmU%3D","updated":"2013-05-28 18:12:17.000000000","message":"Done","commit_id":"a95eaa29c65756c41d8a2b3d9f0ab770486cecd7"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":202,"context_line":"        LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":203,"context_line":"        ver \u003d ovs_lib.get_version(cls.root_helper)"},{"line_number":204,"context_line":"        if ver:"},{"line_number":205,"context_line":"            if dist_version.StrictVersion(ver) \u003c dist_version.StrictVersion("},{"line_number":206,"context_line":"                    ovs_version):"},{"line_number":207,"context_line":"                LOG.error(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"},{"line_number":208,"context_line":"                            \u0027vSwitch with VXLAN support. To use \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2Fpn4%3D","line":205,"updated":"2013-05-28 15:50:03.000000000","message":"It\u0027s been a good idea introducing distutils.\nJust as a note, you could use also LooseVersion (seem to work fine for me, and I prefer to be an anarchist rather than an \u0027anal retentive\u0027 - quoting distutils documentation)","commit_id":"a95eaa29c65756c41d8a2b3d9f0ab770486cecd7"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":202,"context_line":"        LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":203,"context_line":"        ver \u003d ovs_lib.get_version(cls.root_helper)"},{"line_number":204,"context_line":"        if ver:"},{"line_number":205,"context_line":"            if dist_version.StrictVersion(ver) \u003c dist_version.StrictVersion("},{"line_number":206,"context_line":"                    ovs_version):"},{"line_number":207,"context_line":"                LOG.error(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"},{"line_number":208,"context_line":"                            \u0027vSwitch with VXLAN support. To use \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2FpSs%3D","line":205,"in_reply_to":"AAAAPH%2F%2Fpn4%3D","updated":"2013-05-28 18:12:17.000000000","message":"Heh.","commit_id":"a95eaa29c65756c41d8a2b3d9f0ab770486cecd7"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":207,"context_line":"                LOG.error(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"},{"line_number":208,"context_line":"                            \u0027vSwitch with VXLAN support. To use \u0027"},{"line_number":209,"context_line":"                            \u0027VXLAN tunnels with OVS, please ensure \u0027"},{"line_number":210,"context_line":"                            \u0027the OVS version version is %1.2f \u0027"},{"line_number":211,"context_line":"                            \u0027or above!\u0027), ovs_version)"},{"line_number":212,"context_line":"                sys.exit(1)"},{"line_number":213,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2Fpic%3D","line":210,"updated":"2013-05-28 16:12:37.000000000","message":"%s since ovs_version is now a string.","commit_id":"a95eaa29c65756c41d8a2b3d9f0ab770486cecd7"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":207,"context_line":"                LOG.error(_(\u0027FAILED VERSION REQUIREMENT FOR Open \u0027"},{"line_number":208,"context_line":"                            \u0027vSwitch with VXLAN support. To use \u0027"},{"line_number":209,"context_line":"                            \u0027VXLAN tunnels with OVS, please ensure \u0027"},{"line_number":210,"context_line":"                            \u0027the OVS version version is %1.2f \u0027"},{"line_number":211,"context_line":"                            \u0027or above!\u0027), ovs_version)"},{"line_number":212,"context_line":"                sys.exit(1)"},{"line_number":213,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2FpTI%3D","line":210,"in_reply_to":"AAAAPH%2F%2Fpic%3D","updated":"2013-05-28 18:12:17.000000000","message":"Done","commit_id":"a95eaa29c65756c41d8a2b3d9f0ab770486cecd7"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":208,"context_line":"                            \u0027vSwitch with VXLAN support. To use \u0027"},{"line_number":209,"context_line":"                            \u0027VXLAN tunnels with OVS, please ensure \u0027"},{"line_number":210,"context_line":"                            \u0027the OVS version version is %1.2f \u0027"},{"line_number":211,"context_line":"                            \u0027or above!\u0027), ovs_version)"},{"line_number":212,"context_line":"                sys.exit(1)"},{"line_number":213,"context_line":"        else:"},{"line_number":214,"context_line":"            LOG.warning(_(\u0027Unable to determine Open vSwitch version. \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2FpiQ%3D","line":211,"updated":"2013-05-28 16:12:37.000000000","message":"Nit: I think \u0027or newer\u0027 sounds better.","commit_id":"a95eaa29c65756c41d8a2b3d9f0ab770486cecd7"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":208,"context_line":"                            \u0027vSwitch with VXLAN support. To use \u0027"},{"line_number":209,"context_line":"                            \u0027VXLAN tunnels with OVS, please ensure \u0027"},{"line_number":210,"context_line":"                            \u0027the OVS version version is %1.2f \u0027"},{"line_number":211,"context_line":"                            \u0027or above!\u0027), ovs_version)"},{"line_number":212,"context_line":"                sys.exit(1)"},{"line_number":213,"context_line":"        else:"},{"line_number":214,"context_line":"            LOG.warning(_(\u0027Unable to determine Open vSwitch version. \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2FpTQ%3D","line":211,"in_reply_to":"AAAAPH%2F%2FpiQ%3D","updated":"2013-05-28 18:12:17.000000000","message":"Done","commit_id":"a95eaa29c65756c41d8a2b3d9f0ab770486cecd7"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c56d172ed94cd8be30a715c013916eace043b419","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                            \u0027or above!\u0027), ovs_version)"},{"line_number":212,"context_line":"                sys.exit(1)"},{"line_number":213,"context_line":"        else:"},{"line_number":214,"context_line":"            LOG.warning(_(\u0027Unable to determine Open vSwitch version. \u0027"},{"line_number":215,"context_line":"                          \u0027Please ensure that its version is %1.2f \u0027"},{"line_number":216,"context_line":"                          \u0027or above to use VXLAN tunnels with OVS.\u0027),"},{"line_number":217,"context_line":"                        ovs_version)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2FpkM%3D","line":214,"updated":"2013-05-28 16:03:32.000000000","message":"Sorry to be anal here, but without an exception handler, this will warn, but continue. Didn\u0027t we want to exit, if we cannot determine the version?\n\nIdea...\nA) If unable to get version in get_version() display a log message saying \"Unable to determine OVS version\", and return \u00270\u0027.\nB) remove this else clause and let the comparison check?","commit_id":"a95eaa29c65756c41d8a2b3d9f0ab770486cecd7"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":211,"context_line":"                            \u0027or above!\u0027), ovs_version)"},{"line_number":212,"context_line":"                sys.exit(1)"},{"line_number":213,"context_line":"        else:"},{"line_number":214,"context_line":"            LOG.warning(_(\u0027Unable to determine Open vSwitch version. \u0027"},{"line_number":215,"context_line":"                          \u0027Please ensure that its version is %1.2f \u0027"},{"line_number":216,"context_line":"                          \u0027or above to use VXLAN tunnels with OVS.\u0027),"},{"line_number":217,"context_line":"                        ovs_version)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2FpMs%3D","line":214,"in_reply_to":"AAAAPH%2F%2FpkM%3D","updated":"2013-05-28 18:12:17.000000000","message":"So, ovs_lib.get_version() will return None if it can\u0027t get the version. In that case, running with a warning seems like the right approach to me.","commit_id":"a95eaa29c65756c41d8a2b3d9f0ab770486cecd7"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":212,"context_line":"                sys.exit(1)"},{"line_number":213,"context_line":"        else:"},{"line_number":214,"context_line":"            LOG.warning(_(\u0027Unable to determine Open vSwitch version. \u0027"},{"line_number":215,"context_line":"                          \u0027Please ensure that its version is %1.2f \u0027"},{"line_number":216,"context_line":"                          \u0027or above to use VXLAN tunnels with OVS.\u0027),"},{"line_number":217,"context_line":"                        ovs_version)"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2FpiA%3D","line":215,"updated":"2013-05-28 16:13:46.000000000","message":"This also needs to be %s.","commit_id":"a95eaa29c65756c41d8a2b3d9f0ab770486cecd7"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":212,"context_line":"                sys.exit(1)"},{"line_number":213,"context_line":"        else:"},{"line_number":214,"context_line":"            LOG.warning(_(\u0027Unable to determine Open vSwitch version. \u0027"},{"line_number":215,"context_line":"                          \u0027Please ensure that its version is %1.2f \u0027"},{"line_number":216,"context_line":"                          \u0027or above to use VXLAN tunnels with OVS.\u0027),"},{"line_number":217,"context_line":"                        ovs_version)"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2FpTY%3D","line":215,"in_reply_to":"AAAAPH%2F%2FpiA%3D","updated":"2013-05-28 18:12:17.000000000","message":"Done","commit_id":"a95eaa29c65756c41d8a2b3d9f0ab770486cecd7"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":178,"context_line":"        self.tunnel_type \u003d tunnel_type"},{"line_number":179,"context_line":"        self.vxlan_udp_port \u003d cfg.CONF.ovs.vxlan_udp_port"},{"line_number":180,"context_line":"        if self.enable_tunneling:"},{"line_number":181,"context_line":"            self._check_ovs_version(constants.MINIMUM_OVS_VXLAN_VERSION)"},{"line_number":182,"context_line":"            self.setup_tunnel_br(tun_br)"},{"line_number":183,"context_line":"        self.agent_state \u003d {"},{"line_number":184,"context_line":"            \u0027binary\u0027: \u0027quantum-openvswitch-agent\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fo1E%3D","line":181,"updated":"2013-05-28 20:03:49.000000000","message":"Move this line up outside the if, and remove the version parameter. See my comment on the method below for why.","commit_id":"658a673e5daa2966e3822fb183f2724d0ee76cb2"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":178,"context_line":"        self.tunnel_type \u003d tunnel_type"},{"line_number":179,"context_line":"        self.vxlan_udp_port \u003d cfg.CONF.ovs.vxlan_udp_port"},{"line_number":180,"context_line":"        if self.enable_tunneling:"},{"line_number":181,"context_line":"            self._check_ovs_version(constants.MINIMUM_OVS_VXLAN_VERSION)"},{"line_number":182,"context_line":"            self.setup_tunnel_br(tun_br)"},{"line_number":183,"context_line":"        self.agent_state \u003d {"},{"line_number":184,"context_line":"            \u0027binary\u0027: \u0027quantum-openvswitch-agent\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fovs%3D","line":181,"in_reply_to":"AAAAPH%2F%2Fo1E%3D","updated":"2013-05-28 20:42:28.000000000","message":"Done","commit_id":"658a673e5daa2966e3822fb183f2724d0ee76cb2"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":194,"context_line":"                                              self.plugin_rpc,"},{"line_number":195,"context_line":"                                              root_helper)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def _check_ovs_version(self, ovs_version):"},{"line_number":198,"context_line":"        if self.tunnel_type \u003d\u003d constants.TYPE_VXLAN:"},{"line_number":199,"context_line":"            check_ovs_version(ovs_version, self.root_helper)"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fo04%3D","line":197,"updated":"2013-05-28 20:03:49.000000000","message":"Conceivably, in the future we might want to check the version for other additional reasons. So the version shouldn\u0027t be passed in here.","commit_id":"658a673e5daa2966e3822fb183f2724d0ee76cb2"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":194,"context_line":"                                              self.plugin_rpc,"},{"line_number":195,"context_line":"                                              root_helper)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def _check_ovs_version(self, ovs_version):"},{"line_number":198,"context_line":"        if self.tunnel_type \u003d\u003d constants.TYPE_VXLAN:"},{"line_number":199,"context_line":"            check_ovs_version(ovs_version, self.root_helper)"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fovo%3D","line":197,"in_reply_to":"AAAAPH%2F%2Fo04%3D","updated":"2013-05-28 20:42:28.000000000","message":"Done","commit_id":"658a673e5daa2966e3822fb183f2724d0ee76cb2"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def _check_ovs_version(self, ovs_version):"},{"line_number":198,"context_line":"        if self.tunnel_type \u003d\u003d constants.TYPE_VXLAN:"},{"line_number":199,"context_line":"            check_ovs_version(ovs_version, self.root_helper)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def _report_state(self):"},{"line_number":202,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fo0g%3D","line":199,"updated":"2013-05-28 20:03:49.000000000","message":"Suggestion:\n\n        if self.enable_tunneling and self.tunnel_type \u003d\u003d constants.TYPE_VXLAN:\n\t    check_ovs_version(constants.MINIMUM_OVS_VXLAN_VERSION, self.root_helper)","commit_id":"658a673e5daa2966e3822fb183f2724d0ee76cb2"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def _check_ovs_version(self, ovs_version):"},{"line_number":198,"context_line":"        if self.tunnel_type \u003d\u003d constants.TYPE_VXLAN:"},{"line_number":199,"context_line":"            check_ovs_version(ovs_version, self.root_helper)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def _report_state(self):"},{"line_number":202,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2FovM%3D","line":199,"in_reply_to":"AAAAPH%2F%2Fo0g%3D","updated":"2013-05-28 20:42:28.000000000","message":"Done","commit_id":"658a673e5daa2966e3822fb183f2724d0ee76cb2"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":745,"context_line":"    def daemon_loop(self):"},{"line_number":746,"context_line":"        self.rpc_loop()"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"def check_ovs_version(ovs_version, root_helper):"},{"line_number":750,"context_line":"    LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":751,"context_line":"    ver \u003d ovs_lib.get_version(root_helper)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fo0I%3D","line":748,"updated":"2013-05-28 20:03:49.000000000","message":"Nit: IMO It would make this function a little clearer if you named the version variables as follows ...","commit_id":"658a673e5daa2966e3822fb183f2724d0ee76cb2"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":745,"context_line":"    def daemon_loop(self):"},{"line_number":746,"context_line":"        self.rpc_loop()"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"def check_ovs_version(ovs_version, root_helper):"},{"line_number":750,"context_line":"    LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":751,"context_line":"    ver \u003d ovs_lib.get_version(root_helper)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fov8%3D","line":748,"in_reply_to":"AAAAPH%2F%2Fo0I%3D","updated":"2013-05-28 20:42:28.000000000","message":"Done","commit_id":"658a673e5daa2966e3822fb183f2724d0ee76cb2"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":746,"context_line":"        self.rpc_loop()"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"def check_ovs_version(ovs_version, root_helper):"},{"line_number":750,"context_line":"    LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":751,"context_line":"    ver \u003d ovs_lib.get_version(root_helper)"},{"line_number":752,"context_line":"    if ver:"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fo0M%3D","line":749,"updated":"2013-05-28 20:03:49.000000000","message":"\u0027min_required_version\u0027 here","commit_id":"658a673e5daa2966e3822fb183f2724d0ee76cb2"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":746,"context_line":"        self.rpc_loop()"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"def check_ovs_version(ovs_version, root_helper):"},{"line_number":750,"context_line":"    LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":751,"context_line":"    ver \u003d ovs_lib.get_version(root_helper)"},{"line_number":752,"context_line":"    if ver:"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2FowQ%3D","line":749,"in_reply_to":"AAAAPH%2F%2Fo0M%3D","updated":"2013-05-28 20:42:28.000000000","message":"Done","commit_id":"658a673e5daa2966e3822fb183f2724d0ee76cb2"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":748,"context_line":""},{"line_number":749,"context_line":"def check_ovs_version(ovs_version, root_helper):"},{"line_number":750,"context_line":"    LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":751,"context_line":"    ver \u003d ovs_lib.get_version(root_helper)"},{"line_number":752,"context_line":"    if ver:"},{"line_number":753,"context_line":"        if dist_version.StrictVersion(ver) \u003c dist_version.StrictVersion("},{"line_number":754,"context_line":"                ovs_version):"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fo0A%3D","line":751,"updated":"2013-05-28 20:03:49.000000000","message":"\u0027installed_version\u0027 here","commit_id":"658a673e5daa2966e3822fb183f2724d0ee76cb2"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":748,"context_line":""},{"line_number":749,"context_line":"def check_ovs_version(ovs_version, root_helper):"},{"line_number":750,"context_line":"    LOG.debug(_(\"Checking OVS version for VXLAN support\"))"},{"line_number":751,"context_line":"    ver \u003d ovs_lib.get_version(root_helper)"},{"line_number":752,"context_line":"    if ver:"},{"line_number":753,"context_line":"        if dist_version.StrictVersion(ver) \u003c dist_version.StrictVersion("},{"line_number":754,"context_line":"                ovs_version):"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2FowU%3D","line":751,"in_reply_to":"AAAAPH%2F%2Fo0A%3D","updated":"2013-05-28 20:42:28.000000000","message":"Done","commit_id":"658a673e5daa2966e3822fb183f2724d0ee76cb2"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":760,"context_line":"            sys.exit(1)"},{"line_number":761,"context_line":"    else:"},{"line_number":762,"context_line":"        LOG.warning(_(\u0027Unable to determine Open vSwitch version. Please \u0027"},{"line_number":763,"context_line":"                      \u0027ensure that its version is %s or above to use VXLAN \u0027"},{"line_number":764,"context_line":"                      \u0027tunnels with OVS.\u0027), ovs_version)"},{"line_number":765,"context_line":"        sys.exit(1)"},{"line_number":766,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fozo%3D","line":763,"updated":"2013-05-28 20:03:49.000000000","message":"s/above/newer/g","commit_id":"658a673e5daa2966e3822fb183f2724d0ee76cb2"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":760,"context_line":"            sys.exit(1)"},{"line_number":761,"context_line":"    else:"},{"line_number":762,"context_line":"        LOG.warning(_(\u0027Unable to determine Open vSwitch version. Please \u0027"},{"line_number":763,"context_line":"                      \u0027ensure that its version is %s or above to use VXLAN \u0027"},{"line_number":764,"context_line":"                      \u0027tunnels with OVS.\u0027), ovs_version)"},{"line_number":765,"context_line":"        sys.exit(1)"},{"line_number":766,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Foww%3D","line":763,"in_reply_to":"AAAAPH%2F%2Fozo%3D","updated":"2013-05-28 20:42:28.000000000","message":"Done","commit_id":"658a673e5daa2966e3822fb183f2724d0ee76cb2"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":177,"context_line":"        self.tunnel_count \u003d 0"},{"line_number":178,"context_line":"        self.tunnel_type \u003d tunnel_type"},{"line_number":179,"context_line":"        self.vxlan_udp_port \u003d cfg.CONF.ovs.vxlan_udp_port"},{"line_number":180,"context_line":"        self._check_ovs_version()"},{"line_number":181,"context_line":"        if self.enable_tunneling:"},{"line_number":182,"context_line":"            self.setup_tunnel_br(tun_br)"},{"line_number":183,"context_line":"        self.agent_state \u003d {"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2Fn1w%3D","line":180,"updated":"2013-05-29 03:04:51.000000000","message":"If both GRE and VXLAN networks are supported simultaneously, can this version check be deferred until a VXLAN network is actually encountered?","commit_id":"dedba2630eebc3958029aa0f9716321bb65ed98b"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":177,"context_line":"        self.tunnel_count \u003d 0"},{"line_number":178,"context_line":"        self.tunnel_type \u003d tunnel_type"},{"line_number":179,"context_line":"        self.vxlan_udp_port \u003d cfg.CONF.ovs.vxlan_udp_port"},{"line_number":180,"context_line":"        self._check_ovs_version()"},{"line_number":181,"context_line":"        if self.enable_tunneling:"},{"line_number":182,"context_line":"            self.setup_tunnel_br(tun_br)"},{"line_number":183,"context_line":"        self.agent_state \u003d {"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2Fl9w%3D","line":180,"in_reply_to":"AAAAPH%2F%2Fn1w%3D","updated":"2013-05-29 18:33:03.000000000","message":"That\u0027s an intriguing question. It certainly could, the result would be we would have to fail network creation if you specified a type of VXLAN, because the check would be at network creation time.","commit_id":"dedba2630eebc3958029aa0f9716321bb65ed98b"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":290,"context_line":"            return"},{"line_number":291,"context_line":"        tun_name \u003d \u0027%s-%s\u0027 % (self.tunnel_type, tunnel_id)"},{"line_number":292,"context_line":"        self.tun_br.add_tunnel_port(tun_name, tunnel_ip, self.tunnel_type,"},{"line_number":293,"context_line":"                                    self.vxlan_udp_port)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def create_rpc_dispatcher(self):"},{"line_number":296,"context_line":"        \u0027\u0027\u0027Get the rpc dispatcher for this manager."}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2Fn2g%3D","line":293,"updated":"2013-05-29 03:04:51.000000000","message":"I think tunnel_type should be the specific network\u0027s network_type, not something configured globally for the agent. This might mean adding network_type to the tunnel endpoint RPC messages, and having the server keep track of separate endpoints for VXLAN and GRE tunnels.\n\nAlso, why does VXLAN need the tunnel endpoint management RPCs? I vaguely recall it could use multicast to avoid the need for this sort of thing. I clearly need to read up on this, or maybe I\u0027m just imagining it.","commit_id":"dedba2630eebc3958029aa0f9716321bb65ed98b"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":290,"context_line":"            return"},{"line_number":291,"context_line":"        tun_name \u003d \u0027%s-%s\u0027 % (self.tunnel_type, tunnel_id)"},{"line_number":292,"context_line":"        self.tun_br.add_tunnel_port(tun_name, tunnel_ip, self.tunnel_type,"},{"line_number":293,"context_line":"                                    self.vxlan_udp_port)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def create_rpc_dispatcher(self):"},{"line_number":296,"context_line":"        \u0027\u0027\u0027Get the rpc dispatcher for this manager."}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2Fl9k%3D","line":293,"in_reply_to":"AAAAPH%2F%2Fn2g%3D","updated":"2013-05-29 18:33:03.000000000","message":"We could do this, but this would be exposing tunnel_type into the client for when the tenant is creating networks. That is a bit beyond the scope of this patch I think. I could certainly add that in after the fact.","commit_id":"dedba2630eebc3958029aa0f9716321bb65ed98b"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":799,"context_line":"            msg \u003d (_(\u0027When tunneling is enabled tenant_network_type \u0027"},{"line_number":800,"context_line":"                   \u0027should be %(gre)s or %(vxlan)s\u0027) %"},{"line_number":801,"context_line":"                   {\u0027gre\u0027: constants.TYPE_GRE,"},{"line_number":802,"context_line":"                   \u0027vxlan\u0027: constants.TYPE_VXLAN})"},{"line_number":803,"context_line":"            raise ValueError(msg)"},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"    return kwargs"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2Fn20%3D","line":802,"updated":"2013-05-29 03:04:51.000000000","message":"The agent should not be enforcing anything regarding tenant_network_type. That variable only needs to be configured on the server, and is not necessarily set on each compute or network node. Also, just because tenant_network_type is vxlan does not imply that no gre networks exist. They could be old tenant networks or even provider networks. This check will also break with the ml2 plugin, which uses a different configuration variable that is a list of tenant network types.","commit_id":"dedba2630eebc3958029aa0f9716321bb65ed98b"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":799,"context_line":"            msg \u003d (_(\u0027When tunneling is enabled tenant_network_type \u0027"},{"line_number":800,"context_line":"                   \u0027should be %(gre)s or %(vxlan)s\u0027) %"},{"line_number":801,"context_line":"                   {\u0027gre\u0027: constants.TYPE_GRE,"},{"line_number":802,"context_line":"                   \u0027vxlan\u0027: constants.TYPE_VXLAN})"},{"line_number":803,"context_line":"            raise ValueError(msg)"},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"    return kwargs"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2Fl9Q%3D","line":802,"in_reply_to":"AAAAPH%2F%2Fn20%3D","updated":"2013-05-29 18:33:03.000000000","message":"If the plan is to support both types of networks in the OVS agent, I agree. But if not, then I think this check needs to be here, as the agent can tell when it starts what version of OVS is there and if it supports VXLAN or not.","commit_id":"dedba2630eebc3958029aa0f9716321bb65ed98b"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":288,"context_line":"        tunnel_id \u003d kwargs.get(\u0027tunnel_id\u0027)"},{"line_number":289,"context_line":"        tunnel_type \u003d kwargs.get(\u0027tunnel_type\u0027)"},{"line_number":290,"context_line":"        if tunnel_type \u003d\u003d \u0027None\u0027:"},{"line_number":291,"context_line":"            tunnel_type \u003d \u0027gre\u0027"},{"line_number":292,"context_line":"        if tunnel_ip \u003d\u003d self.local_ip:"},{"line_number":293,"context_line":"            return"},{"line_number":294,"context_line":"        tun_name \u003d \u0027%s-%s\u0027 % (tunnel_type, tunnel_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPH%2F%2FiXQ%3D","line":291,"updated":"2013-05-31 00:17:20.000000000","message":":( one of the reasons i hate kwargs.","commit_id":"7849033ece987febca188f7198b6accb9d18bfde"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":797,"context_line":"        if not kwargs[\u0027local_ip\u0027]:"},{"line_number":798,"context_line":"            msg \u003d _(\u0027Tunneling cannot be enabled without a valid local_ip.\u0027)"},{"line_number":799,"context_line":"            raise ValueError(msg)"},{"line_number":800,"context_line":"        if config.OVS.tenant_network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":801,"context_line":"            kwargs[\u0027tunnel_type\u0027] \u003d config.OVS.tenant_network_type"},{"line_number":802,"context_line":"        else:"},{"line_number":803,"context_line":"            msg \u003d (_(\u0027When tunneling is enabled tenant_network_type \u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAPH%2F%2Fcuo%3D","line":800,"updated":"2013-06-03 18:30:12.000000000","message":"First, the agent should not access the tenant_network_type configuration variable, since this configuration variable is only meaningful on the server (and only with the legacy openswitch plugin). \n\nFurthermore, the agent should not know or care whether a virtual network is a \"tenant network\" or a \"provider network\". The plugin on the server creates the network with a network_type of gre or vxlan if its a tunnel. Whether a given tunnel network is created as a tenant network (segmentation_id allocated from a pool) or a provider network (with an explicitly-set segmentation_id) should not matter to the agent. A vxlan or gre tunnel can exist even if the openvswitch plugin\u0027s tenant_network_type is vlan or none. The agent needs to base everything it does regarding a network on the (network_type, physical_network, segmentation_id) tuple defining the network and on agent-specific configuration.\n\nAs mentioned before, the openvswitch-agent should be designed to simultaneously support gre and vxlan tunnels. Even if the legacy openvswitch plugin will not support this, the ml2 plugin will, and the same agent needs to work with both plugins.","commit_id":"925e1a6a783c5f6d6a7cf5ff89f5fc871bd6a14f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":797,"context_line":"        if not kwargs[\u0027local_ip\u0027]:"},{"line_number":798,"context_line":"            msg \u003d _(\u0027Tunneling cannot be enabled without a valid local_ip.\u0027)"},{"line_number":799,"context_line":"            raise ValueError(msg)"},{"line_number":800,"context_line":"        if config.OVS.tenant_network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":801,"context_line":"            kwargs[\u0027tunnel_type\u0027] \u003d config.OVS.tenant_network_type"},{"line_number":802,"context_line":"        else:"},{"line_number":803,"context_line":"            msg \u003d (_(\u0027When tunneling is enabled tenant_network_type \u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAPH%2F%2FciQ%3D","line":800,"in_reply_to":"AAAAPH%2F%2Fcuo%3D","updated":"2013-06-03 18:55:59.000000000","message":"I think the configuration option \"tenant_network_type\" is misleading here. The existing OVS plugin (which this patch is for) only supports one of VLAN or GRE. This patch simply adds support for VXLAN as a third option. It\u0027s my opinion that adding support for simultaneous GRE and VXLAN is outside the scope of this patch. I\u0027m certainly willing to file a bug and make that happen, but I don\u0027t believe it should be a part of this patch.\n\nI think it\u0027s fair to say that VLAN and tunnel networks can exist at the same time, but I\u0027m not seeing how this patch precludes this anymore than the existing code does.","commit_id":"925e1a6a783c5f6d6a7cf5ff89f5fc871bd6a14f"},{"author":{"_account_id":6820,"name":"Francois Eleouet","email":"f.eleouet@gmail.com","username":"fanchon"},"change_message_id":"b0c4543ab414badb83920652d669aacc37feda94","unresolved":false,"context_lines":[{"line_number":286,"context_line":"            return"},{"line_number":287,"context_line":"        tunnel_ip \u003d kwargs.get(\u0027tunnel_ip\u0027)"},{"line_number":288,"context_line":"        tunnel_id \u003d kwargs.get(\u0027tunnel_id\u0027)"},{"line_number":289,"context_line":"        tunnel_type \u003d kwargs.get(\u0027tunnel_type\u0027)"},{"line_number":290,"context_line":"        if tunnel_type \u003d\u003d \u0027None\u0027:"},{"line_number":291,"context_line":"            tunnel_type \u003d \u0027gre\u0027"},{"line_number":292,"context_line":"        if tunnel_ip \u003d\u003d self.local_ip:"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAPX%2F%2F%2FKo%3D","line":289,"updated":"2013-06-04 17:08:04.000000000","message":"What if plugin returns tenant_network_type\u003dvxlan and tenant_network_type\u003dvxlan has not been set in the agent... OVS version won\u0027t be checked, and agent may not support vxlan.","commit_id":"4d38cbf1ea681c9c7d2684bef8d8cfbacc419d6e"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":286,"context_line":"            return"},{"line_number":287,"context_line":"        tunnel_ip \u003d kwargs.get(\u0027tunnel_ip\u0027)"},{"line_number":288,"context_line":"        tunnel_id \u003d kwargs.get(\u0027tunnel_id\u0027)"},{"line_number":289,"context_line":"        tunnel_type \u003d kwargs.get(\u0027tunnel_type\u0027)"},{"line_number":290,"context_line":"        if tunnel_type \u003d\u003d \u0027None\u0027:"},{"line_number":291,"context_line":"            tunnel_type \u003d \u0027gre\u0027"},{"line_number":292,"context_line":"        if tunnel_ip \u003d\u003d self.local_ip:"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAPX%2F%2F4d8%3D","line":289,"in_reply_to":"AAAAPX%2F%2F%2FKo%3D","updated":"2013-06-06 19:21:08.000000000","message":"I\u0027ve removed tunnel_type from the RPC call with the next version of this patch.","commit_id":"4d38cbf1ea681c9c7d2684bef8d8cfbacc419d6e"},{"author":{"_account_id":6820,"name":"Francois Eleouet","email":"f.eleouet@gmail.com","username":"fanchon"},"change_message_id":"b0c4543ab414badb83920652d669aacc37feda94","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            return"},{"line_number":294,"context_line":"        tun_name \u003d \u0027%s-%s\u0027 % (tunnel_type, tunnel_id)"},{"line_number":295,"context_line":"        self.tun_br.add_tunnel_port(tun_name, tunnel_ip, tunnel_type,"},{"line_number":296,"context_line":"                                    self.vxlan_udp_port)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def create_rpc_dispatcher(self):"},{"line_number":299,"context_line":"        \u0027\u0027\u0027Get the rpc dispatcher for this manager."}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAPX%2F%2F%2BwI%3D","line":296,"updated":"2013-06-04 17:08:04.000000000","message":"You may check if there isn\u0027t already a port for this tunnel id? (suppose default_network_type was changed from gre to vxlan in plugin, and remote agent was rebooted, doesn\u0027t the current agent still have a gre tunnel for this tunnel_id?)","commit_id":"4d38cbf1ea681c9c7d2684bef8d8cfbacc419d6e"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":293,"context_line":"            return"},{"line_number":294,"context_line":"        tun_name \u003d \u0027%s-%s\u0027 % (tunnel_type, tunnel_id)"},{"line_number":295,"context_line":"        self.tun_br.add_tunnel_port(tun_name, tunnel_ip, tunnel_type,"},{"line_number":296,"context_line":"                                    self.vxlan_udp_port)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def create_rpc_dispatcher(self):"},{"line_number":299,"context_line":"        \u0027\u0027\u0027Get the rpc dispatcher for this manager."}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAPX%2F%2F4eA%3D","line":296,"in_reply_to":"AAAAPX%2F%2F%2BwI%3D","updated":"2013-06-06 19:21:08.000000000","message":"I\u0027ve removed tunnel_type from the RPC call with the next version of this patch.","commit_id":"4d38cbf1ea681c9c7d2684bef8d8cfbacc419d6e"},{"author":{"_account_id":6820,"name":"Francois Eleouet","email":"f.eleouet@gmail.com","username":"fanchon"},"change_message_id":"b0c4543ab414badb83920652d669aacc37feda94","unresolved":false,"context_lines":[{"line_number":695,"context_line":"            tunnels \u003d details[\u0027tunnels\u0027]"},{"line_number":696,"context_line":"            for tunnel in tunnels:"},{"line_number":697,"context_line":"                if self.local_ip !\u003d tunnel[\u0027ip_address\u0027]:"},{"line_number":698,"context_line":"                    tun_name \u003d \u0027%s-%s\u0027 % (tunnel[\u0027tunnel_type\u0027], tunnel[\u0027id\u0027])"},{"line_number":699,"context_line":"                    self.tun_br.add_tunnel_port(tun_name, tunnel[\u0027ip_address\u0027],"},{"line_number":700,"context_line":"                                                tunnel[\u0027tunnel_type\u0027],"},{"line_number":701,"context_line":"                                                self.vxlan_udp_port)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAPX%2F%2F%2B8k%3D","line":698,"updated":"2013-06-04 17:08:04.000000000","message":"will tunnel dict have a tunnel_type key? ovs_db_v2.get_tunnel_endpoints() doesn\u0027t seem to return them in plugin with current implementation...","commit_id":"4d38cbf1ea681c9c7d2684bef8d8cfbacc419d6e"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":695,"context_line":"            tunnels \u003d details[\u0027tunnels\u0027]"},{"line_number":696,"context_line":"            for tunnel in tunnels:"},{"line_number":697,"context_line":"                if self.local_ip !\u003d tunnel[\u0027ip_address\u0027]:"},{"line_number":698,"context_line":"                    tun_name \u003d \u0027%s-%s\u0027 % (tunnel[\u0027tunnel_type\u0027], tunnel[\u0027id\u0027])"},{"line_number":699,"context_line":"                    self.tun_br.add_tunnel_port(tun_name, tunnel[\u0027ip_address\u0027],"},{"line_number":700,"context_line":"                                                tunnel[\u0027tunnel_type\u0027],"},{"line_number":701,"context_line":"                                                self.vxlan_udp_port)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAPX%2F%2F4eM%3D","line":698,"in_reply_to":"AAAAPX%2F%2F%2B8k%3D","updated":"2013-06-06 19:21:08.000000000","message":"This is no longer valid, as I\u0027ve removed tunnel_type from the dictionary here.","commit_id":"4d38cbf1ea681c9c7d2684bef8d8cfbacc419d6e"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":797,"context_line":"        if not kwargs[\u0027local_ip\u0027]:"},{"line_number":798,"context_line":"            msg \u003d _(\u0027Tunneling cannot be enabled without a valid local_ip.\u0027)"},{"line_number":799,"context_line":"            raise ValueError(msg)"},{"line_number":800,"context_line":"        if config.OVS.tenant_network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":801,"context_line":"            kwargs[\u0027tunnel_type\u0027] \u003d config.OVS.tenant_network_type"},{"line_number":802,"context_line":"        else:"},{"line_number":803,"context_line":"            msg \u003d (_(\u0027When tunneling is enabled tenant_network_type \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAPX%2F%2F%2Bj4%3D","line":800,"updated":"2013-06-05 03:33:58.000000000","message":"The use of config.OVS.tenant_network_type by the agent is problematic. See the cover message.","commit_id":"4d38cbf1ea681c9c7d2684bef8d8cfbacc419d6e"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":797,"context_line":"        if not kwargs[\u0027local_ip\u0027]:"},{"line_number":798,"context_line":"            msg \u003d _(\u0027Tunneling cannot be enabled without a valid local_ip.\u0027)"},{"line_number":799,"context_line":"            raise ValueError(msg)"},{"line_number":800,"context_line":"        if config.OVS.tenant_network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":801,"context_line":"            kwargs[\u0027tunnel_type\u0027] \u003d config.OVS.tenant_network_type"},{"line_number":802,"context_line":"        else:"},{"line_number":803,"context_line":"            msg \u003d (_(\u0027When tunneling is enabled tenant_network_type \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAPX%2F%2F41Y%3D","line":800,"in_reply_to":"AAAAPX%2F%2F%2Bj4%3D","updated":"2013-06-06 19:21:08.000000000","message":"Done","commit_id":"4d38cbf1ea681c9c7d2684bef8d8cfbacc419d6e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"unresolved":false,"context_lines":[{"line_number":766,"context_line":"            sys.exit(1)"},{"line_number":767,"context_line":"    else:"},{"line_number":768,"context_line":"        LOG.warning(_(\u0027Unable to determine Open vSwitch version. Please \u0027"},{"line_number":769,"context_line":"                      \u0027ensure that its version is %s or newerto use VXLAN \u0027"},{"line_number":770,"context_line":"                      \u0027tunnels with OVS.\u0027), min_required_version)"},{"line_number":771,"context_line":"        sys.exit(1)"},{"line_number":772,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAPX%2F%2F3pI%3D","line":769,"updated":"2013-06-07 02:10:49.000000000","message":"typo \"...or newer, to use...\"","commit_id":"4fe0e78944a7a6cb242ad19e3469393d1ee69740"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":766,"context_line":"            sys.exit(1)"},{"line_number":767,"context_line":"    else:"},{"line_number":768,"context_line":"        LOG.warning(_(\u0027Unable to determine Open vSwitch version. Please \u0027"},{"line_number":769,"context_line":"                      \u0027ensure that its version is %s or newerto use VXLAN \u0027"},{"line_number":770,"context_line":"                      \u0027tunnels with OVS.\u0027), min_required_version)"},{"line_number":771,"context_line":"        sys.exit(1)"},{"line_number":772,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAPX%2F%2F22E%3D","line":769,"in_reply_to":"AAAAPX%2F%2F3pI%3D","updated":"2013-06-07 13:10:48.000000000","message":"Done","commit_id":"4fe0e78944a7a6cb242ad19e3469393d1ee69740"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def __init__(self, integ_br, tun_br, local_ip,"},{"line_number":151,"context_line":"                 bridge_mappings, root_helper,"},{"line_number":152,"context_line":"                 polling_interval, tunnel_type\u003dconstants.TYPE_GRE):"},{"line_number":153,"context_line":"        \u0027\u0027\u0027Constructor."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :param integ_br: name of the integration bridge."}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAAPX%2F%2FzsM%3D","line":152,"updated":"2013-06-10 06:20:16.000000000","message":"Why is this not TYPE_NONE as default?","commit_id":"7958042d06d4b532b5e5f64b0b6cda6a73342d84"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def __init__(self, integ_br, tun_br, local_ip,"},{"line_number":151,"context_line":"                 bridge_mappings, root_helper,"},{"line_number":152,"context_line":"                 polling_interval, tunnel_type\u003dconstants.TYPE_GRE):"},{"line_number":153,"context_line":"        \u0027\u0027\u0027Constructor."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :param integ_br: name of the integration bridge."}],"source_content_type":"text/x-python","patch_set":25,"id":"AAAAPX%2F%2FzIY%3D","line":152,"in_reply_to":"AAAAPX%2F%2FzsM%3D","updated":"2013-06-10 13:38:17.000000000","message":"Good point, changing this to TYPE_NONE.","commit_id":"7958042d06d4b532b5e5f64b0b6cda6a73342d84"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":807,"context_line":"        bridge_mappings\u003dbridge_mappings,"},{"line_number":808,"context_line":"        root_helper\u003dconfig.AGENT.root_helper,"},{"line_number":809,"context_line":"        polling_interval\u003dconfig.AGENT.polling_interval,"},{"line_number":810,"context_line":"        tunnel_type\u003dconfig.AGENT.tunnel_type,"},{"line_number":811,"context_line":"    )"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"    if kwargs[\u0027tunnel_type\u0027] in constants.TUNNEL_NETWORK_TYPES:"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAAPX%2F%2Fua8%3D","line":810,"updated":"2013-06-11 21:09:01.000000000","message":"Thanks for adding this here. Since the openvswitch agent may at some point be enhanced to support multiple tunnel types concurrently, tunnel_type should be tunnel_types, and should be a list of tunnel types the agent supports.\n\nI had also recommended making the config variable a list named tunnel_types, and for now, raising an error if multiple types are configured. That will make it easier to maintain backward compatibility when supporting multiple types.","commit_id":"a98884efd966fdd69ba88585b7a154ba87d1d061"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":807,"context_line":"        bridge_mappings\u003dbridge_mappings,"},{"line_number":808,"context_line":"        root_helper\u003dconfig.AGENT.root_helper,"},{"line_number":809,"context_line":"        polling_interval\u003dconfig.AGENT.polling_interval,"},{"line_number":810,"context_line":"        tunnel_type\u003dconfig.AGENT.tunnel_type,"},{"line_number":811,"context_line":"    )"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"    if kwargs[\u0027tunnel_type\u0027] in constants.TUNNEL_NETWORK_TYPES:"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAAPX%2F%2FtqY%3D","line":810,"in_reply_to":"AAAAPX%2F%2Fua8%3D","updated":"2013-06-12 05:42:14.000000000","message":"in that case why wouldn\u0027t this variable be removed all together?","commit_id":"a98884efd966fdd69ba88585b7a154ba87d1d061"}],"quantum/plugins/openvswitch/common/config.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":45,"context_line":"    cfg.StrOpt(\u0027tenant_network_type\u0027, default\u003d\u0027local\u0027,"},{"line_number":46,"context_line":"               help\u003d_(\"Network type for tenant networks \""},{"line_number":47,"context_line":"                      \"(local, vlan, gre, vxlan, or none)\")),"},{"line_number":48,"context_line":"    cfg.IntOpt(\u0027vxlan_udp_port\u0027, default\u003d\u00274789\u0027,"},{"line_number":49,"context_line":"               help\u003d_(\"The UDP port to use for VXLAN tunnels.\")),"},{"line_number":50,"context_line":"    cfg.ListOpt(\u0027network_vlan_ranges\u0027,"},{"line_number":51,"context_line":"                default\u003dDEFAULT_VLAN_RANGES,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPH%2F%2FiW4%3D","line":48,"updated":"2013-05-31 00:17:20.000000000","message":"nit: we can drop  \u0027 \u0027 around 4789","commit_id":"7849033ece987febca188f7198b6accb9d18bfde"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":45,"context_line":"    cfg.StrOpt(\u0027tenant_network_type\u0027, default\u003d\u0027local\u0027,"},{"line_number":46,"context_line":"               help\u003d_(\"Network type for tenant networks \""},{"line_number":47,"context_line":"                      \"(local, vlan, gre, vxlan, or none)\")),"},{"line_number":48,"context_line":"    cfg.IntOpt(\u0027vxlan_udp_port\u0027, default\u003d\u00274789\u0027,"},{"line_number":49,"context_line":"               help\u003d_(\"The UDP port to use for VXLAN tunnels.\")),"},{"line_number":50,"context_line":"    cfg.ListOpt(\u0027network_vlan_ranges\u0027,"},{"line_number":51,"context_line":"                default\u003dDEFAULT_VLAN_RANGES,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPH%2F%2FiSg%3D","line":48,"in_reply_to":"AAAAPH%2F%2FiW4%3D","updated":"2013-05-31 01:22:13.000000000","message":"Done","commit_id":"7849033ece987febca188f7198b6accb9d18bfde"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":45,"context_line":"    cfg.StrOpt(\u0027tenant_network_type\u0027, default\u003d\u0027local\u0027,"},{"line_number":46,"context_line":"               help\u003d_(\"Network type for tenant networks \""},{"line_number":47,"context_line":"                      \"(local, vlan, gre, vxlan, or none)\")),"},{"line_number":48,"context_line":"    cfg.IntOpt(\u0027vxlan_udp_port\u0027, default\u003d4789,"},{"line_number":49,"context_line":"               help\u003d_(\"The UDP port to use for VXLAN tunnels.\")),"},{"line_number":50,"context_line":"    cfg.ListOpt(\u0027network_vlan_ranges\u0027,"},{"line_number":51,"context_line":"                default\u003dDEFAULT_VLAN_RANGES,"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAPH%2F%2FdLg%3D","line":48,"updated":"2013-06-03 15:40:24.000000000","message":"It is better to use constants.VXLAN_UDP_PORT instead of 4789.","commit_id":"4fa369c6b39d5e2faf6e78a1e7bf99321d807937"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":45,"context_line":"    cfg.StrOpt(\u0027tenant_network_type\u0027, default\u003d\u0027local\u0027,"},{"line_number":46,"context_line":"               help\u003d_(\"Network type for tenant networks \""},{"line_number":47,"context_line":"                      \"(local, vlan, gre, vxlan, or none)\")),"},{"line_number":48,"context_line":"    cfg.IntOpt(\u0027vxlan_udp_port\u0027, default\u003d4789,"},{"line_number":49,"context_line":"               help\u003d_(\"The UDP port to use for VXLAN tunnels.\")),"},{"line_number":50,"context_line":"    cfg.ListOpt(\u0027network_vlan_ranges\u0027,"},{"line_number":51,"context_line":"                default\u003dDEFAULT_VLAN_RANGES,"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAPH%2F%2FdGU%3D","line":48,"in_reply_to":"AAAAPH%2F%2FdLg%3D","updated":"2013-06-03 16:02:19.000000000","message":"Done","commit_id":"4fa369c6b39d5e2faf6e78a1e7bf99321d807937"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":60,"context_line":"               help\u003d_(\"The number of seconds the agent will wait between \""},{"line_number":61,"context_line":"                      \"polling for local device changes.\")),"},{"line_number":62,"context_line":"    cfg.StrOpt(\u0027tunnel_type\u0027, default\u003dNone,"},{"line_number":63,"context_line":"               help\u003d_(\"Network type for agent tunnel networks\""},{"line_number":64,"context_line":"                      \"(gre or vxlan)\")),"},{"line_number":65,"context_line":"    cfg.IntOpt(\u0027vxlan_udp_port\u0027, default\u003dconstants.VXLAN_UDP_PORT,"},{"line_number":66,"context_line":"               help\u003d_(\"The UDP port to use for VXLAN tunnels.\")),"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAPX%2F%2F248%3D","line":63,"updated":"2013-06-07 12:08:18.000000000","message":"Missing space when concatenating strings.","commit_id":"4fe0e78944a7a6cb242ad19e3469393d1ee69740"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":60,"context_line":"               help\u003d_(\"The number of seconds the agent will wait between \""},{"line_number":61,"context_line":"                      \"polling for local device changes.\")),"},{"line_number":62,"context_line":"    cfg.StrOpt(\u0027tunnel_type\u0027, default\u003dNone,"},{"line_number":63,"context_line":"               help\u003d_(\"Network type for agent tunnel networks\""},{"line_number":64,"context_line":"                      \"(gre or vxlan)\")),"},{"line_number":65,"context_line":"    cfg.IntOpt(\u0027vxlan_udp_port\u0027, default\u003dconstants.VXLAN_UDP_PORT,"},{"line_number":66,"context_line":"               help\u003d_(\"The UDP port to use for VXLAN tunnels.\")),"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAPX%2F%2F22A%3D","line":63,"in_reply_to":"AAAAPX%2F%2F248%3D","updated":"2013-06-07 13:10:48.000000000","message":"Done","commit_id":"4fe0e78944a7a6cb242ad19e3469393d1ee69740"}],"quantum/plugins/openvswitch/common/constants.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"VETH_PHYSICAL_PREFIX \u003d \u0027phy-\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# The minimum version of OVS which supports VXLAN tunneling"},{"line_number":37,"context_line":"MINIMUM_OVS_VXLAN_VERSION \u003d 1.10"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# The different types of tunnels"},{"line_number":40,"context_line":"TUNNEL_NETWORK_TYPES \u003d [TYPE_GRE, TYPE_VXLAN]"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2Fp0Y%3D","line":37,"updated":"2013-05-28 14:54:28.000000000","message":"This is the same as\n\n    MINIMUM_OVS_VXLAN_VERSION \u003d 1.1\n\nIt needs to be a string. Avoid float for all uses of versions and version checking.","commit_id":"a03c162af42e0d0b471dfb40b6bd52dc078fd244"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"VETH_PHYSICAL_PREFIX \u003d \u0027phy-\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# The minimum version of OVS which supports VXLAN tunneling"},{"line_number":37,"context_line":"MINIMUM_OVS_VXLAN_VERSION \u003d 1.10"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# The different types of tunnels"},{"line_number":40,"context_line":"TUNNEL_NETWORK_TYPES \u003d [TYPE_GRE, TYPE_VXLAN]"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2Fpyw%3D","line":37,"in_reply_to":"AAAAPH%2F%2Fp0Y%3D","updated":"2013-05-28 15:01:35.000000000","message":"Done","commit_id":"a03c162af42e0d0b471dfb40b6bd52dc078fd244"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":"TYPE_VXLAN \u003d \u0027vxlan\u0027"},{"line_number":28,"context_line":"TYPE_NONE \u003d \u0027none\u0027"},{"line_number":29,"context_line":"VXLAN_UDP_PORT \u003d 4789"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# Name prefixes for veth device pair linking the integration bridge"},{"line_number":32,"context_line":"# with the physical bridge for a physical network"},{"line_number":33,"context_line":"VETH_INTEGRATION_PREFIX \u003d \u0027int-\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPH%2F%2FiW0%3D","line":30,"updated":"2013-05-31 00:17:20.000000000","message":"do we need this? Seems we should always be using : cfg.ovs.vxlan_udp_port in config.py","commit_id":"7849033ece987febca188f7198b6accb9d18bfde"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":"TYPE_VXLAN \u003d \u0027vxlan\u0027"},{"line_number":28,"context_line":"TYPE_NONE \u003d \u0027none\u0027"},{"line_number":29,"context_line":"VXLAN_UDP_PORT \u003d 4789"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# Name prefixes for veth device pair linking the integration bridge"},{"line_number":32,"context_line":"# with the physical bridge for a physical network"},{"line_number":33,"context_line":"VETH_INTEGRATION_PREFIX \u003d \u0027int-\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPH%2F%2FiRk%3D","line":30,"in_reply_to":"AAAAPH%2F%2FiW0%3D","updated":"2013-05-31 01:28:11.000000000","message":"Actually, I realized this is used by ovs_lib.add_tunnel_port() to default to 4789 if nothing is specified, so I\u0027ll leave this in.","commit_id":"7849033ece987febca188f7198b6accb9d18bfde"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":"TYPE_VXLAN \u003d \u0027vxlan\u0027"},{"line_number":28,"context_line":"TYPE_NONE \u003d \u0027none\u0027"},{"line_number":29,"context_line":"VXLAN_UDP_PORT \u003d 4789"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# Name prefixes for veth device pair linking the integration bridge"},{"line_number":32,"context_line":"# with the physical bridge for a physical network"},{"line_number":33,"context_line":"VETH_INTEGRATION_PREFIX \u003d \u0027int-\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPH%2F%2FiSc%3D","line":30,"in_reply_to":"AAAAPH%2F%2FiW0%3D","updated":"2013-05-31 01:22:13.000000000","message":"Not needed, removing it from next version of the patch, nice catch!","commit_id":"7849033ece987febca188f7198b6accb9d18bfde"}],"quantum/plugins/openvswitch/ovs_quantum_plugin.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c56d172ed94cd8be30a715c013916eace043b419","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        if self.enable_tunneling:"},{"line_number":280,"context_line":"            self._parse_tunnel_id_ranges()"},{"line_number":281,"context_line":"            ovs_db_v2.sync_tunnel_allocations(self.tunnel_id_ranges)"},{"line_number":282,"context_line":"        elif self.tenant_network_type in [constants.TYPE_GRE,"},{"line_number":283,"context_line":"                                          constants.TYPE_VXLAN]:"},{"line_number":284,"context_line":"            LOG.error(_(\"Tunneling disabled but tenant_network_type is \u0027%s\u0027. \""},{"line_number":285,"context_line":"                      \"Agent terminated!\") % (self.tenant_network_type))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FukQ%3D","line":282,"updated":"2013-05-24 11:07:40.000000000","message":"Constants seen again in this file too, so maybe list of tunnel types could be placed in constants.py","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":279,"context_line":"        if self.enable_tunneling:"},{"line_number":280,"context_line":"            self._parse_tunnel_id_ranges()"},{"line_number":281,"context_line":"            ovs_db_v2.sync_tunnel_allocations(self.tunnel_id_ranges)"},{"line_number":282,"context_line":"        elif self.tenant_network_type in [constants.TYPE_GRE,"},{"line_number":283,"context_line":"                                          constants.TYPE_VXLAN]:"},{"line_number":284,"context_line":"            LOG.error(_(\"Tunneling disabled but tenant_network_type is \u0027%s\u0027. \""},{"line_number":285,"context_line":"                      \"Agent terminated!\") % (self.tenant_network_type))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FuNU%3D","line":282,"in_reply_to":"AAAAPH%2F%2FukQ%3D","updated":"2013-05-24 15:09:38.000000000","message":"Done","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":282,"context_line":"        elif self.tenant_network_type in [constants.TYPE_GRE,"},{"line_number":283,"context_line":"                                          constants.TYPE_VXLAN]:"},{"line_number":284,"context_line":"            LOG.error(_(\"Tunneling disabled but tenant_network_type is \u0027%s\u0027. \""},{"line_number":285,"context_line":"                      \"Agent terminated!\") % (self.tenant_network_type))"},{"line_number":286,"context_line":"            sys.exit(1)"},{"line_number":287,"context_line":"        self.setup_rpc()"},{"line_number":288,"context_line":"        self.network_scheduler \u003d importutils.import_object("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FvLc%3D","line":285,"updated":"2013-05-24 04:05:18.000000000","message":"A comma is usually used instead of % in LOG.xxxx().","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":282,"context_line":"        elif self.tenant_network_type in [constants.TYPE_GRE,"},{"line_number":283,"context_line":"                                          constants.TYPE_VXLAN]:"},{"line_number":284,"context_line":"            LOG.error(_(\"Tunneling disabled but tenant_network_type is \u0027%s\u0027. \""},{"line_number":285,"context_line":"                      \"Agent terminated!\") % (self.tenant_network_type))"},{"line_number":286,"context_line":"            sys.exit(1)"},{"line_number":287,"context_line":"        self.setup_rpc()"},{"line_number":288,"context_line":"        self.network_scheduler \u003d importutils.import_object("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FuOI%3D","line":285,"in_reply_to":"AAAAPH%2F%2FvLc%3D","updated":"2013-05-24 15:09:38.000000000","message":"Done","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":331,"context_line":"                                                network[\u0027id\u0027])"},{"line_number":332,"context_line":"        network[provider.NETWORK_TYPE] \u003d binding.network_type"},{"line_number":333,"context_line":"        if binding.network_type in [constants.TYPE_GRE,"},{"line_number":334,"context_line":"                                    constants.TYPE_VXLAN]:"},{"line_number":335,"context_line":"            network[provider.PHYSICAL_NETWORK] \u003d None"},{"line_number":336,"context_line":"            network[provider.SEGMENTATION_ID] \u003d binding.segmentation_id"},{"line_number":337,"context_line":"        elif binding.network_type \u003d\u003d constants.TYPE_FLAT:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FvLE%3D","line":334,"updated":"2013-05-24 04:05:18.000000000","message":"(just a suggestion) [TYPE_GRE, TYPE_VXLAN] is used many times. How about defining this array as a variable like TUNNEL_NETWORK_TYPES?","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":331,"context_line":"                                                network[\u0027id\u0027])"},{"line_number":332,"context_line":"        network[provider.NETWORK_TYPE] \u003d binding.network_type"},{"line_number":333,"context_line":"        if binding.network_type in [constants.TYPE_GRE,"},{"line_number":334,"context_line":"                                    constants.TYPE_VXLAN]:"},{"line_number":335,"context_line":"            network[provider.PHYSICAL_NETWORK] \u003d None"},{"line_number":336,"context_line":"            network[provider.SEGMENTATION_ID] \u003d binding.segmentation_id"},{"line_number":337,"context_line":"        elif binding.network_type \u003d\u003d constants.TYPE_FLAT:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FuNY%3D","line":334,"in_reply_to":"AAAAPH%2F%2FvLE%3D","updated":"2013-05-24 15:09:38.000000000","message":"Done","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":378,"context_line":"                raise q_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":379,"context_line":"        elif network_type in [constants.TYPE_GRE, constants.TYPE_VXLAN]:"},{"line_number":380,"context_line":"            if not self.enable_tunneling:"},{"line_number":381,"context_line":"                msg \u003d _(\"%s networks are not enabled\") % (network_type)"},{"line_number":382,"context_line":"                raise q_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":383,"context_line":"            if physical_network_set:"},{"line_number":384,"context_line":"                msg \u003d _(\"provider:physical_network specified for %s \""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FvLY%3D","line":381,"updated":"2013-05-24 04:05:18.000000000","message":"parenthesis around network_type is unnecessary.","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":378,"context_line":"                raise q_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":379,"context_line":"        elif network_type in [constants.TYPE_GRE, constants.TYPE_VXLAN]:"},{"line_number":380,"context_line":"            if not self.enable_tunneling:"},{"line_number":381,"context_line":"                msg \u003d _(\"%s networks are not enabled\") % (network_type)"},{"line_number":382,"context_line":"                raise q_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":383,"context_line":"            if physical_network_set:"},{"line_number":384,"context_line":"                msg \u003d _(\"provider:physical_network specified for %s \""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FuN8%3D","line":381,"in_reply_to":"AAAAPH%2F%2FvLY%3D","updated":"2013-05-24 15:09:38.000000000","message":"Done","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":382,"context_line":"                raise q_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":383,"context_line":"            if physical_network_set:"},{"line_number":384,"context_line":"                msg \u003d _(\"provider:physical_network specified for %s \""},{"line_number":385,"context_line":"                        \"network\") % (network_type)"},{"line_number":386,"context_line":"                raise q_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":387,"context_line":"            else:"},{"line_number":388,"context_line":"                physical_network \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FvLU%3D","line":385,"updated":"2013-05-24 04:05:18.000000000","message":"Ditto","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":382,"context_line":"                raise q_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":383,"context_line":"            if physical_network_set:"},{"line_number":384,"context_line":"                msg \u003d _(\"provider:physical_network specified for %s \""},{"line_number":385,"context_line":"                        \"network\") % (network_type)"},{"line_number":386,"context_line":"                raise q_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":387,"context_line":"            else:"},{"line_number":388,"context_line":"                physical_network \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FuN0%3D","line":385,"in_reply_to":"AAAAPH%2F%2FvLU%3D","updated":"2013-05-24 15:09:38.000000000","message":"Done","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":281,"context_line":"            ovs_db_v2.sync_tunnel_allocations(self.tunnel_id_ranges)"},{"line_number":282,"context_line":"        elif self.tenant_network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":283,"context_line":"            LOG.error(_(\"Tunneling disabled but tenant_network_type is \u0027%s\u0027. \""},{"line_number":284,"context_line":"                      \"Agent terminated!\"), (self.tenant_network_type))"},{"line_number":285,"context_line":"            sys.exit(1)"},{"line_number":286,"context_line":"        self.setup_rpc()"},{"line_number":287,"context_line":"        self.network_scheduler \u003d importutils.import_object("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fsmg%3D","line":284,"updated":"2013-05-25 22:44:12.000000000","message":"Technically you don\u0027t know if the agent is terminated (It might even have never been started).\n\nI don\u0027t want to sound picky, but perhaps just state \"L2 Agents will not run\" or \"L2 Agents will terminate\"\n... or perhaps did you want to refer to the server, that you\u0027re going to terminate at the next line?","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":281,"context_line":"            ovs_db_v2.sync_tunnel_allocations(self.tunnel_id_ranges)"},{"line_number":282,"context_line":"        elif self.tenant_network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":283,"context_line":"            LOG.error(_(\"Tunneling disabled but tenant_network_type is \u0027%s\u0027. \""},{"line_number":284,"context_line":"                      \"Agent terminated!\"), (self.tenant_network_type))"},{"line_number":285,"context_line":"            sys.exit(1)"},{"line_number":286,"context_line":"        self.setup_rpc()"},{"line_number":287,"context_line":"        self.network_scheduler \u003d importutils.import_object("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fs%2FQ%3D","line":284,"updated":"2013-05-25 00:05:09.000000000","message":"no need for parenthesis here.","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":281,"context_line":"            ovs_db_v2.sync_tunnel_allocations(self.tunnel_id_ranges)"},{"line_number":282,"context_line":"        elif self.tenant_network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":283,"context_line":"            LOG.error(_(\"Tunneling disabled but tenant_network_type is \u0027%s\u0027. \""},{"line_number":284,"context_line":"                      \"Agent terminated!\"), (self.tenant_network_type))"},{"line_number":285,"context_line":"            sys.exit(1)"},{"line_number":286,"context_line":"        self.setup_rpc()"},{"line_number":287,"context_line":"        self.network_scheduler \u003d importutils.import_object("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fq6U%3D","line":284,"in_reply_to":"AAAAPH%2F%2Fq8c%3D","updated":"2013-05-28 02:33:40.000000000","message":"I think \u0027Agent terminated\u0027 is from user perspective. Imagine \u0027L2 Agent will terminate\u0027 on console, and user sees it. At this time the agent is dead. So I perfer to keep \u0027Agent terminated\u0027.","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":281,"context_line":"            ovs_db_v2.sync_tunnel_allocations(self.tunnel_id_ranges)"},{"line_number":282,"context_line":"        elif self.tenant_network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":283,"context_line":"            LOG.error(_(\"Tunneling disabled but tenant_network_type is \u0027%s\u0027. \""},{"line_number":284,"context_line":"                      \"Agent terminated!\"), (self.tenant_network_type))"},{"line_number":285,"context_line":"            sys.exit(1)"},{"line_number":286,"context_line":"        self.setup_rpc()"},{"line_number":287,"context_line":"        self.network_scheduler \u003d importutils.import_object("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fq8g%3D","line":284,"in_reply_to":"AAAAPH%2F%2Fs%2FQ%3D","updated":"2013-05-28 02:15:42.000000000","message":"Done","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":281,"context_line":"            ovs_db_v2.sync_tunnel_allocations(self.tunnel_id_ranges)"},{"line_number":282,"context_line":"        elif self.tenant_network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":283,"context_line":"            LOG.error(_(\"Tunneling disabled but tenant_network_type is \u0027%s\u0027. \""},{"line_number":284,"context_line":"                      \"Agent terminated!\"), (self.tenant_network_type))"},{"line_number":285,"context_line":"            sys.exit(1)"},{"line_number":286,"context_line":"        self.setup_rpc()"},{"line_number":287,"context_line":"        self.network_scheduler \u003d importutils.import_object("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fq8c%3D","line":284,"in_reply_to":"AAAAPH%2F%2Fsmg%3D","updated":"2013-05-28 02:15:42.000000000","message":"Yes, I fixed it in the next patch to indicate the \"L2 Agent will terminate.\"","commit_id":"e6f85bfc1699669bf9fc07540ef3638cde2861b3"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":329,"context_line":"        binding \u003d ovs_db_v2.get_network_binding(context.session,"},{"line_number":330,"context_line":"                                                network[\u0027id\u0027])"},{"line_number":331,"context_line":"        network[provider.NETWORK_TYPE] \u003d binding.network_type"},{"line_number":332,"context_line":"        if binding.network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":333,"context_line":"            network[provider.PHYSICAL_NETWORK] \u003d None"},{"line_number":334,"context_line":"            network[provider.SEGMENTATION_ID] \u003d binding.segmentation_id"},{"line_number":335,"context_line":"        elif binding.network_type \u003d\u003d constants.TYPE_FLAT:"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2FoIQ%3D","line":332,"updated":"2013-05-29 00:06:05.000000000","message":"GRE and VXLAN should be treated as separate network types, since they are not interoperable with each other. The ml2 plugin\u0027s tenant_network_types is a list, so its easy to configure it to use VXLAN if available, but fall back to GRE if not.","commit_id":"dedba2630eebc3958029aa0f9716321bb65ed98b"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":329,"context_line":"        binding \u003d ovs_db_v2.get_network_binding(context.session,"},{"line_number":330,"context_line":"                                                network[\u0027id\u0027])"},{"line_number":331,"context_line":"        network[provider.NETWORK_TYPE] \u003d binding.network_type"},{"line_number":332,"context_line":"        if binding.network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":333,"context_line":"            network[provider.PHYSICAL_NETWORK] \u003d None"},{"line_number":334,"context_line":"            network[provider.SEGMENTATION_ID] \u003d binding.segmentation_id"},{"line_number":335,"context_line":"        elif binding.network_type \u003d\u003d constants.TYPE_FLAT:"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2Fl9I%3D","line":332,"in_reply_to":"AAAAPH%2F%2Fn3M%3D","updated":"2013-05-29 18:33:03.000000000","message":"In fact, this works today. If you just change from GRE to VXLAN in the config file and restart the agents, it will set up the tunnels using VXLAN. Nothing prevents this right now.","commit_id":"dedba2630eebc3958029aa0f9716321bb65ed98b"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":329,"context_line":"        binding \u003d ovs_db_v2.get_network_binding(context.session,"},{"line_number":330,"context_line":"                                                network[\u0027id\u0027])"},{"line_number":331,"context_line":"        network[provider.NETWORK_TYPE] \u003d binding.network_type"},{"line_number":332,"context_line":"        if binding.network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":333,"context_line":"            network[provider.PHYSICAL_NETWORK] \u003d None"},{"line_number":334,"context_line":"            network[provider.SEGMENTATION_ID] \u003d binding.segmentation_id"},{"line_number":335,"context_line":"        elif binding.network_type \u003d\u003d constants.TYPE_FLAT:"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2Fn3M%3D","line":332,"in_reply_to":"AAAAPH%2F%2Fn6s%3D","updated":"2013-05-29 03:04:51.000000000","message":"Agreed on ml2 for more complex multi-technology scenarios where multiple segments of different types make up a single virtual network.\n\nBut for openvswitch, what if the administrator upgrades to a new version that supports VXLAN and wants to start taking advantage of VXLAN for new tenant networks? Why couldn\u0027t they just change tenant_network_type from gre to vxlan? Newly created tenant networks would use VXLAN, while old tenant networks continue to use GRE? This scenario does not require any translation or bridging or anything - an individual network is either GRE or VXLAN (or flat or local, ...).","commit_id":"dedba2630eebc3958029aa0f9716321bb65ed98b"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":329,"context_line":"        binding \u003d ovs_db_v2.get_network_binding(context.session,"},{"line_number":330,"context_line":"                                                network[\u0027id\u0027])"},{"line_number":331,"context_line":"        network[provider.NETWORK_TYPE] \u003d binding.network_type"},{"line_number":332,"context_line":"        if binding.network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":333,"context_line":"            network[provider.PHYSICAL_NETWORK] \u003d None"},{"line_number":334,"context_line":"            network[provider.SEGMENTATION_ID] \u003d binding.segmentation_id"},{"line_number":335,"context_line":"        elif binding.network_type \u003d\u003d constants.TYPE_FLAT:"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2Fn6s%3D","line":332,"in_reply_to":"AAAAPH%2F%2Fn88%3D","updated":"2013-05-29 01:47:09.000000000","message":"I think it *could* do that, but something would have to translate between VMs on hosts with the two tunnels types for this to work. I could see the host with support for both types doing that. I\u0027d be more inclined to support this functionality as part of ML2, however.","commit_id":"dedba2630eebc3958029aa0f9716321bb65ed98b"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":329,"context_line":"        binding \u003d ovs_db_v2.get_network_binding(context.session,"},{"line_number":330,"context_line":"                                                network[\u0027id\u0027])"},{"line_number":331,"context_line":"        network[provider.NETWORK_TYPE] \u003d binding.network_type"},{"line_number":332,"context_line":"        if binding.network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":333,"context_line":"            network[provider.PHYSICAL_NETWORK] \u003d None"},{"line_number":334,"context_line":"            network[provider.SEGMENTATION_ID] \u003d binding.segmentation_id"},{"line_number":335,"context_line":"        elif binding.network_type \u003d\u003d constants.TYPE_FLAT:"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2Fn88%3D","line":332,"in_reply_to":"AAAAPH%2F%2FoC0%3D","updated":"2013-05-29 01:41:09.000000000","message":"Sorry, I was completely misinterpreting TUNNEL_NETWORK_TYPES. The gre and vxlan network types are completely separate network types, and TUNNEL_NETWORK_TYPES is just used to handle the tunnel types using the same code.\n\nBut now I\u0027m wondering why the openvswitch plugin with this patch cannot have both gre and vxlan networks active at the same time?","commit_id":"dedba2630eebc3958029aa0f9716321bb65ed98b"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":329,"context_line":"        binding \u003d ovs_db_v2.get_network_binding(context.session,"},{"line_number":330,"context_line":"                                                network[\u0027id\u0027])"},{"line_number":331,"context_line":"        network[provider.NETWORK_TYPE] \u003d binding.network_type"},{"line_number":332,"context_line":"        if binding.network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":333,"context_line":"            network[provider.PHYSICAL_NETWORK] \u003d None"},{"line_number":334,"context_line":"            network[provider.SEGMENTATION_ID] \u003d binding.segmentation_id"},{"line_number":335,"context_line":"        elif binding.network_type \u003d\u003d constants.TYPE_FLAT:"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2FoC0%3D","line":332,"in_reply_to":"AAAAPH%2F%2FoIQ%3D","updated":"2013-05-29 00:26:03.000000000","message":"I agree, if you\u0027re talking about ML2. But if we\u0027re talking about the Open vSwitch plugin, you can only have one type of tunnel network active a time.","commit_id":"dedba2630eebc3958029aa0f9716321bb65ed98b"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":455,"context_line":"                    (physical_network,"},{"line_number":456,"context_line":"                     segmentation_id) \u003d ovs_db_v2.reserve_vlan(session)"},{"line_number":457,"context_line":"                elif network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":458,"context_line":"                    segmentation_id \u003d ovs_db_v2.reserve_tunnel(session)"},{"line_number":459,"context_line":"                # no reservation needed for TYPE_LOCAL"},{"line_number":460,"context_line":"            else:"},{"line_number":461,"context_line":"                # provider network"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAPH%2F%2Fn10%3D","line":458,"updated":"2013-05-29 03:04:51.000000000","message":"In order to support co-existing gre and vxlan networks, I think the DB would ideally have separate allocation tables for each. An ml2 VxlanTypeDriver would likely have a separate allocation table from the GreTypeDriver. But the linuxbridge plugin can probably get by without this - it just would not be able to simultaneously support a provider gre network and a provider vxlan network that happen to use the same tunnel_id.","commit_id":"dedba2630eebc3958029aa0f9716321bb65ed98b"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":162,"context_line":"        # Notify all other listening agents"},{"line_number":163,"context_line":"        self.notifier.tunnel_update(rpc_context, tunnel.ip_address,"},{"line_number":164,"context_line":"                                    tunnel.id,"},{"line_number":165,"context_line":"                                    cfg.CONF.OVS.tenant_network_type)"},{"line_number":166,"context_line":"        # Return the list of tunnels IP\u0027s to the agent"},{"line_number":167,"context_line":"        return entry"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAPH%2F%2FcrY%3D","line":165,"updated":"2013-06-03 18:30:12.000000000","message":"This is assuming that tunnels are only used for tenant networks. What if the tenant_network_type is vlan or none, but a provider gre or vxlan network is created? What if tenant_network_type has been changed from gre to vxlan?\n\nI think we need to decide whether tunnel endpoints are a global resource or a network-type-specific resource. If they are global, then tunnel_type isn\u0027t needed here. If they are type-specific, then the tunnel_type does need to be passed, and either this plugin can only support one tunnel type at a time, or it needs to maintain separate sets of tunnel endpoints for each type. Either way, I don\u0027t think it is correct to assume tenant_network_type will always be the correct tunnel_type.","commit_id":"925e1a6a783c5f6d6a7cf5ff89f5fc871bd6a14f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":162,"context_line":"        # Notify all other listening agents"},{"line_number":163,"context_line":"        self.notifier.tunnel_update(rpc_context, tunnel.ip_address,"},{"line_number":164,"context_line":"                                    tunnel.id,"},{"line_number":165,"context_line":"                                    cfg.CONF.OVS.tenant_network_type)"},{"line_number":166,"context_line":"        # Return the list of tunnels IP\u0027s to the agent"},{"line_number":167,"context_line":"        return entry"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAPH%2F%2Fchg%3D","line":165,"in_reply_to":"AAAAPH%2F%2FcrY%3D","updated":"2013-06-03 18:55:59.000000000","message":"Again, this patch is not about adding simultaneous support for GRE and VXLAN at the same time. This patch is simply adding VXLAN as a tunnel option instead of GRE.\n\nMy opinion is that tunnel network types are a global resource, which is what this patch originally assumed, and this was not needed. In fact, it was based on your feedback that this was even added (please see the patch history). I would really like to just remove this and assume they are global for now. Subsequent patches can make these type-specific.","commit_id":"925e1a6a783c5f6d6a7cf5ff89f5fc871bd6a14f"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":285,"context_line":"            ovs_db_v2.sync_tunnel_allocations(self.tunnel_id_ranges)"},{"line_number":286,"context_line":"        elif self.tenant_network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":287,"context_line":"            LOG.error(_(\"Tunneling disabled but tenant_network_type is \u0027%s\u0027. \""},{"line_number":288,"context_line":"                      \"L2 Agent will terminate!\"), self.tenant_network_type)"},{"line_number":289,"context_line":"            sys.exit(1)"},{"line_number":290,"context_line":"        self.setup_rpc()"},{"line_number":291,"context_line":"        self.network_scheduler \u003d importutils.import_object("}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAPH%2F%2Fco4%3D","line":288,"updated":"2013-06-03 18:30:12.000000000","message":"We definitely want the server to fail loudly when tenant_network_type is a tunnel type and tunnelling is disabled. The error should be \"Server terminated!\", not something about the agent terminating (which I don\u0027t think it can since it shouldn\u0027t know about tenant_network_type). \n\nI think there may be several other places where the openvswitch plugin terminates the server (calls sys.exit(1)) but logs \"Agent terminated!\". I\u0027d fix them all.","commit_id":"925e1a6a783c5f6d6a7cf5ff89f5fc871bd6a14f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":285,"context_line":"            ovs_db_v2.sync_tunnel_allocations(self.tunnel_id_ranges)"},{"line_number":286,"context_line":"        elif self.tenant_network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":287,"context_line":"            LOG.error(_(\"Tunneling disabled but tenant_network_type is \u0027%s\u0027. \""},{"line_number":288,"context_line":"                      \"L2 Agent will terminate!\"), self.tenant_network_type)"},{"line_number":289,"context_line":"            sys.exit(1)"},{"line_number":290,"context_line":"        self.setup_rpc()"},{"line_number":291,"context_line":"        self.network_scheduler \u003d importutils.import_object("}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAPH%2F%2FchQ%3D","line":288,"in_reply_to":"AAAAPH%2F%2Fco4%3D","updated":"2013-06-03 18:55:59.000000000","message":"Done","commit_id":"925e1a6a783c5f6d6a7cf5ff89f5fc871bd6a14f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":322,"context_line":"                self.tunnel_id_ranges.append((int(tun_min), int(tun_max)))"},{"line_number":323,"context_line":"            except ValueError as ex:"},{"line_number":324,"context_line":"                LOG.error(_(\"Invalid tunnel ID range: \""},{"line_number":325,"context_line":"                            \"\u0027%(range)s\u0027 - %(e)s. ServerServer  terminated!\"),"},{"line_number":326,"context_line":"                          {\u0027range\u0027: entry, \u0027e\u0027: ex})"},{"line_number":327,"context_line":"                sys.exit(1)"},{"line_number":328,"context_line":"        LOG.info(_(\"Tunnel ID ranges: %s\"), self.tunnel_id_ranges)"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAPX%2F%2F2wk%3D","line":325,"updated":"2013-06-07 13:31:44.000000000","message":"s/ServerServer/Server/g","commit_id":"c4c55e1ac256c6915a971f339f8529149500c399"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":322,"context_line":"                self.tunnel_id_ranges.append((int(tun_min), int(tun_max)))"},{"line_number":323,"context_line":"            except ValueError as ex:"},{"line_number":324,"context_line":"                LOG.error(_(\"Invalid tunnel ID range: \""},{"line_number":325,"context_line":"                            \"\u0027%(range)s\u0027 - %(e)s. ServerServer  terminated!\"),"},{"line_number":326,"context_line":"                          {\u0027range\u0027: entry, \u0027e\u0027: ex})"},{"line_number":327,"context_line":"                sys.exit(1)"},{"line_number":328,"context_line":"        LOG.info(_(\"Tunnel ID ranges: %s\"), self.tunnel_id_ranges)"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAPX%2F%2F2vY%3D","line":325,"in_reply_to":"AAAAPX%2F%2F2wk%3D","updated":"2013-06-07 13:38:35.000000000","message":"Done","commit_id":"c4c55e1ac256c6915a971f339f8529149500c399"}],"quantum/tests/unit/openvswitch/test_ovs_quantum_agent.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c56d172ed94cd8be30a715c013916eace043b419","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                self.assertEquals(type(e), type(SystemExit()))"},{"line_number":323,"context_line":"                self.assertEquals(e.code, 1)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def test_check_minimum_version(self):"},{"line_number":326,"context_line":"        self._check_ovs_vxlan_version(\u00271.10\u0027)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def test_check_future_version(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2FttI%3D","line":325,"updated":"2013-05-24 17:20:00.000000000","message":"Test for non-number/malformed #?","commit_id":"efe229ffe2a4c76d4e6dc1d7b71f8cc829f00e22"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":318,"context_line":"                self.agent.tunnel_type \u003d \u0027vxlan\u0027"},{"line_number":319,"context_line":"                ovs_quantum_agent.OVSQuantumAgent._check_ovs_version("},{"line_number":320,"context_line":"                    self.agent, vers)"},{"line_number":321,"context_line":"            except SystemExit, e:"},{"line_number":322,"context_line":"                self.assertEquals(type(e), type(SystemExit()))"},{"line_number":323,"context_line":"                self.assertEquals(e.code, 1)"},{"line_number":324,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2Fq4c%3D","line":321,"updated":"2013-05-28 03:08:07.000000000","message":"Please use \", e\" instead of \"as e\" (which is recommended style)","commit_id":"5370576fe0c4845f0595aaba6f66e095342889ef"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":318,"context_line":"                self.agent.tunnel_type \u003d \u0027vxlan\u0027"},{"line_number":319,"context_line":"                ovs_quantum_agent.OVSQuantumAgent._check_ovs_version("},{"line_number":320,"context_line":"                    self.agent, vers)"},{"line_number":321,"context_line":"            except SystemExit, e:"},{"line_number":322,"context_line":"                self.assertEquals(type(e), type(SystemExit()))"},{"line_number":323,"context_line":"                self.assertEquals(e.code, 1)"},{"line_number":324,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2Fq38%3D","line":321,"in_reply_to":"AAAAPH%2F%2Fq4c%3D","updated":"2013-05-28 03:25:36.000000000","message":"Done","commit_id":"5370576fe0c4845f0595aaba6f66e095342889ef"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":314,"context_line":"    def _check_ovs_vxlan_version(self, vers):"},{"line_number":315,"context_line":"        with mock.patch(\u0027quantum.agent.linux.ovs_lib.get_version\u0027) as cmd:"},{"line_number":316,"context_line":"            try:"},{"line_number":317,"context_line":"                cmd.return_value \u003d \"ovs-vsctl (Open vSwitch) %s\" % vers"},{"line_number":318,"context_line":"                self.agent.tunnel_type \u003d \u0027vxlan\u0027"},{"line_number":319,"context_line":"                ovs_quantum_agent.OVSQuantumAgent._check_ovs_version("},{"line_number":320,"context_line":"                    self.agent, vers)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqQk%3D","line":317,"updated":"2013-05-28 12:54:53.000000000","message":"Your latest incarnation of get_version() now returns just vers, not the rest of the string.","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":314,"context_line":"    def _check_ovs_vxlan_version(self, vers):"},{"line_number":315,"context_line":"        with mock.patch(\u0027quantum.agent.linux.ovs_lib.get_version\u0027) as cmd:"},{"line_number":316,"context_line":"            try:"},{"line_number":317,"context_line":"                cmd.return_value \u003d \"ovs-vsctl (Open vSwitch) %s\" % vers"},{"line_number":318,"context_line":"                self.agent.tunnel_type \u003d \u0027vxlan\u0027"},{"line_number":319,"context_line":"                ovs_quantum_agent.OVSQuantumAgent._check_ovs_version("},{"line_number":320,"context_line":"                    self.agent, vers)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqDE%3D","line":317,"in_reply_to":"AAAAPH%2F%2FqQk%3D","updated":"2013-05-28 14:02:36.000000000","message":"Done","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":317,"context_line":"                cmd.return_value \u003d \"ovs-vsctl (Open vSwitch) %s\" % vers"},{"line_number":318,"context_line":"                self.agent.tunnel_type \u003d \u0027vxlan\u0027"},{"line_number":319,"context_line":"                ovs_quantum_agent.OVSQuantumAgent._check_ovs_version("},{"line_number":320,"context_line":"                    self.agent, vers)"},{"line_number":321,"context_line":"            except SystemExit as e:"},{"line_number":322,"context_line":"                self.assertEquals(type(e), type(SystemExit()))"},{"line_number":323,"context_line":"                self.assertEquals(e.code, 1)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqNI%3D","line":320,"updated":"2013-05-28 12:54:53.000000000","message":"This function takes a float for vers, not a string. But you shouldn\u0027t use \u0027vers\u0027 here, you should use the constant \u00271.10\u0027 (and it can\u0027t be a float as noted earlier), because otherwise you are just testing if vers \u003d\u003d vers.","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":317,"context_line":"                cmd.return_value \u003d \"ovs-vsctl (Open vSwitch) %s\" % vers"},{"line_number":318,"context_line":"                self.agent.tunnel_type \u003d \u0027vxlan\u0027"},{"line_number":319,"context_line":"                ovs_quantum_agent.OVSQuantumAgent._check_ovs_version("},{"line_number":320,"context_line":"                    self.agent, vers)"},{"line_number":321,"context_line":"            except SystemExit as e:"},{"line_number":322,"context_line":"                self.assertEquals(type(e), type(SystemExit()))"},{"line_number":323,"context_line":"                self.assertEquals(e.code, 1)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqCg%3D","line":320,"in_reply_to":"AAAAPH%2F%2FqNI%3D","updated":"2013-05-28 14:02:36.000000000","message":"Done","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":319,"context_line":"                ovs_quantum_agent.OVSQuantumAgent._check_ovs_version("},{"line_number":320,"context_line":"                    self.agent, vers)"},{"line_number":321,"context_line":"            except SystemExit as e:"},{"line_number":322,"context_line":"                self.assertEquals(type(e), type(SystemExit()))"},{"line_number":323,"context_line":"                self.assertEquals(e.code, 1)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def test_check_minimum_version(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqL4%3D","line":322,"updated":"2013-05-28 12:54:53.000000000","message":"Isn\u0027t this redundant?","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":319,"context_line":"                ovs_quantum_agent.OVSQuantumAgent._check_ovs_version("},{"line_number":320,"context_line":"                    self.agent, vers)"},{"line_number":321,"context_line":"            except SystemExit as e:"},{"line_number":322,"context_line":"                self.assertEquals(type(e), type(SystemExit()))"},{"line_number":323,"context_line":"                self.assertEquals(e.code, 1)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def test_check_minimum_version(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2Fp%2BM%3D","line":322,"in_reply_to":"AAAAPH%2F%2FqL4%3D","updated":"2013-05-28 14:02:36.000000000","message":"The intention is to verify the exception thrown in the exit case is that of SytemExit().","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":320,"context_line":"                    self.agent, vers)"},{"line_number":321,"context_line":"            except SystemExit as e:"},{"line_number":322,"context_line":"                self.assertEquals(type(e), type(SystemExit()))"},{"line_number":323,"context_line":"                self.assertEquals(e.code, 1)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def test_check_minimum_version(self):"},{"line_number":326,"context_line":"        self._check_ovs_vxlan_version(\u00271.10\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqLw%3D","line":323,"updated":"2013-05-28 12:54:53.000000000","message":"You need a way of distinguishing tests for version requirement satisfied and not satisfied. I don\u0027t see that here?","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":320,"context_line":"                    self.agent, vers)"},{"line_number":321,"context_line":"            except SystemExit as e:"},{"line_number":322,"context_line":"                self.assertEquals(type(e), type(SystemExit()))"},{"line_number":323,"context_line":"                self.assertEquals(e.code, 1)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def test_check_minimum_version(self):"},{"line_number":326,"context_line":"        self._check_ovs_vxlan_version(\u00271.10\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2Fp%2FY%3D","line":323,"in_reply_to":"AAAAPH%2F%2FqLw%3D","updated":"2013-05-28 14:02:36.000000000","message":"Addressed in upcoming patch, please review once it lands.","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c56d172ed94cd8be30a715c013916eace043b419","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                self.assertEquals(type(e), type(SystemExit()))"},{"line_number":323,"context_line":"                self.assertEquals(e.code, 1)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def test_check_minimum_version(self):"},{"line_number":326,"context_line":"        self._check_ovs_vxlan_version(\u00271.10\u0027)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def test_check_future_version(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqN4%3D","line":325,"updated":"2013-05-28 12:46:19.000000000","message":"Maybe add a test case, where the version could not be obtained?","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":322,"context_line":"                self.assertEquals(type(e), type(SystemExit()))"},{"line_number":323,"context_line":"                self.assertEquals(e.code, 1)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def test_check_minimum_version(self):"},{"line_number":326,"context_line":"        self._check_ovs_vxlan_version(\u00271.10\u0027)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def test_check_future_version(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2Fp%2Bg%3D","line":325,"in_reply_to":"AAAAPH%2F%2FqN4%3D","updated":"2013-05-28 14:02:36.000000000","message":"Done","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":312,"context_line":"            self.agent.port_unbound(\"vif3\", \"netuid12345\")"},{"line_number":313,"context_line":"            self.assertEqual(reclvl_fn.call_count, 2)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def _check_ovs_vxlan_version(self, vers, ovs_vers):"},{"line_number":316,"context_line":"        with mock.patch(\u0027quantum.agent.linux.ovs_lib.get_version\u0027) as cmd:"},{"line_number":317,"context_line":"            try:"},{"line_number":318,"context_line":"                cmd.return_value \u003d str(ovs_vers)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2Fpsw%3D","line":315,"updated":"2013-05-28 15:25:49.000000000","message":"I still see not distinction between tests for \"version check passes\" and \"version check fails\". For example, you need to verify that (\u00271.4\u0027, \u00271.10\u0027) causes a system exit, and verify that (\u00271.11\u0027, \u00271.10\u0027) does not.","commit_id":"a03c162af42e0d0b471dfb40b6bd52dc078fd244"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":312,"context_line":"            self.agent.port_unbound(\"vif3\", \"netuid12345\")"},{"line_number":313,"context_line":"            self.assertEqual(reclvl_fn.call_count, 2)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def _check_ovs_vxlan_version(self, vers, ovs_vers):"},{"line_number":316,"context_line":"        with mock.patch(\u0027quantum.agent.linux.ovs_lib.get_version\u0027) as cmd:"},{"line_number":317,"context_line":"            try:"},{"line_number":318,"context_line":"                cmd.return_value \u003d str(ovs_vers)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2Fpr4%3D","line":315,"in_reply_to":"AAAAPH%2F%2Fpsw%3D","updated":"2013-05-28 15:28:05.000000000","message":"The idea is that it will either pass ok, or throw the exit exception, and both of those are caught here. I imagine I could make this clearer by catching the exit exception in the caller in the failure case.","commit_id":"a03c162af42e0d0b471dfb40b6bd52dc078fd244"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":315,"context_line":"    def _check_ovs_vxlan_version(self, vers, ovs_vers):"},{"line_number":316,"context_line":"        with mock.patch(\u0027quantum.agent.linux.ovs_lib.get_version\u0027) as cmd:"},{"line_number":317,"context_line":"            try:"},{"line_number":318,"context_line":"                cmd.return_value \u003d str(ovs_vers)"},{"line_number":319,"context_line":"                self.agent.tunnel_type \u003d \u0027vxlan\u0027"},{"line_number":320,"context_line":"                ovs_quantum_agent.OVSQuantumAgent._check_ovs_version("},{"line_number":321,"context_line":"                    self.agent, vers)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2Fpzw%3D","line":318,"updated":"2013-05-28 14:54:28.000000000","message":"Don\u0027t use float for versions.","commit_id":"a03c162af42e0d0b471dfb40b6bd52dc078fd244"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":315,"context_line":"    def _check_ovs_vxlan_version(self, vers, ovs_vers):"},{"line_number":316,"context_line":"        with mock.patch(\u0027quantum.agent.linux.ovs_lib.get_version\u0027) as cmd:"},{"line_number":317,"context_line":"            try:"},{"line_number":318,"context_line":"                cmd.return_value \u003d str(ovs_vers)"},{"line_number":319,"context_line":"                self.agent.tunnel_type \u003d \u0027vxlan\u0027"},{"line_number":320,"context_line":"                ovs_quantum_agent.OVSQuantumAgent._check_ovs_version("},{"line_number":321,"context_line":"                    self.agent, vers)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2FpyY%3D","line":318,"in_reply_to":"AAAAPH%2F%2Fpzw%3D","updated":"2013-05-28 15:01:35.000000000","message":"Done","commit_id":"a03c162af42e0d0b471dfb40b6bd52dc078fd244"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"unresolved":false,"context_lines":[{"line_number":320,"context_line":"                ovs_quantum_agent.OVSQuantumAgent._check_ovs_version("},{"line_number":321,"context_line":"                    self.agent, vers)"},{"line_number":322,"context_line":"            except SystemExit as e:"},{"line_number":323,"context_line":"                self.assertEquals(type(e), type(SystemExit()))"},{"line_number":324,"context_line":"                self.assertEquals(e.code, 1)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def test_check_minimum_version(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPH%2F%2Fpuw%3D","line":323,"updated":"2013-05-28 15:25:49.000000000","message":"This is under \"except SystemExit as e\", so what other type could e be?","commit_id":"a03c162af42e0d0b471dfb40b6bd52dc078fd244"}],"quantum/tests/unit/openvswitch/test_ovs_tunnel.py":[{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"7f812102ad18772a5b210e4537690d9138258829","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                                              self.TUN_BRIDGE,"},{"line_number":159,"context_line":"                                              \u002710.0.0.1\u0027, self.NET_MAPPING,"},{"line_number":160,"context_line":"                                              \u0027sudo\u0027, 2, True, \u0027gre\u0027)"},{"line_number":161,"context_line":"        a.available_local_vlans \u003d set([LV_ID])"},{"line_number":162,"context_line":"        a.provision_local_vlan(NET_UUID, constants.TYPE_GRE, None, LS_ID)"},{"line_number":163,"context_line":"        self.mox.VerifyAll()"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FvcU%3D","line":161,"updated":"2013-05-24 00:32:06.000000000","message":"shouldn\u0027t be running these tests for both tunnels?","commit_id":"3a98a96a67d94488cc4d40b9fa91925e8105eacd"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":158,"context_line":"                                              self.TUN_BRIDGE,"},{"line_number":159,"context_line":"                                              \u002710.0.0.1\u0027, self.NET_MAPPING,"},{"line_number":160,"context_line":"                                              \u0027sudo\u0027, 2, True, \u0027gre\u0027)"},{"line_number":161,"context_line":"        a.available_local_vlans \u003d set([LV_ID])"},{"line_number":162,"context_line":"        a.provision_local_vlan(NET_UUID, constants.TYPE_GRE, None, LS_ID)"},{"line_number":163,"context_line":"        self.mox.VerifyAll()"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FvQA%3D","line":161,"in_reply_to":"AAAAPH%2F%2FvcU%3D","updated":"2013-05-24 02:43:05.000000000","message":"It\u0027s unclear to me, as the tunnel type is merely a configuration element, and doesn\u0027t functionally change the Quantum code at all.","commit_id":"3a98a96a67d94488cc4d40b9fa91925e8105eacd"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c56d172ed94cd8be30a715c013916eace043b419","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                                          \u0027sudo\u0027, 2, True, \u0027gre\u0027)"},{"line_number":136,"context_line":"        self.mox.VerifyAll()"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def testConstructVXLAN(self):"},{"line_number":139,"context_line":"        self.mox.ReplayAll()"},{"line_number":140,"context_line":"        ovs_quantum_agent.OVSQuantumAgent(self.INT_BRIDGE,"},{"line_number":141,"context_line":"                                          self.TUN_BRIDGE,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Fuis%3D","line":138,"updated":"2013-05-24 11:07:40.000000000","message":"Add negative test for OVS version too low?","commit_id":"b4107b52787f9079658255bf8ac6e9a42f0848a3"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"c56d172ed94cd8be30a715c013916eace043b419","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        ovs_quantum_agent.OVSQuantumAgent(self.INT_BRIDGE,"},{"line_number":133,"context_line":"                                          self.TUN_BRIDGE,"},{"line_number":134,"context_line":"                                          \u002710.0.0.1\u0027, self.NET_MAPPING,"},{"line_number":135,"context_line":"                                          \u0027sudo\u0027, 2, True, \u0027gre\u0027)"},{"line_number":136,"context_line":"        self.mox.VerifyAll()"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def testConstructVXLAN(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqNs%3D","line":135,"updated":"2013-05-28 12:46:19.000000000","message":"If default value used, most of the changes could be pulled from this file","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":132,"context_line":"        ovs_quantum_agent.OVSQuantumAgent(self.INT_BRIDGE,"},{"line_number":133,"context_line":"                                          self.TUN_BRIDGE,"},{"line_number":134,"context_line":"                                          \u002710.0.0.1\u0027, self.NET_MAPPING,"},{"line_number":135,"context_line":"                                          \u0027sudo\u0027, 2, True, \u0027gre\u0027)"},{"line_number":136,"context_line":"        self.mox.VerifyAll()"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def testConstructVXLAN(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FqDM%3D","line":135,"in_reply_to":"AAAAPH%2F%2FqNs%3D","updated":"2013-05-28 14:02:36.000000000","message":"Nice catch, updated per your comments.","commit_id":"52d4d55decde651f4ba8a616b3ce63213130476f"}]}
