)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6b8579bdd356f8c437e5fe3ad9623effbdc1c7dd","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Local cookie space can be reused by applications (e.g. l3 and security"},{"line_number":16,"context_line":"groups can use the same bits for different things)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I0e2dcc24ead244762cb5e9f3c18ad5f48652f914"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a461143_c7e28fd4","line":17,"updated":"2017-02-01 10:10:31.000000000","message":"bp/bug?","commit_id":"b53df9e77e980b5e26ff11b471079183559f98cb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4a7e3631a5be33dd25a149e307db2e63dc676c1d","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Local cookie space can be reused by applications (e.g. l3 and security"},{"line_number":16,"context_line":"groups can use the same bits for different things)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I0e2dcc24ead244762cb5e9f3c18ad5f48652f914"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a461143_12af5a7e","line":17,"in_reply_to":"3a461143_c7e28fd4","updated":"2017-02-01 20:56:34.000000000","message":"Done","commit_id":"b53df9e77e980b5e26ff11b471079183559f98cb"}],"dragonflow/controller/common/cookies.py":[{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"dd987c50681f99c955bf26b63ae3aabba96f1208","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# A class holding the cookie\u0027s offset and bit-mask"},{"line_number":44,"context_line":"CookieBitPair \u003d collections.namedtuple(\u0027CookieBitPair\u0027, [\u0027offset\u0027, \u0027mask\u0027])"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def register_cookie_bits(name, length, is_local\u003dFalse, app_name\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_0743b713","line":44,"range":{"start_line":44,"start_character":56,"end_line":44,"end_character":74},"updated":"2017-02-01 10:04:34.000000000","message":"Why not tuple?","commit_id":"b53df9e77e980b5e26ff11b471079183559f98cb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4a7e3631a5be33dd25a149e307db2e63dc676c1d","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# A class holding the cookie\u0027s offset and bit-mask"},{"line_number":44,"context_line":"CookieBitPair \u003d collections.namedtuple(\u0027CookieBitPair\u0027, [\u0027offset\u0027, \u0027mask\u0027])"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def register_cookie_bits(name, length, is_local\u003dFalse, app_name\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_a4e64842","line":44,"range":{"start_line":44,"start_character":56,"end_line":44,"end_character":74},"in_reply_to":"3a461143_0743b713","updated":"2017-02-01 20:56:34.000000000","message":"Done","commit_id":"b53df9e77e980b5e26ff11b471079183559f98cb"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"dd987c50681f99c955bf26b63ae3aabba96f1208","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    :param app_name: Owner application of the cookie (None for global)"},{"line_number":58,"context_line":"    :type app_name:  string"},{"line_number":59,"context_line":"    \"\"\""},{"line_number":60,"context_line":"    shift \u003d _cookie_max_bits_global"},{"line_number":61,"context_line":"    max_bits \u003d _cookie_max_bits_local"},{"line_number":62,"context_line":"    if not is_local:"},{"line_number":63,"context_line":"        app_name \u003d GLOBAL_APP_NAME"},{"line_number":64,"context_line":"        shift \u003d 0"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_075ad7f1","line":61,"range":{"start_line":60,"start_character":0,"end_line":61,"end_character":37},"updated":"2017-02-01 10:04:34.000000000","message":"Would look more natural inside else","commit_id":"b53df9e77e980b5e26ff11b471079183559f98cb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3b9d306671bcc777ea3db5df55772cedab6a8783","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    :param app_name: Owner application of the cookie (None for global)"},{"line_number":58,"context_line":"    :type app_name:  string"},{"line_number":59,"context_line":"    \"\"\""},{"line_number":60,"context_line":"    shift \u003d _cookie_max_bits_global"},{"line_number":61,"context_line":"    max_bits \u003d _cookie_max_bits_local"},{"line_number":62,"context_line":"    if not is_local:"},{"line_number":63,"context_line":"        app_name \u003d GLOBAL_APP_NAME"},{"line_number":64,"context_line":"        shift \u003d 0"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_453857d3","line":61,"range":{"start_line":60,"start_character":0,"end_line":61,"end_character":37},"in_reply_to":"3a461143_075ad7f1","updated":"2017-02-01 10:41:11.000000000","message":"I guess it\u0027s a styling thing, but I can change it.","commit_id":"b53df9e77e980b5e26ff11b471079183559f98cb"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"dd987c50681f99c955bf26b63ae3aabba96f1208","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    \"\"\""},{"line_number":105,"context_line":"    if not is_local:"},{"line_number":106,"context_line":"        app_name \u003d GLOBAL_APP_NAME"},{"line_number":107,"context_line":"    if not app_name:"},{"line_number":108,"context_line":"        raise TypeError(_LE(\"app_name must be provided if is_local is False\"))"},{"line_number":109,"context_line":"    pair \u003d _cookies[(app_name, name)]"},{"line_number":110,"context_line":"    result_unmasked \u003d (value \u003c\u003c pair.offset)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_67755b30","line":107,"range":{"start_line":107,"start_character":7,"end_line":107,"end_character":10},"updated":"2017-02-01 10:04:34.000000000","message":"is None","commit_id":"b53df9e77e980b5e26ff11b471079183559f98cb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3b9d306671bcc777ea3db5df55772cedab6a8783","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    \"\"\""},{"line_number":105,"context_line":"    if not is_local:"},{"line_number":106,"context_line":"        app_name \u003d GLOBAL_APP_NAME"},{"line_number":107,"context_line":"    if not app_name:"},{"line_number":108,"context_line":"        raise TypeError(_LE(\"app_name must be provided if is_local is False\"))"},{"line_number":109,"context_line":"    pair \u003d _cookies[(app_name, name)]"},{"line_number":110,"context_line":"    result_unmasked \u003d (value \u003c\u003c pair.offset)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_c52b6780","line":107,"range":{"start_line":107,"start_character":7,"end_line":107,"end_character":10},"in_reply_to":"3a461143_67755b30","updated":"2017-02-01 10:41:11.000000000","message":"I prefer it like this. This also matches the test in register_..., and I am fine with not allowing empty strings as well.","commit_id":"b53df9e77e980b5e26ff11b471079183559f98cb"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"dd987c50681f99c955bf26b63ae3aabba96f1208","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    pair \u003d _cookies[(app_name, name)]"},{"line_number":110,"context_line":"    result_unmasked \u003d (value \u003c\u003c pair.offset)"},{"line_number":111,"context_line":"    result \u003d (result_unmasked \u0026 pair.mask)"},{"line_number":112,"context_line":"    assert result \u003d\u003d result_unmasked, \"cookie overflow from cookie mask\""},{"line_number":113,"context_line":"    assert ((old_mask \u0026 pair.mask) \u003d\u003d 0), \"cookie mask overlap\""},{"line_number":114,"context_line":"    return result | (old_cookie \u0026 ~pair.mask), pair.mask | old_mask"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_679e3b64","line":113,"range":{"start_line":112,"start_character":0,"end_line":113,"end_character":63},"updated":"2017-02-01 10:04:34.000000000","message":"Do not use asserts outside test code, interpreters are allowed to omit them from the compiled bytecode (depending on configuration ofc)","commit_id":"b53df9e77e980b5e26ff11b471079183559f98cb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4a7e3631a5be33dd25a149e307db2e63dc676c1d","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    pair \u003d _cookies[(app_name, name)]"},{"line_number":110,"context_line":"    result_unmasked \u003d (value \u003c\u003c pair.offset)"},{"line_number":111,"context_line":"    result \u003d (result_unmasked \u0026 pair.mask)"},{"line_number":112,"context_line":"    assert result \u003d\u003d result_unmasked, \"cookie overflow from cookie mask\""},{"line_number":113,"context_line":"    assert ((old_mask \u0026 pair.mask) \u003d\u003d 0), \"cookie mask overlap\""},{"line_number":114,"context_line":"    return result | (old_cookie \u0026 ~pair.mask), pair.mask | old_mask"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_d2db1220","line":113,"range":{"start_line":112,"start_character":0,"end_line":113,"end_character":63},"in_reply_to":"3a461143_679e3b64","updated":"2017-02-01 20:56:34.000000000","message":"Done","commit_id":"b53df9e77e980b5e26ff11b471079183559f98cb"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"d2b8a996c2870f8ec879c6114f57689db63945ed","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def register_cookie_bits(name, length, is_local\u003dFalse, app_name\u003dNone):"},{"line_number":48,"context_line":"    \"\"\"Register this many cookie bits for the given \u0027task\u0027. Local cookie space"},{"line_number":49,"context_line":"    (as set by the is_local parameter) can be shared between applications"},{"line_number":50,"context_line":"    (specified in app_name)"},{"line_number":51,"context_line":"    :param name:     The name of the \u0027task\u0027"},{"line_number":52,"context_line":"    :type name:      string"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_3af51d83","line":49,"range":{"start_line":48,"start_character":60,"end_line":49,"end_character":52},"updated":"2017-02-03 02:01:42.000000000","message":"why not global cookie? According to my understanding, global cookie can be shared globally, right?","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"cc759108fde6273b6524e4efd8b48398c0b2540b","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def register_cookie_bits(name, length, is_local\u003dFalse, app_name\u003dNone):"},{"line_number":48,"context_line":"    \"\"\"Register this many cookie bits for the given \u0027task\u0027. Local cookie space"},{"line_number":49,"context_line":"    (as set by the is_local parameter) can be shared between applications"},{"line_number":50,"context_line":"    (specified in app_name)"},{"line_number":51,"context_line":"    :param name:     The name of the \u0027task\u0027"},{"line_number":52,"context_line":"    :type name:      string"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_4de4f00c","line":49,"range":{"start_line":48,"start_character":60,"end_line":49,"end_character":52},"in_reply_to":"1a430d35_3af51d83","updated":"2017-02-03 06:42:44.000000000","message":"You are right. And this came out very unclear, so I\u0027ll rewrite.\n\nGlobal cookie values can be shared - all apps see the global cookie values\nLocal cookie space is shared - Apps may write to the same cookie bits, since their flows will only have their local cookie data.","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"bbc13adcd634a607512b3f6dd412946588c160f5","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def register_cookie_bits(name, length, is_local\u003dFalse, app_name\u003dNone):"},{"line_number":48,"context_line":"    \"\"\"Register this many cookie bits for the given \u0027task\u0027. Local cookie space"},{"line_number":49,"context_line":"    (as set by the is_local parameter) can be shared between applications"},{"line_number":50,"context_line":"    (specified in app_name)"},{"line_number":51,"context_line":"    :param name:     The name of the \u0027task\u0027"},{"line_number":52,"context_line":"    :type name:      string"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_c95ef944","line":49,"range":{"start_line":48,"start_character":60,"end_line":49,"end_character":52},"in_reply_to":"1a430d35_4de4f00c","updated":"2017-02-03 19:50:21.000000000","message":"Done","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"d2b8a996c2870f8ec879c6114f57689db63945ed","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    :type name:      string"},{"line_number":53,"context_line":"    :param length:   The length of the cookie to allocate"},{"line_number":54,"context_line":"    :type length:    int"},{"line_number":55,"context_line":"    :param is_local: Is the cookie space local (i.e. shared)?"},{"line_number":56,"context_line":"    :type is_local:  bool"},{"line_number":57,"context_line":"    :param app_name: Owner application of the cookie (None for global)"},{"line_number":58,"context_line":"    :type app_name:  string"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_9a2a91e6","line":55,"range":{"start_line":55,"start_character":20,"end_line":55,"end_character":61},"updated":"2017-02-03 02:01:42.000000000","message":"ditto","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"bbc13adcd634a607512b3f6dd412946588c160f5","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    :type name:      string"},{"line_number":53,"context_line":"    :param length:   The length of the cookie to allocate"},{"line_number":54,"context_line":"    :type length:    int"},{"line_number":55,"context_line":"    :param is_local: Is the cookie space local (i.e. shared)?"},{"line_number":56,"context_line":"    :type is_local:  bool"},{"line_number":57,"context_line":"    :param app_name: Owner application of the cookie (None for global)"},{"line_number":58,"context_line":"    :type app_name:  string"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_e95bb552","line":55,"range":{"start_line":55,"start_character":20,"end_line":55,"end_character":61},"in_reply_to":"1a430d35_9a2a91e6","updated":"2017-02-03 19:50:21.000000000","message":"Done","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"d2b8a996c2870f8ec879c6114f57689db63945ed","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        LOG.info(_LI(\"Cookie for %(app_name)s/%(name)s already registered.\"),"},{"line_number":69,"context_line":"                 {\"app_name\": app_name, \"name\": name})"},{"line_number":70,"context_line":"        return"},{"line_number":71,"context_line":"    if not app_name:"},{"line_number":72,"context_line":"        raise TypeError(_LE(\"app_name must be provided if is_local is False\"))"},{"line_number":73,"context_line":"    start \u003d _cookies_used_bits[app_name]"},{"line_number":74,"context_line":"    if start + length \u003e max_bits:"},{"line_number":75,"context_line":"        LOG.error(_LE(\"Out of cookie space: \""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_1a6dc132","line":72,"range":{"start_line":71,"start_character":4,"end_line":72,"end_character":78},"updated":"2017-02-03 02:01:42.000000000","message":"I think this two lines should be moved after Line 66.","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e51bf457e08d1b5f471a67fd5ff325466eabc316","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                 {\"app_name\": app_name, \"name\": name})"},{"line_number":70,"context_line":"        return"},{"line_number":71,"context_line":"    if not app_name:"},{"line_number":72,"context_line":"        raise TypeError(_LE(\"app_name must be provided if is_local is False\"))"},{"line_number":73,"context_line":"    start \u003d _cookies_used_bits[app_name]"},{"line_number":74,"context_line":"    if start + length \u003e max_bits:"},{"line_number":75,"context_line":"        LOG.error(_LE(\"Out of cookie space: \""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_9f628315","line":72,"range":{"start_line":72,"start_character":28,"end_line":72,"end_character":78},"updated":"2017-02-03 01:53:47.000000000","message":"Will this message be valid? If is_local is False, app_name will be set to GLOBAL_APP_NAME anyway at line 61","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"cc759108fde6273b6524e4efd8b48398c0b2540b","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        LOG.info(_LI(\"Cookie for %(app_name)s/%(name)s already registered.\"),"},{"line_number":69,"context_line":"                 {\"app_name\": app_name, \"name\": name})"},{"line_number":70,"context_line":"        return"},{"line_number":71,"context_line":"    if not app_name:"},{"line_number":72,"context_line":"        raise TypeError(_LE(\"app_name must be provided if is_local is False\"))"},{"line_number":73,"context_line":"    start \u003d _cookies_used_bits[app_name]"},{"line_number":74,"context_line":"    if start + length \u003e max_bits:"},{"line_number":75,"context_line":"        LOG.error(_LE(\"Out of cookie space: \""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_4dcb1073","line":72,"range":{"start_line":71,"start_character":4,"end_line":72,"end_character":78},"in_reply_to":"1a430d35_1a6dc132","updated":"2017-02-03 06:42:44.000000000","message":"Will do.\n@xiaohhui, the mesage should read \u0027if is_local is True\u0027. Will fix.","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"bbc13adcd634a607512b3f6dd412946588c160f5","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        LOG.info(_LI(\"Cookie for %(app_name)s/%(name)s already registered.\"),"},{"line_number":69,"context_line":"                 {\"app_name\": app_name, \"name\": name})"},{"line_number":70,"context_line":"        return"},{"line_number":71,"context_line":"    if not app_name:"},{"line_number":72,"context_line":"        raise TypeError(_LE(\"app_name must be provided if is_local is False\"))"},{"line_number":73,"context_line":"    start \u003d _cookies_used_bits[app_name]"},{"line_number":74,"context_line":"    if start + length \u003e max_bits:"},{"line_number":75,"context_line":"        LOG.error(_LE(\"Out of cookie space: \""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_29569d29","line":72,"range":{"start_line":71,"start_character":4,"end_line":72,"end_character":78},"in_reply_to":"1a430d35_4dcb1073","updated":"2017-02-03 19:50:21.000000000","message":"Done","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"3b167effd17c26e96b48127a0da5cd68f9b01b16","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    :type old_cookie:  int"},{"line_number":99,"context_line":"    :param old_mask:   The mask (i.e. encoded relevant bits) in old_cookie"},{"line_number":100,"context_line":"    :type old_mask:  int"},{"line_number":101,"context_line":"    :param is_local:   Is the cookie space local (i.e. shared)?"},{"line_number":102,"context_line":"    :type is_local:    bool"},{"line_number":103,"context_line":"    :param app_name:   Owner application of the cookie (None for global)"},{"line_number":104,"context_line":"    :type app_name:    string"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_faec7591","line":101,"range":{"start_line":101,"start_character":23,"end_line":101,"end_character":63},"updated":"2017-02-03 02:05:00.000000000","message":"ditto","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"bbc13adcd634a607512b3f6dd412946588c160f5","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    :type old_cookie:  int"},{"line_number":99,"context_line":"    :param old_mask:   The mask (i.e. encoded relevant bits) in old_cookie"},{"line_number":100,"context_line":"    :type old_mask:  int"},{"line_number":101,"context_line":"    :param is_local:   Is the cookie space local (i.e. shared)?"},{"line_number":102,"context_line":"    :type is_local:    bool"},{"line_number":103,"context_line":"    :param app_name:   Owner application of the cookie (None for global)"},{"line_number":104,"context_line":"    :type app_name:    string"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_691d0573","line":101,"range":{"start_line":101,"start_character":23,"end_line":101,"end_character":63},"in_reply_to":"1a430d35_faec7591","updated":"2017-02-03 19:50:21.000000000","message":"Done","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e51bf457e08d1b5f471a67fd5ff325466eabc316","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    if not is_local:"},{"line_number":107,"context_line":"        app_name \u003d GLOBAL_APP_NAME"},{"line_number":108,"context_line":"    if not app_name:"},{"line_number":109,"context_line":"        raise TypeError(_LE(\"app_name must be provided if is_local is False\"))"},{"line_number":110,"context_line":"    pair \u003d _cookies[(app_name, name)]"},{"line_number":111,"context_line":"    mask_overlap \u003d old_mask \u0026 pair.mask"},{"line_number":112,"context_line":"    if mask_overlap !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_1f25b3c1","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":76},"updated":"2017-02-03 01:53:47.000000000","message":"Same comment here.","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"d2b8a996c2870f8ec879c6114f57689db63945ed","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    :param app_name:   Owner application of the cookie (None for global)"},{"line_number":104,"context_line":"    :type app_name:    string"},{"line_number":105,"context_line":"    \"\"\""},{"line_number":106,"context_line":"    if not is_local:"},{"line_number":107,"context_line":"        app_name \u003d GLOBAL_APP_NAME"},{"line_number":108,"context_line":"    if not app_name:"},{"line_number":109,"context_line":"        raise TypeError(_LE(\"app_name must be provided if is_local is False\"))"},{"line_number":110,"context_line":"    pair \u003d _cookies[(app_name, name)]"},{"line_number":111,"context_line":"    mask_overlap \u003d old_mask \u0026 pair.mask"},{"line_number":112,"context_line":"    if mask_overlap !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_9ac61115","line":109,"range":{"start_line":106,"start_character":4,"end_line":109,"end_character":78},"updated":"2017-02-03 02:01:42.000000000","message":"if not is_local:\n        app_name \u003d GLOBAL_APP_NAME\nelse:\n    if not app_name:\n        raise TypeError(_LE(\"app_name must be provided if is_local is False\"))","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"bbc13adcd634a607512b3f6dd412946588c160f5","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    :param app_name:   Owner application of the cookie (None for global)"},{"line_number":104,"context_line":"    :type app_name:    string"},{"line_number":105,"context_line":"    \"\"\""},{"line_number":106,"context_line":"    if not is_local:"},{"line_number":107,"context_line":"        app_name \u003d GLOBAL_APP_NAME"},{"line_number":108,"context_line":"    if not app_name:"},{"line_number":109,"context_line":"        raise TypeError(_LE(\"app_name must be provided if is_local is False\"))"},{"line_number":110,"context_line":"    pair \u003d _cookies[(app_name, name)]"},{"line_number":111,"context_line":"    mask_overlap \u003d old_mask \u0026 pair.mask"},{"line_number":112,"context_line":"    if mask_overlap !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_c90c3945","line":109,"range":{"start_line":106,"start_character":4,"end_line":109,"end_character":78},"in_reply_to":"1a430d35_9ac61115","updated":"2017-02-03 19:50:21.000000000","message":"Done","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"}],"dragonflow/controller/l3_proactive_app.py":[{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"dd987c50681f99c955bf26b63ae3aabba96f1208","unresolved":false,"context_lines":[{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        inst \u003d [action_inst, goto_inst]"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        cookie, cookie_mask \u003d cookies.get_cookie(COOKIE_NAME,"},{"line_number":438,"context_line":"            dst_router_tunnel_key,"},{"line_number":439,"context_line":"            is_local\u003dTrue,"},{"line_number":440,"context_line":"            app_name\u003dL3ProactiveApp.__name__)"},{"line_number":441,"context_line":"        self.mod_flow("},{"line_number":442,"context_line":"            cookie\u003dcookie,"},{"line_number":443,"context_line":"            cookie_mask\u003dcookie_mask,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_272993e6","line":440,"range":{"start_line":437,"start_character":1,"end_line":440,"end_character":45},"updated":"2017-02-01 10:04:34.000000000","message":"I think a method is appropriate here (even one in the base class that passes self.__class__.__name__ and is_local_true)","commit_id":"b53df9e77e980b5e26ff11b471079183559f98cb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4a7e3631a5be33dd25a149e307db2e63dc676c1d","unresolved":false,"context_lines":[{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        inst \u003d [action_inst, goto_inst]"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        cookie, cookie_mask \u003d cookies.get_cookie(COOKIE_NAME,"},{"line_number":438,"context_line":"            dst_router_tunnel_key,"},{"line_number":439,"context_line":"            is_local\u003dTrue,"},{"line_number":440,"context_line":"            app_name\u003dL3ProactiveApp.__name__)"},{"line_number":441,"context_line":"        self.mod_flow("},{"line_number":442,"context_line":"            cookie\u003dcookie,"},{"line_number":443,"context_line":"            cookie_mask\u003dcookie_mask,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_92c34a38","line":440,"range":{"start_line":437,"start_character":1,"end_line":440,"end_character":45},"in_reply_to":"3a461143_272993e6","updated":"2017-02-01 20:56:34.000000000","message":"Done","commit_id":"b53df9e77e980b5e26ff11b471079183559f98cb"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e51bf457e08d1b5f471a67fd5ff325466eabc316","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"ROUTE_TO_ADD \u003d \u0027route_to_add\u0027"},{"line_number":28,"context_line":"ROUTE_ADDED \u003d \u0027route_added\u0027"},{"line_number":29,"context_line":"COOKIE_NAME \u003d \u0027l3_proactive_tunnel\u0027"},{"line_number":30,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_7aaa4572","line":29,"range":{"start_line":29,"start_character":15,"end_line":29,"end_character":34},"updated":"2017-02-03 01:53:47.000000000","message":"maybe this could be changed to something more meaningful? for instance, port identification","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"bbc13adcd634a607512b3f6dd412946588c160f5","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"ROUTE_TO_ADD \u003d \u0027route_to_add\u0027"},{"line_number":28,"context_line":"ROUTE_ADDED \u003d \u0027route_added\u0027"},{"line_number":29,"context_line":"COOKIE_NAME \u003d \u0027l3_proactive_tunnel\u0027"},{"line_number":30,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_8409382f","line":29,"range":{"start_line":29,"start_character":15,"end_line":29,"end_character":34},"in_reply_to":"1a430d35_7aaa4572","updated":"2017-02-03 19:50:21.000000000","message":"Done","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"}],"dragonflow/tests/unit/test_cookies.py":[{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"3b167effd17c26e96b48127a0da5cd68f9b01b16","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from dragonflow.controller.common import cookies"},{"line_number":18,"context_line":"from dragonflow.tests import base as tests_base"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class TestCookies(tests_base.BaseTestCase):"},{"line_number":22,"context_line":"    @mock.patch.object(cookies, \u0027_cookies_used_bits\u0027,"},{"line_number":23,"context_line":"                       collections.defaultdict(int))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_5ae589a6","line":20,"updated":"2017-02-03 02:05:00.000000000","message":"Please also add the boundary check for cookie module, for example, is_local, app_name, etc.","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"cc759108fde6273b6524e4efd8b48398c0b2540b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from dragonflow.controller.common import cookies"},{"line_number":18,"context_line":"from dragonflow.tests import base as tests_base"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class TestCookies(tests_base.BaseTestCase):"},{"line_number":22,"context_line":"    @mock.patch.object(cookies, \u0027_cookies_used_bits\u0027,"},{"line_number":23,"context_line":"                       collections.defaultdict(int))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_ed811cfd","line":20,"in_reply_to":"1a430d35_5ae589a6","updated":"2017-02-03 06:42:44.000000000","message":"Not sure I understand which checks are missing?","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"d4a0fbb332c676d3166d912dc5b360a142a5bbde","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from dragonflow.controller.common import cookies"},{"line_number":18,"context_line":"from dragonflow.tests import base as tests_base"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class TestCookies(tests_base.BaseTestCase):"},{"line_number":22,"context_line":"    @mock.patch.object(cookies, \u0027_cookies_used_bits\u0027,"},{"line_number":23,"context_line":"                       collections.defaultdict(int))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_c881ae4f","line":20,"in_reply_to":"1a430d35_ed811cfd","updated":"2017-02-03 08:59:26.000000000","message":"Just ignore it. I misunderstood the code below.","commit_id":"c38678db89cf1565a08c652c7b5c8a55d9372d18"}]}
