)]}'
{"neutron/api/v2/attributes.py":[{"author":{"_account_id":13149,"name":"Dmytro Dovbii","email":"dmanddov@gmail.com","username":"Ddovbii"},"change_message_id":"94df640db0290696842f275eaed0f3096d973944","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    return msg"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"def _validate_ip_unicast_address(data, valid_values\u003dNone):"},{"line_number":248,"context_line":"    msg \u003d _validate_ip_address(data)"},{"line_number":249,"context_line":"    if msg:"},{"line_number":250,"context_line":"        return msg"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a1b2928_b67ddde9","line":247,"updated":"2016-04-11 07:50:09.000000000","message":"could you please add a doc string here? I see that most of the functions here have it. Let\u0027s follow this good practice:)","commit_id":"b3d68e37be7f5a42006fdaecd0fdac71f3b062a1"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"fcd0e80d9230663659f0ba14ca784ba91bcf24ff","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    return msg"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"def _validate_ip_unicast_address(data, valid_values\u003dNone):"},{"line_number":248,"context_line":"    msg \u003d _validate_ip_address(data)"},{"line_number":249,"context_line":"    if msg:"},{"line_number":250,"context_line":"        return msg"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a1b2928_984607be","line":247,"in_reply_to":"7a1b2928_b67ddde9","updated":"2016-04-11 10:36:23.000000000","message":"ok, thanks.","commit_id":"b3d68e37be7f5a42006fdaecd0fdac71f3b062a1"}],"neutron/extensions/flooding_vteps.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"bc5cf33ed2bd0897062e3ee80a7038be21a8b403","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from neutron._i18n import _"},{"line_number":18,"context_line":"from neutron.api.v2 import attributes as attr"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"VXLAN_PORT_MIN \u003d 256"},{"line_number":21,"context_line":"VXLAN_PORT_MAX \u003d 65535"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def _validate_ip_unicast_address(data, valid_values\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_d57eeb68","line":21,"range":{"start_line":20,"start_character":0,"end_line":21,"end_character":22},"updated":"2016-04-20 06:29:19.000000000","message":"Are these constant related to the configuration \"vni_ranges\" under [ml2_type_vxlan] in the ml2 configuration?","commit_id":"d50cba7bd90630efb108efb7a66f2f8437a72c78"},{"author":{"_account_id":17609,"name":"steve","email":"ruansx@cn.ibm.com","username":"steve.ruan"},"change_message_id":"e00f87083080be5f43142a28d7b3630f4579e408","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from neutron._i18n import _"},{"line_number":18,"context_line":"from neutron.api.v2 import attributes as attr"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"VXLAN_PORT_MIN \u003d 256"},{"line_number":21,"context_line":"VXLAN_PORT_MAX \u003d 65535"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def _validate_ip_unicast_address(data, valid_values\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_3fb9f979","line":21,"range":{"start_line":20,"start_character":0,"end_line":21,"end_character":22},"in_reply_to":"1a122d0e_1fd23d5c","updated":"2016-04-20 08:07:16.000000000","message":"Since port number is configured by Cloud Operator, suggest the _MIN to be 1","commit_id":"d50cba7bd90630efb108efb7a66f2f8437a72c78"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"e4650bd141e987d7a9ac00974d050a262de4b632","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from neutron._i18n import _"},{"line_number":18,"context_line":"from neutron.api.v2 import attributes as attr"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"VXLAN_PORT_MIN \u003d 256"},{"line_number":21,"context_line":"VXLAN_PORT_MAX \u003d 65535"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def _validate_ip_unicast_address(data, valid_values\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_1fd23d5c","line":21,"range":{"start_line":20,"start_character":0,"end_line":21,"end_character":22},"in_reply_to":"1a122d0e_d57eeb68","updated":"2016-04-20 07:41:52.000000000","message":"No, the vni_ranges is for local vtep vxlan udp port number, the one I add is for remote vtep vxlan udp port number.","commit_id":"d50cba7bd90630efb108efb7a66f2f8437a72c78"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"bc5cf33ed2bd0897062e3ee80a7038be21a8b403","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    if msg:"},{"line_number":30,"context_line":"        return msg"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    ip \u003d netaddr.IPAddress(attr._validate_no_whitespace(data),"},{"line_number":33,"context_line":"                           flags\u003dnetaddr.core.ZEROFILL)"},{"line_number":34,"context_line":"    if not ip.is_unicast():"},{"line_number":35,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid unicast IP address\") % data"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_9a1e606e","line":32,"range":{"start_line":32,"start_character":27,"end_line":32,"end_character":61},"updated":"2016-04-20 06:29:19.000000000","message":"I think this has been validated in _validate_ip_address.","commit_id":"d50cba7bd90630efb108efb7a66f2f8437a72c78"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"e4650bd141e987d7a9ac00974d050a262de4b632","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    if msg:"},{"line_number":30,"context_line":"        return msg"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    ip \u003d netaddr.IPAddress(attr._validate_no_whitespace(data),"},{"line_number":33,"context_line":"                           flags\u003dnetaddr.core.ZEROFILL)"},{"line_number":34,"context_line":"    if not ip.is_unicast():"},{"line_number":35,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid unicast IP address\") % data"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_3f445919","line":32,"range":{"start_line":32,"start_character":27,"end_line":32,"end_character":61},"in_reply_to":"1a122d0e_9a1e606e","updated":"2016-04-20 07:41:52.000000000","message":"ok, thanks. Will update in next patch.","commit_id":"d50cba7bd90630efb108efb7a66f2f8437a72c78"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"bc5cf33ed2bd0897062e3ee80a7038be21a8b403","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def _validate_provider_flooding_vteps(data, valid_values\u003dNone):"},{"line_number":40,"context_line":"    \"\"\"Validate that the provider flooding vtep is a list, and each"},{"line_number":41,"context_line":"    member is ip unicast address or (ip unicast address, vxlan port"},{"line_number":42,"context_line":"    number) tuple."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":"    unique_check \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_d5438b11","line":42,"range":{"start_line":40,"start_character":63,"end_line":42,"end_character":18},"updated":"2016-04-20 06:29:19.000000000","message":"Is this still the real case? I asked this because from the code below, the only possibility is a dict with \u0027ip_address\u0027 and \u0027dstport\u0027 as keys.","commit_id":"d50cba7bd90630efb108efb7a66f2f8437a72c78"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"e4650bd141e987d7a9ac00974d050a262de4b632","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def _validate_provider_flooding_vteps(data, valid_values\u003dNone):"},{"line_number":40,"context_line":"    \"\"\"Validate that the provider flooding vtep is a list, and each"},{"line_number":41,"context_line":"    member is ip unicast address or (ip unicast address, vxlan port"},{"line_number":42,"context_line":"    number) tuple."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":"    unique_check \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_bf5069d5","line":42,"range":{"start_line":40,"start_character":63,"end_line":42,"end_character":18},"in_reply_to":"1a122d0e_d5438b11","updated":"2016-04-20 07:41:52.000000000","message":"yes, the \u0027dstport\u0027 is optional.","commit_id":"d50cba7bd90630efb108efb7a66f2f8437a72c78"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"bc5cf33ed2bd0897062e3ee80a7038be21a8b403","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        ip_address \u003d flooding_vtep[\u0027ip_address\u0027]"},{"line_number":58,"context_line":"        dst_port \u003d flooding_vtep.get(\u0027dstport\u0027)"},{"line_number":59,"context_line":"        if (ip_address, dst_port) not in unique_check:"},{"line_number":60,"context_line":"            unique_check[(ip_address, dst_port)] \u003d None"},{"line_number":61,"context_line":"        else:"},{"line_number":62,"context_line":"            msg \u003d _(\"Duplicate flooding VTEP: %s\") % ip_address"},{"line_number":63,"context_line":"            return msg"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_154a2326","line":60,"range":{"start_line":59,"start_character":41,"end_line":60,"end_character":55},"updated":"2016-04-20 06:29:19.000000000","message":"You could just use a set to see if there is duplication.","commit_id":"d50cba7bd90630efb108efb7a66f2f8437a72c78"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"e4650bd141e987d7a9ac00974d050a262de4b632","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        ip_address \u003d flooding_vtep[\u0027ip_address\u0027]"},{"line_number":58,"context_line":"        dst_port \u003d flooding_vtep.get(\u0027dstport\u0027)"},{"line_number":59,"context_line":"        if (ip_address, dst_port) not in unique_check:"},{"line_number":60,"context_line":"            unique_check[(ip_address, dst_port)] \u003d None"},{"line_number":61,"context_line":"        else:"},{"line_number":62,"context_line":"            msg \u003d _(\"Duplicate flooding VTEP: %s\") % ip_address"},{"line_number":63,"context_line":"            return msg"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_ff64a1b9","line":60,"range":{"start_line":59,"start_character":41,"end_line":60,"end_character":55},"in_reply_to":"1a122d0e_154a2326","updated":"2016-04-20 07:41:52.000000000","message":"ok, thanks. Will update in next patch.","commit_id":"d50cba7bd90630efb108efb7a66f2f8437a72c78"},{"author":{"_account_id":17609,"name":"steve","email":"ruansx@cn.ibm.com","username":"steve.ruan"},"change_message_id":"e00f87083080be5f43142a28d7b3630f4579e408","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        ip_address \u003d flooding_vtep[\u0027ip_address\u0027]"},{"line_number":58,"context_line":"        dst_port \u003d flooding_vtep.get(\u0027dstport\u0027)"},{"line_number":59,"context_line":"        if (ip_address, dst_port) not in unique_check:"},{"line_number":60,"context_line":"            unique_check[(ip_address, dst_port)] \u003d None"},{"line_number":61,"context_line":"        else:"},{"line_number":62,"context_line":"            msg \u003d _(\"Duplicate flooding VTEP: %s\") % ip_address"},{"line_number":63,"context_line":"            return msg"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_42121e0a","line":60,"range":{"start_line":59,"start_character":41,"end_line":60,"end_character":55},"in_reply_to":"1a122d0e_ff64a1b9","updated":"2016-04-20 08:07:16.000000000","message":"Suggest ONLY validate the duplicated \u0027ip_address\u0027.","commit_id":"d50cba7bd90630efb108efb7a66f2f8437a72c78"}]}
