)]}'
{"dragonflow/controller/common/utils.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e1df56764c587ba4e4dd898347909f265007bd72","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    zone \u003d filter.get(\u0027zone_id\u0027)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    cmd \u003d [\u0027conntrack\u0027, \u0027-D\u0027]"},{"line_number":63,"context_line":"    if protocol:"},{"line_number":64,"context_line":"        cmd.extend([\u0027-p\u0027, str(protocol)])"},{"line_number":65,"context_line":"    cmd.extend([\u0027-f\u0027, str(ethertype).lower()])"},{"line_number":66,"context_line":"    if nw_src:"},{"line_number":67,"context_line":"        cmd.extend([\u0027-s\u0027, str(nw_src)])"},{"line_number":68,"context_line":"    if nw_dst:"},{"line_number":69,"context_line":"        cmd.extend([\u0027-d\u0027, str(nw_dst)])"},{"line_number":70,"context_line":"    if zone:"},{"line_number":71,"context_line":"        cmd.extend([\u0027-w\u0027, str(zone)])"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    try:"},{"line_number":74,"context_line":"        linux_utils.execute(cmd, run_as_root\u003dTrue, check_exit_code\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_90851aaf","line":71,"range":{"start_line":63,"start_character":0,"end_line":71,"end_character":37},"updated":"2016-11-04 14:54:13.000000000","message":"Aren\u0027t these attributes already be string? Is it necessary to convert them to string again?","commit_id":"27d03a50ed6c3b4325bb2a76d358397e31d36c0e"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"bb8a77a78722dc274b1e161b0da49f185f1b9c3f","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    zone \u003d filter.get(\u0027zone_id\u0027)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    cmd \u003d [\u0027conntrack\u0027, \u0027-D\u0027]"},{"line_number":63,"context_line":"    if protocol:"},{"line_number":64,"context_line":"        cmd.extend([\u0027-p\u0027, str(protocol)])"},{"line_number":65,"context_line":"    cmd.extend([\u0027-f\u0027, str(ethertype).lower()])"},{"line_number":66,"context_line":"    if nw_src:"},{"line_number":67,"context_line":"        cmd.extend([\u0027-s\u0027, str(nw_src)])"},{"line_number":68,"context_line":"    if nw_dst:"},{"line_number":69,"context_line":"        cmd.extend([\u0027-d\u0027, str(nw_dst)])"},{"line_number":70,"context_line":"    if zone:"},{"line_number":71,"context_line":"        cmd.extend([\u0027-w\u0027, str(zone)])"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    try:"},{"line_number":74,"context_line":"        linux_utils.execute(cmd, run_as_root\u003dTrue, check_exit_code\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_0fdb8bee","line":71,"range":{"start_line":63,"start_character":0,"end_line":71,"end_character":37},"in_reply_to":"ba5da102_90851aaf","updated":"2016-11-07 01:41:25.000000000","message":"Done","commit_id":"27d03a50ed6c3b4325bb2a76d358397e31d36c0e"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"c5ee883ac6239e62286b9bc544df09925b4f45ba","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    zone \u003d filter.get(\u0027zone_id\u0027)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    cmd \u003d [\u0027conntrack\u0027, \u0027-D\u0027]"},{"line_number":63,"context_line":"    if protocol:"},{"line_number":64,"context_line":"        cmd.extend([\u0027-p\u0027, str(protocol)])"},{"line_number":65,"context_line":"    cmd.extend([\u0027-f\u0027, str(ethertype).lower()])"},{"line_number":66,"context_line":"    if nw_src:"},{"line_number":67,"context_line":"        cmd.extend([\u0027-s\u0027, str(nw_src)])"},{"line_number":68,"context_line":"    if nw_dst:"},{"line_number":69,"context_line":"        cmd.extend([\u0027-d\u0027, str(nw_dst)])"},{"line_number":70,"context_line":"    if zone:"},{"line_number":71,"context_line":"        cmd.extend([\u0027-w\u0027, str(zone)])"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    try:"},{"line_number":74,"context_line":"        linux_utils.execute(cmd, run_as_root\u003dTrue, check_exit_code\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_c040800a","line":71,"range":{"start_line":63,"start_character":0,"end_line":71,"end_character":37},"in_reply_to":"ba5da102_90851aaf","updated":"2016-11-07 05:23:07.000000000","message":"In deep inspection, the protocol and zone_id could be a number than a str, so I will remain those two attribute converted to str when others removed.","commit_id":"27d03a50ed6c3b4325bb2a76d358397e31d36c0e"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e1df56764c587ba4e4dd898347909f265007bd72","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    try:"},{"line_number":74,"context_line":"        linux_utils.execute(cmd, run_as_root\u003dTrue, check_exit_code\u003dTrue,"},{"line_number":75,"context_line":"                            extra_ok_codes\u003d[1])"},{"line_number":76,"context_line":"        LOG.info(_LI(\"Succeed execute conntrack command %s\"), cmd)"},{"line_number":77,"context_line":"    except RuntimeError:"},{"line_number":78,"context_line":"        LOG.exception(_LE(\"Failed execute conntrack command %s\"), cmd)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_d02b1293","line":76,"range":{"start_line":76,"start_character":22,"end_line":76,"end_character":29},"updated":"2016-11-04 14:54:13.000000000","message":"Successfully?","commit_id":"27d03a50ed6c3b4325bb2a76d358397e31d36c0e"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e1df56764c587ba4e4dd898347909f265007bd72","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    try:"},{"line_number":74,"context_line":"        linux_utils.execute(cmd, run_as_root\u003dTrue, check_exit_code\u003dTrue,"},{"line_number":75,"context_line":"                            extra_ok_codes\u003d[1])"},{"line_number":76,"context_line":"        LOG.info(_LI(\"Succeed execute conntrack command %s\"), cmd)"},{"line_number":77,"context_line":"    except RuntimeError:"},{"line_number":78,"context_line":"        LOG.exception(_LE(\"Failed execute conntrack command %s\"), cmd)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_f048168d","line":76,"range":{"start_line":76,"start_character":8,"end_line":76,"end_character":20},"updated":"2016-11-04 14:54:13.000000000","message":"nit: I think this is something that need to be in debug.","commit_id":"27d03a50ed6c3b4325bb2a76d358397e31d36c0e"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"bb8a77a78722dc274b1e161b0da49f185f1b9c3f","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    try:"},{"line_number":74,"context_line":"        linux_utils.execute(cmd, run_as_root\u003dTrue, check_exit_code\u003dTrue,"},{"line_number":75,"context_line":"                            extra_ok_codes\u003d[1])"},{"line_number":76,"context_line":"        LOG.info(_LI(\"Succeed execute conntrack command %s\"), cmd)"},{"line_number":77,"context_line":"    except RuntimeError:"},{"line_number":78,"context_line":"        LOG.exception(_LE(\"Failed execute conntrack command %s\"), cmd)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_2fd84fef","line":76,"range":{"start_line":76,"start_character":22,"end_line":76,"end_character":29},"in_reply_to":"ba5da102_d02b1293","updated":"2016-11-07 01:41:25.000000000","message":"Done","commit_id":"27d03a50ed6c3b4325bb2a76d358397e31d36c0e"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"bb8a77a78722dc274b1e161b0da49f185f1b9c3f","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    try:"},{"line_number":74,"context_line":"        linux_utils.execute(cmd, run_as_root\u003dTrue, check_exit_code\u003dTrue,"},{"line_number":75,"context_line":"                            extra_ok_codes\u003d[1])"},{"line_number":76,"context_line":"        LOG.info(_LI(\"Succeed execute conntrack command %s\"), cmd)"},{"line_number":77,"context_line":"    except RuntimeError:"},{"line_number":78,"context_line":"        LOG.exception(_LE(\"Failed execute conntrack command %s\"), cmd)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_4fe583a6","line":76,"range":{"start_line":76,"start_character":8,"end_line":76,"end_character":20},"in_reply_to":"ba5da102_f048168d","updated":"2016-11-07 01:41:25.000000000","message":"Done","commit_id":"27d03a50ed6c3b4325bb2a76d358397e31d36c0e"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"0a2148260e3f78f07c3f15a2b279cb40c3d19e7e","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from dragonflow.common import exceptions"},{"line_number":21,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":24,"context_line":"UINT32_MAX \u003d 0xffffffff"},{"line_number":25,"context_line":"_aging_cookie \u003d 0"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_da486f8a","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":29},"updated":"2016-11-07 02:50:03.000000000","message":"insert a space line","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"e76ef3f2e3c38271928ac98fb5e334d77554dbf0","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from dragonflow.common import exceptions"},{"line_number":21,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":24,"context_line":"UINT32_MAX \u003d 0xffffffff"},{"line_number":25,"context_line":"_aging_cookie \u003d 0"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_20485c2d","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":29},"in_reply_to":"ba5da102_da486f8a","updated":"2016-11-07 05:22:56.000000000","message":"Done","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"0b1790d44608e8fa85fe7fcfe58bcf026eff6bbd","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def delete_conntrack_entries_by_filter(filter):"},{"line_number":57,"context_line":"    ethertype \u003d filter.get(\u0027ethertype\u0027)"},{"line_number":58,"context_line":"    protocol \u003d filter.get(\u0027protocol\u0027)"},{"line_number":59,"context_line":"    nw_src \u003d filter.get(\u0027nw_src\u0027)"},{"line_number":60,"context_line":"    nw_dst \u003d filter.get(\u0027nw_dst\u0027)"},{"line_number":61,"context_line":"    zone \u003d filter.get(\u0027zone_id\u0027)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    cmd \u003d [\u0027conntrack\u0027, \u0027-D\u0027]"},{"line_number":64,"context_line":"    if protocol:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_289e6cb8","line":61,"range":{"start_line":57,"start_character":4,"end_line":61,"end_character":32},"updated":"2016-11-22 13:17:05.000000000","message":"you can save the LOC here and use filter.get(xxx) directly below","commit_id":"d8b73df21dd3661634264f664f00dd434c2c3230"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"9010a3b6b1161e64e5070723956d972dad00fd6f","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def delete_conntrack_entries_by_filter(filter):"},{"line_number":57,"context_line":"    ethertype \u003d filter.get(\u0027ethertype\u0027)"},{"line_number":58,"context_line":"    protocol \u003d filter.get(\u0027protocol\u0027)"},{"line_number":59,"context_line":"    nw_src \u003d filter.get(\u0027nw_src\u0027)"},{"line_number":60,"context_line":"    nw_dst \u003d filter.get(\u0027nw_dst\u0027)"},{"line_number":61,"context_line":"    zone \u003d filter.get(\u0027zone_id\u0027)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    cmd \u003d [\u0027conntrack\u0027, \u0027-D\u0027]"},{"line_number":64,"context_line":"    if protocol:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_a4671c24","line":61,"range":{"start_line":57,"start_character":4,"end_line":61,"end_character":32},"in_reply_to":"7a77a97e_289e6cb8","updated":"2016-12-09 01:48:40.000000000","message":"Those values will be used twice, so use a local variable to save filter.get(xxx) may also reasonable. But I will move those lines to where just before they are used, that may make they more readable.","commit_id":"d8b73df21dd3661634264f664f00dd434c2c3230"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"0b1790d44608e8fa85fe7fcfe58bcf026eff6bbd","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    cmd \u003d [\u0027conntrack\u0027, \u0027-D\u0027]"},{"line_number":64,"context_line":"    if protocol:"},{"line_number":65,"context_line":"        cmd.extend([\u0027-p\u0027, str(protocol)])"},{"line_number":66,"context_line":"    cmd.extend([\u0027-f\u0027, ethertype.lower()])"},{"line_number":67,"context_line":"    if nw_src:"},{"line_number":68,"context_line":"        cmd.extend([\u0027-s\u0027, nw_src])"},{"line_number":69,"context_line":"    if nw_dst:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_c84b3858","line":66,"range":{"start_line":66,"start_character":4,"end_line":66,"end_character":41},"updated":"2016-11-22 13:17:05.000000000","message":"why not judge ethertype not None?","commit_id":"d8b73df21dd3661634264f664f00dd434c2c3230"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"9010a3b6b1161e64e5070723956d972dad00fd6f","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    cmd \u003d [\u0027conntrack\u0027, \u0027-D\u0027]"},{"line_number":64,"context_line":"    if protocol:"},{"line_number":65,"context_line":"        cmd.extend([\u0027-p\u0027, str(protocol)])"},{"line_number":66,"context_line":"    cmd.extend([\u0027-f\u0027, ethertype.lower()])"},{"line_number":67,"context_line":"    if nw_src:"},{"line_number":68,"context_line":"        cmd.extend([\u0027-s\u0027, nw_src])"},{"line_number":69,"context_line":"    if nw_dst:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_73c5cc59","line":66,"range":{"start_line":66,"start_character":4,"end_line":66,"end_character":41},"in_reply_to":"7a77a97e_c84b3858","updated":"2016-12-09 01:48:40.000000000","message":"There is always a ethertype in a security group rule. If a user doesn\u0027t sepecifed a ethertype when creating a rule, then the ethertype will be IPv4, and this transformation occurred before that rule pass to ml2 plugin.","commit_id":"d8b73df21dd3661634264f664f00dd434c2c3230"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"a9bc895bd6e7acd7749bc3c679262e6bac19f3cc","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from neutron.agent.linux import utils as linux_utils"},{"line_number":16,"context_line":"from oslo_config import cfg"},{"line_number":17,"context_line":"from oslo_log import log"},{"line_number":18,"context_line":"from ryu.lib import addrconv"}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_e282a293","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":52},"updated":"2016-12-26 01:23:03.000000000","message":"It is recommended to use \n\n\"from neutron.agent.common import utils\", which can also work in the nt(windows) platform","commit_id":"510d21f7421d13089201a59e0a6fbd4789e89f44"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"263d7785b1d9800f23764f5aa2f5e533fad000f1","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from neutron.agent.linux import utils as linux_utils"},{"line_number":16,"context_line":"from oslo_config import cfg"},{"line_number":17,"context_line":"from oslo_log import log"},{"line_number":18,"context_line":"from ryu.lib import addrconv"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba5201f7_5e554f1b","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":52},"in_reply_to":"da4df55a_e282a293","updated":"2017-01-10 08:03:20.000000000","message":"Done","commit_id":"510d21f7421d13089201a59e0a6fbd4789e89f44"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"0606987b065a18daa9de3b0ff09847ea587bbf5d","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from neutron.agent.linux import utils as linux_utils"},{"line_number":16,"context_line":"from oslo_config import cfg"},{"line_number":17,"context_line":"from oslo_log import log"},{"line_number":18,"context_line":"from ryu.lib import addrconv"},{"line_number":19,"context_line":"import struct"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from dragonflow._i18n import _LE"},{"line_number":22,"context_line":"from dragonflow.common import exceptions"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba5201f7_184afe83","line":19,"range":{"start_line":16,"start_character":0,"end_line":19,"end_character":13},"updated":"2017-01-02 13:52:29.000000000","message":"nit: maybe you could re-organize the order \nhttp://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"510d21f7421d13089201a59e0a6fbd4789e89f44"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"263d7785b1d9800f23764f5aa2f5e533fad000f1","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from neutron.agent.linux import utils as linux_utils"},{"line_number":16,"context_line":"from oslo_config import cfg"},{"line_number":17,"context_line":"from oslo_log import log"},{"line_number":18,"context_line":"from ryu.lib import addrconv"},{"line_number":19,"context_line":"import struct"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from dragonflow._i18n import _LE"},{"line_number":22,"context_line":"from dragonflow.common import exceptions"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba5201f7_7e305308","line":19,"range":{"start_line":16,"start_character":0,"end_line":19,"end_character":13},"in_reply_to":"ba5201f7_184afe83","updated":"2017-01-10 08:03:20.000000000","message":"Done","commit_id":"510d21f7421d13089201a59e0a6fbd4789e89f44"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"96069d7987131cb21f0952c9f80a141c0af809d4","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    return False"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def delete_conntrack_entries_by_filter(filter):"},{"line_number":68,"context_line":"    cmd \u003d [\u0027conntrack\u0027, \u0027-D\u0027]"},{"line_number":69,"context_line":"    protocol \u003d filter.get(\u0027protocol\u0027)"},{"line_number":70,"context_line":"    if protocol:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_79c4d091","line":67,"updated":"2017-01-10 17:25:38.000000000","message":"nit: Why not make all the arguments optional, rather than pass a dictionary?","commit_id":"4a01e0d0a231887c2ba15c86e640a498720996df"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"c1886c541cf7d323977e0ffc47180f4e673670eb","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    return False"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def delete_conntrack_entries_by_filter(filter):"},{"line_number":68,"context_line":"    cmd \u003d [\u0027conntrack\u0027, \u0027-D\u0027]"},{"line_number":69,"context_line":"    protocol \u003d filter.get(\u0027protocol\u0027)"},{"line_number":70,"context_line":"    if protocol:"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a3c09a3_651321b9","line":67,"in_reply_to":"ba5201f7_79c4d091","updated":"2017-01-16 13:50:59.000000000","message":"great, that will be more clear:)","commit_id":"4a01e0d0a231887c2ba15c86e640a498720996df"}],"dragonflow/controller/sg_app.py":[{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"0a2148260e3f78f07c3f15a2b279cb40c3d19e7e","unresolved":false,"context_lines":[{"line_number":975,"context_line":"        self._install_security_group_rule_flows("},{"line_number":976,"context_line":"                secgroup.get_id(), secgroup_rule)"},{"line_number":977,"context_line":""},{"line_number":978,"context_line":"        # delete conntrack entities by rule"},{"line_number":979,"context_line":"        self._delete_conntrack_entries_by_rule(secgroup_rule)"},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"    def remove_security_group_rule(self, secgroup, secgroup_rule):"},{"line_number":982,"context_line":"        LOG.info(_LI(\"remove a rule %(rule)s to security group %(secgroup)s\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_daecef91","line":979,"range":{"start_line":978,"start_character":8,"end_line":979,"end_character":61},"updated":"2016-11-07 02:50:03.000000000","message":"would you please tell me why to delete ct entries when add a sg rule? Another question: why put the delete operation after the install flows?","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"fdea1284d13a0ce89fb5904a2396f4a097e6d504","unresolved":false,"context_lines":[{"line_number":975,"context_line":"        self._install_security_group_rule_flows("},{"line_number":976,"context_line":"                secgroup.get_id(), secgroup_rule)"},{"line_number":977,"context_line":""},{"line_number":978,"context_line":"        # delete conntrack entities by rule"},{"line_number":979,"context_line":"        self._delete_conntrack_entries_by_rule(secgroup_rule)"},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"    def remove_security_group_rule(self, secgroup, secgroup_rule):"},{"line_number":982,"context_line":"        LOG.info(_LI(\"remove a rule %(rule)s to security group %(secgroup)s\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_153c782e","line":979,"range":{"start_line":978,"start_character":8,"end_line":979,"end_character":61},"in_reply_to":"ba5da102_daecef91","updated":"2016-11-07 03:28:47.000000000","message":"+1","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"e76ef3f2e3c38271928ac98fb5e334d77554dbf0","unresolved":false,"context_lines":[{"line_number":975,"context_line":"        self._install_security_group_rule_flows("},{"line_number":976,"context_line":"                secgroup.get_id(), secgroup_rule)"},{"line_number":977,"context_line":""},{"line_number":978,"context_line":"        # delete conntrack entities by rule"},{"line_number":979,"context_line":"        self._delete_conntrack_entries_by_rule(secgroup_rule)"},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"    def remove_security_group_rule(self, secgroup, secgroup_rule):"},{"line_number":982,"context_line":"        LOG.info(_LI(\"remove a rule %(rule)s to security group %(secgroup)s\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_fbcd3587","line":979,"range":{"start_line":978,"start_character":8,"end_line":979,"end_character":61},"in_reply_to":"ba5da102_daecef91","updated":"2016-11-07 05:22:56.000000000","message":"1. When SG configuration changed, those old connections may not match SG rules any more, but packets of those old connections can pass the check of SG because they have a established ct_state. To avoid this, we should clear connection track entries to push those packets to the check of SG again.\n2. If we delete entries before we update the flows, between the gap of time, packets of old connections will still be able to pass the check of SG by matching the old rules, and turn to establish ct_state.","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"563628dd0a830023fd725ea8bd75053ab34466f3","unresolved":false,"context_lines":[{"line_number":975,"context_line":"        self._install_security_group_rule_flows("},{"line_number":976,"context_line":"                secgroup.get_id(), secgroup_rule)"},{"line_number":977,"context_line":""},{"line_number":978,"context_line":"        # delete conntrack entities by rule"},{"line_number":979,"context_line":"        self._delete_conntrack_entries_by_rule(secgroup_rule)"},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"    def remove_security_group_rule(self, secgroup, secgroup_rule):"},{"line_number":982,"context_line":"        LOG.info(_LI(\"remove a rule %(rule)s to security group %(secgroup)s\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_2b4b112d","line":979,"range":{"start_line":978,"start_character":8,"end_line":979,"end_character":61},"in_reply_to":"ba5da102_fbcd3587","updated":"2016-11-07 10:19:30.000000000","message":"I misunderstood this comment\u0027s meaning. ok, I will fix this.","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"0a2148260e3f78f07c3f15a2b279cb40c3d19e7e","unresolved":false,"context_lines":[{"line_number":1056,"context_line":"            associating_ports \u003d [self.db_store.get_port(port_id)"},{"line_number":1057,"context_line":"                                 for port_id in associating_port_ids]"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        if associating_ports:"},{"line_number":1060,"context_line":"            for port in associating_ports:"},{"line_number":1061,"context_line":"                if remote_address_list:"},{"line_number":1062,"context_line":"                    for remote_address in remote_address_list:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_1aad8731","line":1059,"range":{"start_line":1059,"start_character":8,"end_line":1059,"end_character":29},"updated":"2016-11-07 02:50:03.000000000","message":"delete the if because it is [] at least","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"fdea1284d13a0ce89fb5904a2396f4a097e6d504","unresolved":false,"context_lines":[{"line_number":1056,"context_line":"            associating_ports \u003d [self.db_store.get_port(port_id)"},{"line_number":1057,"context_line":"                                 for port_id in associating_port_ids]"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        if associating_ports:"},{"line_number":1060,"context_line":"            for port in associating_ports:"},{"line_number":1061,"context_line":"                if remote_address_list:"},{"line_number":1062,"context_line":"                    for remote_address in remote_address_list:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_95cb281e","line":1059,"range":{"start_line":1059,"start_character":8,"end_line":1059,"end_character":29},"in_reply_to":"ba5da102_1aad8731","updated":"2016-11-07 03:28:47.000000000","message":"+1 if there is no port, the code in for loop below will not be executed","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"e76ef3f2e3c38271928ac98fb5e334d77554dbf0","unresolved":false,"context_lines":[{"line_number":1056,"context_line":"            associating_ports \u003d [self.db_store.get_port(port_id)"},{"line_number":1057,"context_line":"                                 for port_id in associating_port_ids]"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        if associating_ports:"},{"line_number":1060,"context_line":"            for port in associating_ports:"},{"line_number":1061,"context_line":"                if remote_address_list:"},{"line_number":1062,"context_line":"                    for remote_address in remote_address_list:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_3b9fad60","line":1059,"range":{"start_line":1059,"start_character":8,"end_line":1059,"end_character":29},"in_reply_to":"ba5da102_1aad8731","updated":"2016-11-07 05:22:56.000000000","message":"Done","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"e76ef3f2e3c38271928ac98fb5e334d77554dbf0","unresolved":false,"context_lines":[{"line_number":1056,"context_line":"            associating_ports \u003d [self.db_store.get_port(port_id)"},{"line_number":1057,"context_line":"                                 for port_id in associating_port_ids]"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        if associating_ports:"},{"line_number":1060,"context_line":"            for port in associating_ports:"},{"line_number":1061,"context_line":"                if remote_address_list:"},{"line_number":1062,"context_line":"                    for remote_address in remote_address_list:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_5b9c6169","line":1059,"range":{"start_line":1059,"start_character":8,"end_line":1059,"end_character":29},"in_reply_to":"ba5da102_95cb281e","updated":"2016-11-07 05:22:56.000000000","message":"Done","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"0a2148260e3f78f07c3f15a2b279cb40c3d19e7e","unresolved":false,"context_lines":[{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        if associating_ports:"},{"line_number":1060,"context_line":"            for port in associating_ports:"},{"line_number":1061,"context_line":"                if remote_address_list:"},{"line_number":1062,"context_line":"                    for remote_address in remote_address_list:"},{"line_number":1063,"context_line":"                        entries_filter \u003d \\"},{"line_number":1064,"context_line":"                            self._get_delete_conntrack_entries_filter("}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_3aaa4b1a","line":1061,"range":{"start_line":1061,"start_character":19,"end_line":1061,"end_character":38},"updated":"2016-11-07 02:50:03.000000000","message":"ditto","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"e76ef3f2e3c38271928ac98fb5e334d77554dbf0","unresolved":false,"context_lines":[{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        if associating_ports:"},{"line_number":1060,"context_line":"            for port in associating_ports:"},{"line_number":1061,"context_line":"                if remote_address_list:"},{"line_number":1062,"context_line":"                    for remote_address in remote_address_list:"},{"line_number":1063,"context_line":"                        entries_filter \u003d \\"},{"line_number":1064,"context_line":"                            self._get_delete_conntrack_entries_filter("}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_dbeb11af","line":1061,"range":{"start_line":1061,"start_character":19,"end_line":1061,"end_character":38},"in_reply_to":"ba5da102_3aaa4b1a","updated":"2016-11-07 05:22:56.000000000","message":"There is no the same, because if remote_address_list is a empty list, the behind codes will be ran. I have changed this empty list to None for better showing this.","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"fdea1284d13a0ce89fb5904a2396f4a097e6d504","unresolved":false,"context_lines":[{"line_number":1077,"context_line":"            for rule in secgroup.get_rules():"},{"line_number":1078,"context_line":"                self._delete_conntrack_entries_by_rule(rule, filter_port\u003dlport)"},{"line_number":1079,"context_line":""},{"line_number":1080,"context_line":"    def _delete_conntrack_entries_by_remote_address(self, remote_address,"},{"line_number":1081,"context_line":"                                                    rule):"},{"line_number":1082,"context_line":"        self._delete_conntrack_entries_by_rule("},{"line_number":1083,"context_line":"            rule, filter_remote_address\u003dremote_address)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_f56c6438","line":1080,"updated":"2016-11-07 03:28:47.000000000","message":"will you really need this method?","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"e76ef3f2e3c38271928ac98fb5e334d77554dbf0","unresolved":false,"context_lines":[{"line_number":1077,"context_line":"            for rule in secgroup.get_rules():"},{"line_number":1078,"context_line":"                self._delete_conntrack_entries_by_rule(rule, filter_port\u003dlport)"},{"line_number":1079,"context_line":""},{"line_number":1080,"context_line":"    def _delete_conntrack_entries_by_remote_address(self, remote_address,"},{"line_number":1081,"context_line":"                                                    rule):"},{"line_number":1082,"context_line":"        self._delete_conntrack_entries_by_rule("},{"line_number":1083,"context_line":"            rule, filter_remote_address\u003dremote_address)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_db02316f","line":1080,"in_reply_to":"ba5da102_f56c6438","updated":"2016-11-07 05:22:56.000000000","message":"I think we could remain this inner method for a better understanding to the time of calling this method.","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"0b1790d44608e8fa85fe7fcfe58bcf026eff6bbd","unresolved":false,"context_lines":[{"line_number":1023,"context_line":"            remote_address_list \u003d None"},{"line_number":1024,"context_line":"            # Conntrack command only support to delete entries by specifying a"},{"line_number":1025,"context_line":"            # net address than a cidr, but the number of addresses transformed"},{"line_number":1026,"context_line":"            # from a remote group or a remote ip prefix could be quiet huge,"},{"line_number":1027,"context_line":"            # DF won\u0027t delete conntrack entries filtered by remote group or"},{"line_number":1028,"context_line":"            # remote ip prefix."},{"line_number":1029,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_53b99e78","line":1026,"range":{"start_line":1026,"start_character":65,"end_line":1026,"end_character":70},"updated":"2016-11-22 13:17:05.000000000","message":"quite","commit_id":"d8b73df21dd3661634264f664f00dd434c2c3230"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"9010a3b6b1161e64e5070723956d972dad00fd6f","unresolved":false,"context_lines":[{"line_number":1023,"context_line":"            remote_address_list \u003d None"},{"line_number":1024,"context_line":"            # Conntrack command only support to delete entries by specifying a"},{"line_number":1025,"context_line":"            # net address than a cidr, but the number of addresses transformed"},{"line_number":1026,"context_line":"            # from a remote group or a remote ip prefix could be quiet huge,"},{"line_number":1027,"context_line":"            # DF won\u0027t delete conntrack entries filtered by remote group or"},{"line_number":1028,"context_line":"            # remote ip prefix."},{"line_number":1029,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_2474eccd","line":1026,"range":{"start_line":1026,"start_character":65,"end_line":1026,"end_character":70},"in_reply_to":"7a77a97e_53b99e78","updated":"2016-12-09 01:48:40.000000000","message":"Done","commit_id":"d8b73df21dd3661634264f664f00dd434c2c3230"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"96069d7987131cb21f0952c9f80a141c0af809d4","unresolved":false,"context_lines":[{"line_number":1157,"context_line":"                    entries_filter_tmp[remote_match_mark] \u003d remote_address"},{"line_number":1158,"context_line":"                    entries_filter_list.append(entries_filter_tmp)"},{"line_number":1159,"context_line":"            else:"},{"line_number":1160,"context_line":"                entries_filter_list.append(entries_filter)"},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":"        return entries_filter_list"},{"line_number":1163,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_b95558c7","line":1160,"updated":"2017-01-10 17:25:38.000000000","message":"Maybe this code can be simplified by calling utils.delete_conntrack_entries_by_filter from here?","commit_id":"4a01e0d0a231887c2ba15c86e640a498720996df"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"c1886c541cf7d323977e0ffc47180f4e673670eb","unresolved":false,"context_lines":[{"line_number":1157,"context_line":"                    entries_filter_tmp[remote_match_mark] \u003d remote_address"},{"line_number":1158,"context_line":"                    entries_filter_list.append(entries_filter_tmp)"},{"line_number":1159,"context_line":"            else:"},{"line_number":1160,"context_line":"                entries_filter_list.append(entries_filter)"},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":"        return entries_filter_list"},{"line_number":1163,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7a3c09a3_852f2df5","line":1160,"in_reply_to":"ba5201f7_b95558c7","updated":"2017-01-16 13:50:59.000000000","message":"Done","commit_id":"4a01e0d0a231887c2ba15c86e640a498720996df"}],"dragonflow/tests/unit/test_sg_app.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e1df56764c587ba4e4dd898347909f265007bd72","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.security_group \u003d test_app_base.fake_security_group\r"},{"line_number":35,"context_line":"        self.fake_local_lport \u003d test_app_base.fake_local_port1\r"},{"line_number":36,"context_line":"        self.fake_remote_lport \u003d test_app_base.fake_remote_port1\r"},{"line_number":37,"context_line":"        self.mock_execute \u003d linux_utils.execute\r"},{"line_number":38,"context_line":"\r"},{"line_number":39,"context_line":"        self.datapath.ofproto.OFPFC_ADD \u003d COMMAND_ADD\r"},{"line_number":40,"context_line":"        self.datapath.ofproto.OFPFC_MODIFY \u003d COMMAND_ADD\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_9392849e","line":37,"range":{"start_line":37,"start_character":8,"end_line":37,"end_character":47},"updated":"2016-11-04 14:54:13.000000000","message":"forget to mock the function here?","commit_id":"27d03a50ed6c3b4325bb2a76d358397e31d36c0e"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"bb8a77a78722dc274b1e161b0da49f185f1b9c3f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.security_group \u003d test_app_base.fake_security_group\r"},{"line_number":35,"context_line":"        self.fake_local_lport \u003d test_app_base.fake_local_port1\r"},{"line_number":36,"context_line":"        self.fake_remote_lport \u003d test_app_base.fake_remote_port1\r"},{"line_number":37,"context_line":"        self.mock_execute \u003d linux_utils.execute\r"},{"line_number":38,"context_line":"\r"},{"line_number":39,"context_line":"        self.datapath.ofproto.OFPFC_ADD \u003d COMMAND_ADD\r"},{"line_number":40,"context_line":"        self.datapath.ofproto.OFPFC_MODIFY \u003d COMMAND_ADD\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_cfe7d3aa","line":37,"range":{"start_line":37,"start_character":8,"end_line":37,"end_character":47},"in_reply_to":"ba5da102_9392849e","updated":"2016-11-07 01:41:25.000000000","message":"yes, I forgot to upload the change in test_app_base.py","commit_id":"27d03a50ed6c3b4325bb2a76d358397e31d36c0e"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"fdea1284d13a0ce89fb5904a2396f4a097e6d504","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                                    zone):\r"},{"line_number":119,"context_line":"        cmd \u003d [\u0027conntrack\u0027, \u0027-D\u0027]\r"},{"line_number":120,"context_line":"        if protocol:\r"},{"line_number":121,"context_line":"            cmd.extend([\u0027-p\u0027, str(protocol)])\r"},{"line_number":122,"context_line":"        cmd.extend([\u0027-f\u0027, str(ethertype).lower()])\r"},{"line_number":123,"context_line":"        if nw_src:\r"},{"line_number":124,"context_line":"            cmd.extend([\u0027-s\u0027, str(nw_src)])\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_d5a3e04d","line":121,"range":{"start_line":121,"start_character":30,"end_line":121,"end_character":43},"updated":"2016-11-07 03:28:47.000000000","message":"no need to transform into string","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"e76ef3f2e3c38271928ac98fb5e334d77554dbf0","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                                    zone):\r"},{"line_number":119,"context_line":"        cmd \u003d [\u0027conntrack\u0027, \u0027-D\u0027]\r"},{"line_number":120,"context_line":"        if protocol:\r"},{"line_number":121,"context_line":"            cmd.extend([\u0027-p\u0027, str(protocol)])\r"},{"line_number":122,"context_line":"        cmd.extend([\u0027-f\u0027, str(ethertype).lower()])\r"},{"line_number":123,"context_line":"        if nw_src:\r"},{"line_number":124,"context_line":"            cmd.extend([\u0027-s\u0027, str(nw_src)])\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_a030ec9f","line":121,"range":{"start_line":121,"start_character":30,"end_line":121,"end_character":43},"in_reply_to":"ba5da102_d5a3e04d","updated":"2016-11-07 05:22:56.000000000","message":"OK, I will remove redundant transformation, but the attributes of protocol and zone could be a number than a str, so those two transformation will be remained.","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"fdea1284d13a0ce89fb5904a2396f4a097e6d504","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        if nw_dst:\r"},{"line_number":126,"context_line":"            cmd.extend([\u0027-d\u0027, str(nw_dst)])\r"},{"line_number":127,"context_line":"        if zone:\r"},{"line_number":128,"context_line":"            cmd.extend([\u0027-w\u0027, str(zone)])\r"},{"line_number":129,"context_line":"\r"},{"line_number":130,"context_line":"        return mock.call(cmd, run_as_root\u003dTrue, check_exit_code\u003dTrue,\r"},{"line_number":131,"context_line":"                         extra_ok_codes\u003d[1])\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_f588e4c8","line":128,"range":{"start_line":128,"start_character":30,"end_line":128,"end_character":39},"updated":"2016-11-07 03:28:47.000000000","message":"ditto","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"e76ef3f2e3c38271928ac98fb5e334d77554dbf0","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        if nw_dst:\r"},{"line_number":126,"context_line":"            cmd.extend([\u0027-d\u0027, str(nw_dst)])\r"},{"line_number":127,"context_line":"        if zone:\r"},{"line_number":128,"context_line":"            cmd.extend([\u0027-w\u0027, str(zone)])\r"},{"line_number":129,"context_line":"\r"},{"line_number":130,"context_line":"        return mock.call(cmd, run_as_root\u003dTrue, check_exit_code\u003dTrue,\r"},{"line_number":131,"context_line":"                         extra_ok_codes\u003d[1])\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_c025e05c","line":128,"range":{"start_line":128,"start_character":30,"end_line":128,"end_character":39},"in_reply_to":"ba5da102_f588e4c8","updated":"2016-11-07 05:22:56.000000000","message":"ditto","commit_id":"ce120eb9a8ab272ef0a45f83e013ee93aefa2323"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"96069d7987131cb21f0952c9f80a141c0af809d4","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        self.mock_execute.assert_has_calls([expected_conntrack_cmd1,"},{"line_number":196,"context_line":"                                            expected_conntrack_cmd2,"},{"line_number":197,"context_line":"                                            expected_conntrack_cmd3],"},{"line_number":198,"context_line":"                                           any_order\u003dTrue)"},{"line_number":199,"context_line":"        self.mock_execute.reset_mock()"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        # add remote port after adding a local port"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_949e9952","line":198,"updated":"2017-01-10 17:25:38.000000000","message":"Don\u0027t you also want to verify that other connection tracking data was not removed? (This applies to all tests here.)","commit_id":"4a01e0d0a231887c2ba15c86e640a498720996df"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"c1886c541cf7d323977e0ffc47180f4e673670eb","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        self.mock_execute.assert_has_calls([expected_conntrack_cmd1,"},{"line_number":196,"context_line":"                                            expected_conntrack_cmd2,"},{"line_number":197,"context_line":"                                            expected_conntrack_cmd3],"},{"line_number":198,"context_line":"                                           any_order\u003dTrue)"},{"line_number":199,"context_line":"        self.mock_execute.reset_mock()"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        # add remote port after adding a local port"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a3c09a3_2092e79e","line":198,"in_reply_to":"ba5201f7_949e9952","updated":"2017-01-16 13:50:59.000000000","message":"I want to, but I did not find a good way to verify that. Because there is no \u0027assert_not_called_with\u0027 method or some method like that. Additionally \u0027utils.execute\u0027 could be called by other apps, so I could not use \u0027assert_not_called\u0027.","commit_id":"4a01e0d0a231887c2ba15c86e640a498720996df"}]}
