)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"22c3277a3260cd1418eee963ee7bf413d5ad1b6f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"connected to the default gateway. It makes the reuse of"},{"line_number":16,"context_line":"ovs_neutron_plugin.ini possible."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"DocImpact"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: I1e6d614e372db72cc968bfd685ad618324b91c53"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAUH%2F%2F4xE%3D","line":18,"updated":"2014-01-07 08:09:23.000000000","message":"Could you add a link to LP bug or BP to track the change?","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"}],"etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"78546b39e2e997ed4d6ca666cedac4d4f056d218","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"# Uncomment this line for the agent if tunnel_id_ranges (above) is not"},{"line_number":70,"context_line":"# empty for the server. Set local-ip to be the local IP address of"},{"line_number":71,"context_line":"# this hypervisor. Or, set it to auto to pick automatically the IP"},{"line_number":72,"context_line":"# address of the interface which is connected to the default gateway."},{"line_number":73,"context_line":"#"},{"line_number":74,"context_line":"# local_ip \u003d"}],"source_content_type":"text/x-properties","patch_set":1,"id":"AAAAT3%2F%2F6C0%3D","line":71,"updated":"2013-12-27 12:10:46.000000000","message":"putting \u0027auto\u0027 into quotes will probably make it more clear","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"0bf52811537142b2851d0a5da10a0138a43dbb0d","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"# Uncomment this line for the agent if tunnel_id_ranges (above) is not"},{"line_number":70,"context_line":"# empty for the server. Set local-ip to be the local IP address of"},{"line_number":71,"context_line":"# this hypervisor. Or, set it to auto to pick automatically the IP"},{"line_number":72,"context_line":"# address of the interface which is connected to the default gateway."},{"line_number":73,"context_line":"#"},{"line_number":74,"context_line":"# local_ip \u003d"}],"source_content_type":"text/x-properties","patch_set":1,"id":"AAAAT3%2F%2F5js%3D","line":71,"in_reply_to":"AAAAT3%2F%2F6C0%3D","updated":"2013-12-27 16:13:57.000000000","message":"Will do.","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"901a8b428c36003862c3e1d88d73d3c1ada26fd5","unresolved":false,"context_lines":[{"line_number":70,"context_line":"# empty for the server. Set local-ip to be the local IP address of"},{"line_number":71,"context_line":"# this hypervisor. Or, set it to auto to pick automatically the IP"},{"line_number":72,"context_line":"# address of the interface which is connected to the default gateway."},{"line_number":73,"context_line":"#"},{"line_number":74,"context_line":"# local_ip \u003d"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"# (ListOpt) Comma-separated list of \u003cphysical_network\u003e:\u003cbridge\u003e tuples"}],"source_content_type":"text/x-properties","patch_set":1,"id":"AAAAT3%2F%2F6AY%3D","line":73,"updated":"2013-12-27 12:18:46.000000000","message":"It would be better to add a example or just use auto as default.\n\n    # Example\n    # local_ip \u003d auto","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"0bf52811537142b2851d0a5da10a0138a43dbb0d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"# empty for the server. Set local-ip to be the local IP address of"},{"line_number":71,"context_line":"# this hypervisor. Or, set it to auto to pick automatically the IP"},{"line_number":72,"context_line":"# address of the interface which is connected to the default gateway."},{"line_number":73,"context_line":"#"},{"line_number":74,"context_line":"# local_ip \u003d"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"# (ListOpt) Comma-separated list of \u003cphysical_network\u003e:\u003cbridge\u003e tuples"}],"source_content_type":"text/x-properties","patch_set":1,"id":"AAAAT3%2F%2F5jM%3D","line":73,"in_reply_to":"AAAAT3%2F%2F6AY%3D","updated":"2013-12-27 16:13:57.000000000","message":"I\u0027ll add an example.","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"d8e67abfa0be193bf244af7b2bd4c783dbf8e2d7","unresolved":false,"context_lines":[{"line_number":78,"context_line":"# (BoolOpt) Set to True to pick an IPv6 address rather than IPv4 when"},{"line_number":79,"context_line":"# local_ip is \u0027auto\u0027. Otherwise this option is ignored."},{"line_number":80,"context_line":"#"},{"line_number":81,"context_line":"# local_ip_auto_ipv6 \u003d False"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"# (ListOpt) Comma-separated list of \u003cphysical_network\u003e:\u003cbridge\u003e tuples"},{"line_number":84,"context_line":"# mapping physical network names to the agent\u0027s node-specific OVS"}],"source_content_type":"text/x-properties","patch_set":4,"id":"AAAAUH%2F%2FfWg%3D","line":81,"updated":"2014-01-13 11:47:16.000000000","message":"Does OVS currently support IPv6 endpoints?  http://openvswitch.org/ovs-vswitchd.conf.db.5.pdf says that a tunnel\u0027s local_ip and remote_ip are IPv4 addresses.","commit_id":"4a7d7ac9fe66f1ecdddc35f1acfbf47081f4c27e"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"f4acc82f5db74d46a81e2c71d44378889da73422","unresolved":false,"context_lines":[{"line_number":78,"context_line":"# (BoolOpt) Set to True to pick an IPv6 address rather than IPv4 when"},{"line_number":79,"context_line":"# local_ip is \u0027auto\u0027. Otherwise this option is ignored."},{"line_number":80,"context_line":"#"},{"line_number":81,"context_line":"# local_ip_auto_ipv6 \u003d False"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"# (ListOpt) Comma-separated list of \u003cphysical_network\u003e:\u003cbridge\u003e tuples"},{"line_number":84,"context_line":"# mapping physical network names to the agent\u0027s node-specific OVS"}],"source_content_type":"text/x-properties","patch_set":4,"id":"AAAAUH%2F%2FTUg%3D","line":81,"in_reply_to":"AAAAUH%2F%2FfWg%3D","updated":"2014-01-15 09:54:04.000000000","message":"Sorry. I found I didn\u0027t test it properly. It does not work with ipv6","commit_id":"4a7d7ac9fe66f1ecdddc35f1acfbf47081f4c27e"}],"neutron/plugins/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"22c3277a3260cd1418eee963ee7bf413d5ad1b6f","unresolved":false,"context_lines":[{"line_number":1233,"context_line":"        gateway \u003d device.route.get_gateway()"},{"line_number":1234,"context_line":"        if gateway:"},{"line_number":1235,"context_line":"            for addr in device.addr.list():"},{"line_number":1236,"context_line":"                if (addr.get(\u0027ip_version\u0027) !\u003d 4 or"},{"line_number":1237,"context_line":"                    addr.get(\u0027scope\u0027) !\u003d \u0027global\u0027):"},{"line_number":1238,"context_line":"                    continue"},{"line_number":1239,"context_line":"                t \u003d addr.get(\u0027cidr\u0027, \u0027\u0027).partition(\u0027/\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2F4vQ%3D","line":1236,"updated":"2014-01-07 08:09:23.000000000","message":"Only IPv4 is supported? Hopefully this feature works with IPv6 :-)\nOthewise it is worth documented.\n\nI am not sure if local_ip supports only IPv4...","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"78546b39e2e997ed4d6ca666cedac4d4f056d218","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"                if (addr.get(\u0027ip_version\u0027) !\u003d 4 or"},{"line_number":1237,"context_line":"                    addr.get(\u0027scope\u0027) !\u003d \u0027global\u0027):"},{"line_number":1238,"context_line":"                    continue"},{"line_number":1239,"context_line":"                t \u003d addr.get(\u0027cidr\u0027, \u0027\u0027).partition(\u0027/\u0027)"},{"line_number":1240,"context_line":"                if t[0] and t[1] and t[2]:"},{"line_number":1241,"context_line":"                    return t[0]"},{"line_number":1242,"context_line":"    return None"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F6Cs%3D","line":1239,"updated":"2013-12-27 12:10:46.000000000","message":"what stands for t?","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"0bf52811537142b2851d0a5da10a0138a43dbb0d","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"                if (addr.get(\u0027ip_version\u0027) !\u003d 4 or"},{"line_number":1237,"context_line":"                    addr.get(\u0027scope\u0027) !\u003d \u0027global\u0027):"},{"line_number":1238,"context_line":"                    continue"},{"line_number":1239,"context_line":"                t \u003d addr.get(\u0027cidr\u0027, \u0027\u0027).partition(\u0027/\u0027)"},{"line_number":1240,"context_line":"                if t[0] and t[1] and t[2]:"},{"line_number":1241,"context_line":"                    return t[0]"},{"line_number":1242,"context_line":"    return None"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F5lc%3D","line":1239,"in_reply_to":"AAAAT3%2F%2F6Cs%3D","updated":"2013-12-27 16:13:57.000000000","message":"T for tuple... ok, I\u0027ll use a name which makes more sense.","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"78546b39e2e997ed4d6ca666cedac4d4f056d218","unresolved":false,"context_lines":[{"line_number":1237,"context_line":"                    addr.get(\u0027scope\u0027) !\u003d \u0027global\u0027):"},{"line_number":1238,"context_line":"                    continue"},{"line_number":1239,"context_line":"                t \u003d addr.get(\u0027cidr\u0027, \u0027\u0027).partition(\u0027/\u0027)"},{"line_number":1240,"context_line":"                if t[0] and t[1] and t[2]:"},{"line_number":1241,"context_line":"                    return t[0]"},{"line_number":1242,"context_line":"    return None"},{"line_number":1243,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F6Cc%3D","line":1240,"updated":"2013-12-27 12:10:46.000000000","message":"Can it raise IndexError?","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"0bf52811537142b2851d0a5da10a0138a43dbb0d","unresolved":false,"context_lines":[{"line_number":1237,"context_line":"                    addr.get(\u0027scope\u0027) !\u003d \u0027global\u0027):"},{"line_number":1238,"context_line":"                    continue"},{"line_number":1239,"context_line":"                t \u003d addr.get(\u0027cidr\u0027, \u0027\u0027).partition(\u0027/\u0027)"},{"line_number":1240,"context_line":"                if t[0] and t[1] and t[2]:"},{"line_number":1241,"context_line":"                    return t[0]"},{"line_number":1242,"context_line":"    return None"},{"line_number":1243,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F5k4%3D","line":1240,"in_reply_to":"AAAAT3%2F%2F6Cc%3D","updated":"2013-12-27 16:13:57.000000000","message":"No, str.partition() always returns a tuple having 3 elements.","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"901a8b428c36003862c3e1d88d73d3c1ada26fd5","unresolved":false,"context_lines":[{"line_number":1275,"context_line":"        if tun not in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":1276,"context_line":"            msg \u003d _(\u0027Invalid tunnel type specificed: %s\u0027), tun"},{"line_number":1277,"context_line":"            raise ValueError(msg)"},{"line_number":1278,"context_line":"        if not kwargs[\u0027local_ip\u0027]:"},{"line_number":1279,"context_line":"            msg \u003d _(\u0027Tunneling cannot be enabled without a valid local_ip.\u0027)"},{"line_number":1280,"context_line":"            raise ValueError(msg)"},{"line_number":1281,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F5%2FA%3D","line":1278,"updated":"2013-12-27 12:18:46.000000000","message":"-1: what if set local_ip to \u0027auto\u0027? I think it is dangerous because `_get_local_ip_for_default_route()` may fail and kwargs[\u0027local_ip\u0027] is None lastly but here it will be \u0027auto\u0027 and this check will be ignored.\n\nSo I suggest to put the new code before this block","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"0bf52811537142b2851d0a5da10a0138a43dbb0d","unresolved":false,"context_lines":[{"line_number":1275,"context_line":"        if tun not in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":1276,"context_line":"            msg \u003d _(\u0027Invalid tunnel type specificed: %s\u0027), tun"},{"line_number":1277,"context_line":"            raise ValueError(msg)"},{"line_number":1278,"context_line":"        if not kwargs[\u0027local_ip\u0027]:"},{"line_number":1279,"context_line":"            msg \u003d _(\u0027Tunneling cannot be enabled without a valid local_ip.\u0027)"},{"line_number":1280,"context_line":"            raise ValueError(msg)"},{"line_number":1281,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F5j4%3D","line":1278,"in_reply_to":"AAAAT3%2F%2F5%2FA%3D","updated":"2013-12-27 16:13:57.000000000","message":"In the case _get_local_ip_for_default_route() returns None, ValueError will be raised (L1286) and then sys.exit is called (L1304).","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"78546b39e2e997ed4d6ca666cedac4d4f056d218","unresolved":false,"context_lines":[{"line_number":1284,"context_line":"        if not auto_local_ip:"},{"line_number":1285,"context_line":"            msg \u003d _(\u0027Cannot determine a value of local_ip automatically.\u0027)"},{"line_number":1286,"context_line":"            raise ValueError(msg)"},{"line_number":1287,"context_line":"        LOG.info(\u0027local_ip\u003dauto is treated as local_ip\u003d%s\u0027, auto_local_ip)"},{"line_number":1288,"context_line":"        kwargs[\u0027local_ip\u0027] \u003d auto_local_ip"},{"line_number":1289,"context_line":""},{"line_number":1290,"context_line":"    return kwargs"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F6CA%3D","line":1287,"updated":"2013-12-27 12:10:46.000000000","message":"i18n","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"0bf52811537142b2851d0a5da10a0138a43dbb0d","unresolved":false,"context_lines":[{"line_number":1284,"context_line":"        if not auto_local_ip:"},{"line_number":1285,"context_line":"            msg \u003d _(\u0027Cannot determine a value of local_ip automatically.\u0027)"},{"line_number":1286,"context_line":"            raise ValueError(msg)"},{"line_number":1287,"context_line":"        LOG.info(\u0027local_ip\u003dauto is treated as local_ip\u003d%s\u0027, auto_local_ip)"},{"line_number":1288,"context_line":"        kwargs[\u0027local_ip\u0027] \u003d auto_local_ip"},{"line_number":1289,"context_line":""},{"line_number":1290,"context_line":"    return kwargs"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F5jw%3D","line":1287,"in_reply_to":"AAAAT3%2F%2F6CA%3D","updated":"2013-12-27 16:13:57.000000000","message":"Will do.","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":2711,"name":"Zhang Hua","display_name":"Zhang Hua","email":"joshua.zhang@canonical.com","username":"zhhuabj"},"change_message_id":"c6755133095b25594d26de465e57944d97abb260","unresolved":false,"context_lines":[{"line_number":1228,"context_line":""},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":"def _get_local_ip_for_default_route(use_ipv6):"},{"line_number":1231,"context_line":"    ip_version \u003d 4"},{"line_number":1232,"context_line":"    if use_ipv6:"},{"line_number":1233,"context_line":"        ip_version \u003d 6"},{"line_number":1234,"context_line":"    ret_address \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FsqM%3D","line":1231,"updated":"2014-01-09 13:56:11.000000000","message":"if need to use constant here ?","commit_id":"287be19e2f01c607d2ef86aacb96052d25d922ae"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"9842562ab565728e6de50af3263e3bf9f046da43","unresolved":false,"context_lines":[{"line_number":1228,"context_line":""},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":"def _get_local_ip_for_default_route(use_ipv6):"},{"line_number":1231,"context_line":"    ip_version \u003d 4"},{"line_number":1232,"context_line":"    if use_ipv6:"},{"line_number":1233,"context_line":"        ip_version \u003d 6"},{"line_number":1234,"context_line":"    ret_address \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2Fn5M%3D","line":1231,"in_reply_to":"AAAAUH%2F%2FsqM%3D","updated":"2014-01-10 11:46:05.000000000","message":"Defining constants for 4 and 6 looks too much to me. And ip_lib.py uses bare 4 and 6, so I\u0027d like to do the same.","commit_id":"287be19e2f01c607d2ef86aacb96052d25d922ae"},{"author":{"_account_id":2711,"name":"Zhang Hua","display_name":"Zhang Hua","email":"joshua.zhang@canonical.com","username":"zhhuabj"},"change_message_id":"c6755133095b25594d26de465e57944d97abb260","unresolved":false,"context_lines":[{"line_number":1233,"context_line":"        ip_version \u003d 6"},{"line_number":1234,"context_line":"    ret_address \u003d None"},{"line_number":1235,"context_line":"    lowest_metric \u003d sys.maxint"},{"line_number":1236,"context_line":"    devices \u003d ip_lib.IPWrapper().get_devices(exclude_loopback\u003dTrue)"},{"line_number":1237,"context_line":"    for device in devices:"},{"line_number":1238,"context_line":"        # TODO(arata): get_gateway() returns only information about IPv4."},{"line_number":1239,"context_line":"        #              We need one about IPv6 if use_ipv6 is True."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FswM%3D","line":1236,"updated":"2014-01-09 13:56:11.000000000","message":"for flexibility we need to pass the interface as the input parameter here ?","commit_id":"287be19e2f01c607d2ef86aacb96052d25d922ae"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"9842562ab565728e6de50af3263e3bf9f046da43","unresolved":false,"context_lines":[{"line_number":1233,"context_line":"        ip_version \u003d 6"},{"line_number":1234,"context_line":"    ret_address \u003d None"},{"line_number":1235,"context_line":"    lowest_metric \u003d sys.maxint"},{"line_number":1236,"context_line":"    devices \u003d ip_lib.IPWrapper().get_devices(exclude_loopback\u003dTrue)"},{"line_number":1237,"context_line":"    for device in devices:"},{"line_number":1238,"context_line":"        # TODO(arata): get_gateway() returns only information about IPv4."},{"line_number":1239,"context_line":"        #              We need one about IPv6 if use_ipv6 is True."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2Fn1w%3D","line":1236,"in_reply_to":"AAAAUH%2F%2FswM%3D","updated":"2014-01-10 11:46:05.000000000","message":"Detecting an interface connected to the gateway and using a specified interface are mutually exclusive so this function cannot take interface(s) as a parameter, I think. However, in a later patch, I\u0027d like to add an option to specify an interface like\n\n    local_ip_auto_interface \u003d eth1\n    or\n    local_ip_auto_interface \u003d %gateway\n    (This same as the current behavior)","commit_id":"287be19e2f01c607d2ef86aacb96052d25d922ae"},{"author":{"_account_id":2711,"name":"Zhang Hua","display_name":"Zhang Hua","email":"joshua.zhang@canonical.com","username":"zhhuabj"},"change_message_id":"c6755133095b25594d26de465e57944d97abb260","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"    devices \u003d ip_lib.IPWrapper().get_devices(exclude_loopback\u003dTrue)"},{"line_number":1237,"context_line":"    for device in devices:"},{"line_number":1238,"context_line":"        # TODO(arata): get_gateway() returns only information about IPv4."},{"line_number":1239,"context_line":"        #              We need one about IPv6 if use_ipv6 is True."},{"line_number":1240,"context_line":"        gateway \u003d device.route.get_gateway()"},{"line_number":1241,"context_line":"        if not gateway:"},{"line_number":1242,"context_line":"            continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FsvU%3D","line":1239,"updated":"2014-01-09 13:56:11.000000000","message":"get_gateway(scope\u003d\u0027global\u0027) ?","commit_id":"287be19e2f01c607d2ef86aacb96052d25d922ae"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"9842562ab565728e6de50af3263e3bf9f046da43","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"    devices \u003d ip_lib.IPWrapper().get_devices(exclude_loopback\u003dTrue)"},{"line_number":1237,"context_line":"    for device in devices:"},{"line_number":1238,"context_line":"        # TODO(arata): get_gateway() returns only information about IPv4."},{"line_number":1239,"context_line":"        #              We need one about IPv6 if use_ipv6 is True."},{"line_number":1240,"context_line":"        gateway \u003d device.route.get_gateway()"},{"line_number":1241,"context_line":"        if not gateway:"},{"line_number":1242,"context_line":"            continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2Fn1k%3D","line":1239,"in_reply_to":"AAAAUH%2F%2FsvU%3D","updated":"2014-01-10 11:46:05.000000000","message":"Done","commit_id":"287be19e2f01c607d2ef86aacb96052d25d922ae"},{"author":{"_account_id":2711,"name":"Zhang Hua","display_name":"Zhang Hua","email":"joshua.zhang@canonical.com","username":"zhhuabj"},"change_message_id":"c6755133095b25594d26de465e57944d97abb260","unresolved":false,"context_lines":[{"line_number":1237,"context_line":"    for device in devices:"},{"line_number":1238,"context_line":"        # TODO(arata): get_gateway() returns only information about IPv4."},{"line_number":1239,"context_line":"        #              We need one about IPv6 if use_ipv6 is True."},{"line_number":1240,"context_line":"        gateway \u003d device.route.get_gateway()"},{"line_number":1241,"context_line":"        if not gateway:"},{"line_number":1242,"context_line":"            continue"},{"line_number":1243,"context_line":"        dev_metric \u003d gateway.get(\u0027metric\u0027, 0)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2Fsvg%3D","line":1240,"updated":"2014-01-09 13:56:11.000000000","message":"and actually, the get_gateway throws the exception because the line #396 in $neutron/agent/linux/ip_lib.py should be \"metric_index\u003d5\" rather than \"metric_index\u003d4\", bellow is the output of the command \" ip route list dev wlp3s0\" in my machine:\n$ ip route list dev wlp3s0\ndefault via 192.168.99.1  proto static \n192.168.99.0/24  proto kernel  scope link  src 192.168.99.103  metric 9\n\nhowever, unit test can\u0027t reflect above situation, if we need a unit test to cover this ?","commit_id":"287be19e2f01c607d2ef86aacb96052d25d922ae"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"1cffb733c06d892c31a96764ca95b7f9b11426ba","unresolved":false,"context_lines":[{"line_number":1237,"context_line":"    for device in devices:"},{"line_number":1238,"context_line":"        # TODO(arata): get_gateway() returns only information about IPv4."},{"line_number":1239,"context_line":"        #              We need one about IPv6 if use_ipv6 is True."},{"line_number":1240,"context_line":"        gateway \u003d device.route.get_gateway()"},{"line_number":1241,"context_line":"        if not gateway:"},{"line_number":1242,"context_line":"            continue"},{"line_number":1243,"context_line":"        dev_metric \u003d gateway.get(\u0027metric\u0027, 0)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2FoAc%3D","line":1240,"in_reply_to":"AAAAUH%2F%2Fsvg%3D","updated":"2014-01-10 11:13:28.000000000","message":"The issue will be fixed by another patch\n\nhttps://review.openstack.org/#/c/65917/","commit_id":"287be19e2f01c607d2ef86aacb96052d25d922ae"},{"author":{"_account_id":2711,"name":"Zhang Hua","display_name":"Zhang Hua","email":"joshua.zhang@canonical.com","username":"zhhuabj"},"change_message_id":"c6755133095b25594d26de465e57944d97abb260","unresolved":false,"context_lines":[{"line_number":1248,"context_line":"                addr.get(\u0027scope\u0027) !\u003d \u0027global\u0027):"},{"line_number":1249,"context_line":"                continue"},{"line_number":1250,"context_line":"            cidr \u003d addr.get(\u0027cidr\u0027, \u0027\u0027)"},{"line_number":1251,"context_line":"            address, slash, netmask \u003d cidr.partition(\u0027/\u0027)"},{"line_number":1252,"context_line":"            if not (address and slash and netmask):"},{"line_number":1253,"context_line":"                LOG.warning(_(\u0027Ignored an address of unexpected format: %s\u0027),"},{"line_number":1254,"context_line":"                            cidr)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2Fsq8%3D","line":1251,"updated":"2014-01-09 13:56:11.000000000","message":"cidr.partion(\u0027/\u0027) -\u003e netaddr.IPNetwork(addr.get(\u0027cidr\u0027)).ip","commit_id":"287be19e2f01c607d2ef86aacb96052d25d922ae"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"9842562ab565728e6de50af3263e3bf9f046da43","unresolved":false,"context_lines":[{"line_number":1248,"context_line":"                addr.get(\u0027scope\u0027) !\u003d \u0027global\u0027):"},{"line_number":1249,"context_line":"                continue"},{"line_number":1250,"context_line":"            cidr \u003d addr.get(\u0027cidr\u0027, \u0027\u0027)"},{"line_number":1251,"context_line":"            address, slash, netmask \u003d cidr.partition(\u0027/\u0027)"},{"line_number":1252,"context_line":"            if not (address and slash and netmask):"},{"line_number":1253,"context_line":"                LOG.warning(_(\u0027Ignored an address of unexpected format: %s\u0027),"},{"line_number":1254,"context_line":"                            cidr)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2Fn1g%3D","line":1251,"in_reply_to":"AAAAUH%2F%2Fsq8%3D","updated":"2014-01-10 11:46:05.000000000","message":"Done","commit_id":"287be19e2f01c607d2ef86aacb96052d25d922ae"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"f618b979912fb164ba3bb80d3e60a20d55e2e9be","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"            raise ValueError(msg)"},{"line_number":1289,"context_line":""},{"line_number":1290,"context_line":"    if kwargs[\u0027local_ip\u0027] \u003d\u003d \u0027auto\u0027:"},{"line_number":1291,"context_line":"        if kwargs[\u0027tunnel_types\u0027] and kwargs[\u0027local_ip\u0027] \u003d\u003d \u0027auto\u0027:"},{"line_number":1292,"context_line":"            auto_local_ip \u003d _get_local_ip_for_default_route()"},{"line_number":1293,"context_line":"            if not auto_local_ip:"},{"line_number":1294,"context_line":"                msg \u003d _(\u0027Cannot determine a value of local_ip automatically.\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FPnI%3D","line":1291,"updated":"2014-01-15 23:53:23.000000000","message":"nit: no need to test twice kwargs[\u0027local_ip\u0027] \u003d\u003d \u0027auto\u0027","commit_id":"bf3d1378de93b61fc20c1ef6f558127465d89482"}],"neutron/plugins/openvswitch/common/config.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"78546b39e2e997ed4d6ca666cedac4d4f056d218","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                      \"bridge\")),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027local_ip\u0027, default\u003d\u0027\u0027,"},{"line_number":42,"context_line":"               help\u003d_(\"Local IP address of GRE tunnel endpoints. If set it \""},{"line_number":43,"context_line":"                      \"to auto, the IPv4 address of the interface which is \""},{"line_number":44,"context_line":"                      \"connected to the default gateway is used.\")),"},{"line_number":45,"context_line":"    cfg.ListOpt(\u0027bridge_mappings\u0027,"},{"line_number":46,"context_line":"                default\u003dDEFAULT_BRIDGE_MAPPINGS,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F6Bs%3D","line":43,"updated":"2013-12-27 12:10:46.000000000","message":"nit: \u0027auto\u0027","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"0bf52811537142b2851d0a5da10a0138a43dbb0d","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                      \"bridge\")),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027local_ip\u0027, default\u003d\u0027\u0027,"},{"line_number":42,"context_line":"               help\u003d_(\"Local IP address of GRE tunnel endpoints. If set it \""},{"line_number":43,"context_line":"                      \"to auto, the IPv4 address of the interface which is \""},{"line_number":44,"context_line":"                      \"connected to the default gateway is used.\")),"},{"line_number":45,"context_line":"    cfg.ListOpt(\u0027bridge_mappings\u0027,"},{"line_number":46,"context_line":"                default\u003dDEFAULT_BRIDGE_MAPPINGS,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F5jE%3D","line":43,"in_reply_to":"AAAAT3%2F%2F6Bs%3D","updated":"2013-12-27 16:13:57.000000000","message":"Will do.","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"dac400268d1a7d9ff2b8d7b37064908b78656a90","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    cfg.StrOpt(\u0027tun_peer_patch_port\u0027, default\u003d\u0027patch-int\u0027,"},{"line_number":39,"context_line":"               help\u003d_(\"Peer patch port in tunnel bridge for integration \""},{"line_number":40,"context_line":"                      \"bridge\")),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027local_ip\u0027, default\u003d\u0027\u0027,"},{"line_number":42,"context_line":"               help\u003d_(\"Local IP address of GRE tunnel endpoints. If set it \""},{"line_number":43,"context_line":"                      \"to \u0027auto\u0027, the IPv4 address of the interface which is \""},{"line_number":44,"context_line":"                      \"connected to the default gateway is used.\")),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Fh7U%3D","line":41,"updated":"2014-01-12 13:38:29.000000000","message":"why don\u0027t you set local_ip default value to \u0027auto\u0027 ?","commit_id":"4a7d7ac9fe66f1ecdddc35f1acfbf47081f4c27e"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"1d4d202a4864be9ae016074a3ef390bd4d9740b8","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    cfg.StrOpt(\u0027tun_peer_patch_port\u0027, default\u003d\u0027patch-int\u0027,"},{"line_number":39,"context_line":"               help\u003d_(\"Peer patch port in tunnel bridge for integration \""},{"line_number":40,"context_line":"                      \"bridge\")),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027local_ip\u0027, default\u003d\u0027\u0027,"},{"line_number":42,"context_line":"               help\u003d_(\"Local IP address of GRE tunnel endpoints. If set it \""},{"line_number":43,"context_line":"                      \"to \u0027auto\u0027, the IPv4 address of the interface which is \""},{"line_number":44,"context_line":"                      \"connected to the default gateway is used.\")),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FSag%3D","line":41,"in_reply_to":"AAAAUH%2F%2Fh7U%3D","updated":"2014-01-15 13:09:36.000000000","message":"Done","commit_id":"4a7d7ac9fe66f1ecdddc35f1acfbf47081f4c27e"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"dac400268d1a7d9ff2b8d7b37064908b78656a90","unresolved":false,"context_lines":[{"line_number":39,"context_line":"               help\u003d_(\"Peer patch port in tunnel bridge for integration \""},{"line_number":40,"context_line":"                      \"bridge\")),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027local_ip\u0027, default\u003d\u0027\u0027,"},{"line_number":42,"context_line":"               help\u003d_(\"Local IP address of GRE tunnel endpoints. If set it \""},{"line_number":43,"context_line":"                      \"to \u0027auto\u0027, the IPv4 address of the interface which is \""},{"line_number":44,"context_line":"                      \"connected to the default gateway is used.\")),"},{"line_number":45,"context_line":"    cfg.BoolOpt(\u0027local_ip_auto_ipv6\u0027, default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2Fh6s%3D","line":42,"updated":"2014-01-12 13:38:29.000000000","message":"Not linked to your change but if i remember well, local_ip is used as endpoint for GRE and VXLAN tunnels so if you can correct the help message.","commit_id":"4a7d7ac9fe66f1ecdddc35f1acfbf47081f4c27e"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"1d4d202a4864be9ae016074a3ef390bd4d9740b8","unresolved":false,"context_lines":[{"line_number":39,"context_line":"               help\u003d_(\"Peer patch port in tunnel bridge for integration \""},{"line_number":40,"context_line":"                      \"bridge\")),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027local_ip\u0027, default\u003d\u0027\u0027,"},{"line_number":42,"context_line":"               help\u003d_(\"Local IP address of GRE tunnel endpoints. If set it \""},{"line_number":43,"context_line":"                      \"to \u0027auto\u0027, the IPv4 address of the interface which is \""},{"line_number":44,"context_line":"                      \"connected to the default gateway is used.\")),"},{"line_number":45,"context_line":"    cfg.BoolOpt(\u0027local_ip_auto_ipv6\u0027, default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2FSak%3D","line":42,"in_reply_to":"AAAAUH%2F%2Fh6s%3D","updated":"2014-01-15 13:09:36.000000000","message":"Done","commit_id":"4a7d7ac9fe66f1ecdddc35f1acfbf47081f4c27e"}],"neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"78546b39e2e997ed4d6ca666cedac4d4f056d218","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                         [p_const.TYPE_GRE, p_const.TYPE_VXLAN])"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def test_create_agent_config_map_auto_local_ip(self):"},{"line_number":89,"context_line":"        self.addCleanup(cfg.CONF.reset)"},{"line_number":90,"context_line":"        cfg.CONF.set_override(\u0027local_ip\u0027, \u0027auto\u0027, group\u003d\u0027OVS\u0027)"},{"line_number":91,"context_line":"        with mock.patch(\u0027neutron.plugins.openvswitch.agent.ovs_neutron_agent.\u0027"},{"line_number":92,"context_line":"                        \u0027_get_local_ip_for_default_route\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F6Bo%3D","line":89,"updated":"2013-12-27 12:10:46.000000000","message":"not needed: base.BaseTestCase already has it","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"0bf52811537142b2851d0a5da10a0138a43dbb0d","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                         [p_const.TYPE_GRE, p_const.TYPE_VXLAN])"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def test_create_agent_config_map_auto_local_ip(self):"},{"line_number":89,"context_line":"        self.addCleanup(cfg.CONF.reset)"},{"line_number":90,"context_line":"        cfg.CONF.set_override(\u0027local_ip\u0027, \u0027auto\u0027, group\u003d\u0027OVS\u0027)"},{"line_number":91,"context_line":"        with mock.patch(\u0027neutron.plugins.openvswitch.agent.ovs_neutron_agent.\u0027"},{"line_number":92,"context_line":"                        \u0027_get_local_ip_for_default_route\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F5i8%3D","line":89,"in_reply_to":"AAAAT3%2F%2F6Bo%3D","updated":"2013-12-27 16:13:57.000000000","message":"Will do","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"78546b39e2e997ed4d6ca666cedac4d4f056d218","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                        \u0027_get_local_ip_for_default_route\u0027,"},{"line_number":93,"context_line":"                        return_value\u003d\u002710.11.12.13\u0027):"},{"line_number":94,"context_line":"            cfgmap \u003d ovs_neutron_agent.create_agent_config_map(cfg.CONF)"},{"line_number":95,"context_line":"        self.assertEqual(cfgmap[\u0027local_ip\u0027], \u002710.11.12.13\u0027)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def test_create_agent_config_map_auto_local_ip_fail(self):"},{"line_number":98,"context_line":"        self.addCleanup(cfg.CONF.reset)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F6BA%3D","line":95,"updated":"2013-12-27 12:10:46.000000000","message":"nit: please put expected result as a first parameter of assertEqual() for the proper error message in case of failure","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"0bf52811537142b2851d0a5da10a0138a43dbb0d","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                        \u0027_get_local_ip_for_default_route\u0027,"},{"line_number":93,"context_line":"                        return_value\u003d\u002710.11.12.13\u0027):"},{"line_number":94,"context_line":"            cfgmap \u003d ovs_neutron_agent.create_agent_config_map(cfg.CONF)"},{"line_number":95,"context_line":"        self.assertEqual(cfgmap[\u0027local_ip\u0027], \u002710.11.12.13\u0027)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def test_create_agent_config_map_auto_local_ip_fail(self):"},{"line_number":98,"context_line":"        self.addCleanup(cfg.CONF.reset)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F5i4%3D","line":95,"in_reply_to":"AAAAT3%2F%2F6BA%3D","updated":"2013-12-27 16:13:57.000000000","message":"Will do.","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"78546b39e2e997ed4d6ca666cedac4d4f056d218","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.assertEqual(cfgmap[\u0027local_ip\u0027], \u002710.11.12.13\u0027)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def test_create_agent_config_map_auto_local_ip_fail(self):"},{"line_number":98,"context_line":"        self.addCleanup(cfg.CONF.reset)"},{"line_number":99,"context_line":"        cfg.CONF.set_override(\u0027local_ip\u0027, \u0027auto\u0027, group\u003d\u0027OVS\u0027)"},{"line_number":100,"context_line":"        with mock.patch(\u0027neutron.plugins.openvswitch.agent.ovs_neutron_agent.\u0027"},{"line_number":101,"context_line":"                        \u0027_get_local_ip_for_default_route\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F6Bk%3D","line":98,"updated":"2013-12-27 12:10:46.000000000","message":"ditto","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"},{"author":{"_account_id":3068,"name":"Arata Notsu","email":"notsu@virtualtech.jp","username":"arata776"},"change_message_id":"0bf52811537142b2851d0a5da10a0138a43dbb0d","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.assertEqual(cfgmap[\u0027local_ip\u0027], \u002710.11.12.13\u0027)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def test_create_agent_config_map_auto_local_ip_fail(self):"},{"line_number":98,"context_line":"        self.addCleanup(cfg.CONF.reset)"},{"line_number":99,"context_line":"        cfg.CONF.set_override(\u0027local_ip\u0027, \u0027auto\u0027, group\u003d\u0027OVS\u0027)"},{"line_number":100,"context_line":"        with mock.patch(\u0027neutron.plugins.openvswitch.agent.ovs_neutron_agent.\u0027"},{"line_number":101,"context_line":"                        \u0027_get_local_ip_for_default_route\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAT3%2F%2F5iw%3D","line":98,"in_reply_to":"AAAAT3%2F%2F6Bk%3D","updated":"2013-12-27 16:13:57.000000000","message":"Will do","commit_id":"720867122746ad34a8ad204a88e34a5923166ab5"}]}
