)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"016a8dc174ceaaf9b42a9e7c97b11e12cc50d896","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Create a mechanism to automatically update the cookie value of flows."},{"line_number":10,"context_line":"Specifically for global cookie bits (local cookie bits are the"},{"line_number":11,"context_line":"application\u0027s responsibility)"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I8483eae33c6c019413241c58fbf435d02d893750"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a461143_e7c86baa","line":12,"updated":"2017-02-01 10:00:02.000000000","message":"please consider adding bug to trace this effort","commit_id":"9fe0c32b2d9a2ee6d3770ca32f3c1e8c2c467203"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"92897dbed381498f22c54bf7513484e9f1a219fb","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Create a mechanism to automatically update the cookie value of flows."},{"line_number":10,"context_line":"Specifically for global cookie bits (local cookie bits are the"},{"line_number":11,"context_line":"application\u0027s responsibility)"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I8483eae33c6c019413241c58fbf435d02d893750"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a461143_25234b57","line":12,"in_reply_to":"3a461143_e7c86baa","updated":"2017-02-01 10:48:35.000000000","message":"Will add to the other patches in this set as well","commit_id":"9fe0c32b2d9a2ee6d3770ca32f3c1e8c2c467203"}],"dragonflow/controller/aging.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"38268d200195648979f33bb790adfe26e0603c10","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        ofswitch.OpenFlowSwitchMixin.__init__(self, args[0])"},{"line_number":33,"context_line":"        self.aging_mask \u003d const.GLOBAL_AGING_COOKIE_MASK"},{"line_number":34,"context_line":"        self.do_aging \u003d True"},{"line_number":35,"context_line":"        cookies.add_global_cookie_modifier(\u0027aging\u0027, 1,"},{"line_number":36,"context_line":"                                           lambda x: cookie.get_aging_cookie())"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa31d9ce_6052a468","line":35,"range":{"start_line":35,"start_character":43,"end_line":35,"end_character":54},"updated":"2017-02-16 01:16:36.000000000","message":"Can it use the constant from dragonflow/controller/common/utils ?","commit_id":"8619617fdf9072b73f218cabb173913133cefc74"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"509ccc188da4c260d578ca5ae9646229ba569b8f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        ofswitch.OpenFlowSwitchMixin.__init__(self, args[0])"},{"line_number":33,"context_line":"        self.aging_mask \u003d const.GLOBAL_AGING_COOKIE_MASK"},{"line_number":34,"context_line":"        self.do_aging \u003d True"},{"line_number":35,"context_line":"        cookies.add_global_cookie_modifier(\u0027aging\u0027, 1,"},{"line_number":36,"context_line":"                                           lambda x: cookie.get_aging_cookie())"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa31d9ce_4d9ead64","line":35,"range":{"start_line":35,"start_character":43,"end_line":35,"end_character":54},"in_reply_to":"fa31d9ce_6052a468","updated":"2017-02-16 08:57:12.000000000","message":"Yes, but I\u0027ll make the constants local to this module. I want to try to keep the utils module as clean as possible.","commit_id":"8619617fdf9072b73f218cabb173913133cefc74"}],"dragonflow/controller/common/cookies.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"016a8dc174ceaaf9b42a9e7c97b11e12cc50d896","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    \"\"\"Allocate `length` global cookie bits, and add a modifier function"},{"line_number":121,"context_line":"    that sets these cookie bits for all applications. The modifier"},{"line_number":122,"context_line":"    accepts an opaque value (passed to global_modify_cookie below),"},{"line_number":123,"context_line":"    and should return the cookie value it wants set."},{"line_number":124,"context_line":"    :param name:    The name of the global cookie bits"},{"line_number":125,"context_line":"    :type name:     string"},{"line_number":126,"context_line":"    :param length:  The number of global cookie bits to allocate"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_e7a94b91","line":123,"range":{"start_line":123,"start_character":47,"end_line":123,"end_character":51},"updated":"2017-02-01 10:00:02.000000000","message":"to","commit_id":"9fe0c32b2d9a2ee6d3770ca32f3c1e8c2c467203"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"f05947c5ca716c533ec96c18249bf7a15e541cad","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    \"\"\"Allocate `length` global cookie bits, and add a modifier function"},{"line_number":121,"context_line":"    that sets these cookie bits for all applications. The modifier"},{"line_number":122,"context_line":"    accepts an opaque value (passed to global_modify_cookie below),"},{"line_number":123,"context_line":"    and should return the cookie value it wants set."},{"line_number":124,"context_line":"    :param name:    The name of the global cookie bits"},{"line_number":125,"context_line":"    :type name:     string"},{"line_number":126,"context_line":"    :param length:  The number of global cookie bits to allocate"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_05ad6f9a","line":123,"range":{"start_line":123,"start_character":47,"end_line":123,"end_character":51},"in_reply_to":"3a461143_45adb7e7","updated":"2017-02-01 10:57:42.000000000","message":"it wants to set","commit_id":"9fe0c32b2d9a2ee6d3770ca32f3c1e8c2c467203"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"92897dbed381498f22c54bf7513484e9f1a219fb","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    \"\"\"Allocate `length` global cookie bits, and add a modifier function"},{"line_number":121,"context_line":"    that sets these cookie bits for all applications. The modifier"},{"line_number":122,"context_line":"    accepts an opaque value (passed to global_modify_cookie below),"},{"line_number":123,"context_line":"    and should return the cookie value it wants set."},{"line_number":124,"context_line":"    :param name:    The name of the global cookie bits"},{"line_number":125,"context_line":"    :type name:     string"},{"line_number":126,"context_line":"    :param length:  The number of global cookie bits to allocate"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_45adb7e7","line":123,"range":{"start_line":123,"start_character":47,"end_line":123,"end_character":51},"in_reply_to":"3a461143_e7a94b91","updated":"2017-02-01 10:48:35.000000000","message":"Not sure I understand?","commit_id":"9fe0c32b2d9a2ee6d3770ca32f3c1e8c2c467203"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"016a8dc174ceaaf9b42a9e7c97b11e12cc50d896","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    :param name:    The name of the global cookie bits"},{"line_number":125,"context_line":"    :type name:     string"},{"line_number":126,"context_line":"    :param length:  The number of global cookie bits to allocate"},{"line_number":127,"context_line":"    :type length:   int"},{"line_number":128,"context_line":"    :name modifier: A function returning the cookie value"},{"line_number":129,"context_line":"    :type modifier: function, accepting opaque, returning int"},{"line_number":130,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_8799677b","line":127,"range":{"start_line":127,"start_character":20,"end_line":127,"end_character":23},"updated":"2017-02-01 10:00:02.000000000","message":"any upper constraint?","commit_id":"9fe0c32b2d9a2ee6d3770ca32f3c1e8c2c467203"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ae87d28f4b75ccb0aead8d76d971256a57c9b714","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    :param name:    The name of the global cookie bits"},{"line_number":125,"context_line":"    :type name:     string"},{"line_number":126,"context_line":"    :param length:  The number of global cookie bits to allocate"},{"line_number":127,"context_line":"    :type length:   int"},{"line_number":128,"context_line":"    :name modifier: A function returning the cookie value"},{"line_number":129,"context_line":"    :type modifier: function, accepting opaque, returning int"},{"line_number":130,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_e53943f3","line":127,"range":{"start_line":127,"start_character":20,"end_line":127,"end_character":23},"in_reply_to":"3a461143_4593f75a","updated":"2017-02-01 11:06:14.000000000","message":"Will mention. Validated in register_cookie_bits.","commit_id":"9fe0c32b2d9a2ee6d3770ca32f3c1e8c2c467203"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"92897dbed381498f22c54bf7513484e9f1a219fb","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    :param name:    The name of the global cookie bits"},{"line_number":125,"context_line":"    :type name:     string"},{"line_number":126,"context_line":"    :param length:  The number of global cookie bits to allocate"},{"line_number":127,"context_line":"    :type length:   int"},{"line_number":128,"context_line":"    :name modifier: A function returning the cookie value"},{"line_number":129,"context_line":"    :type modifier: function, accepting opaque, returning int"},{"line_number":130,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_c587e75e","line":127,"range":{"start_line":127,"start_character":20,"end_line":127,"end_character":23},"in_reply_to":"3a461143_8799677b","updated":"2017-02-01 10:48:35.000000000","message":"Available cookie bits (there are 64 total, and currently 32 for global cookies.)","commit_id":"9fe0c32b2d9a2ee6d3770ca32f3c1e8c2c467203"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"f05947c5ca716c533ec96c18249bf7a15e541cad","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    :param name:    The name of the global cookie bits"},{"line_number":125,"context_line":"    :type name:     string"},{"line_number":126,"context_line":"    :param length:  The number of global cookie bits to allocate"},{"line_number":127,"context_line":"    :type length:   int"},{"line_number":128,"context_line":"    :name modifier: A function returning the cookie value"},{"line_number":129,"context_line":"    :type modifier: function, accepting opaque, returning int"},{"line_number":130,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_4593f75a","line":127,"range":{"start_line":127,"start_character":20,"end_line":127,"end_character":23},"in_reply_to":"3a461143_c587e75e","updated":"2017-02-01 10:57:42.000000000","message":"Maybe worth to mention and validate","commit_id":"9fe0c32b2d9a2ee6d3770ca32f3c1e8c2c467203"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"8f9a6b09a0c1209dbe78a85c77616905cc7bc74b","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    \"\"\""},{"line_number":144,"context_line":"    for name, modifier in _cookie_modifiers.items():"},{"line_number":145,"context_line":"        value \u003d modifier(opaque)"},{"line_number":146,"context_line":"        cookie, mask \u003d get_cookie(name, value, cookie, mask)"},{"line_number":147,"context_line":"    return cookie, mask"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_6780fb8b","line":145,"range":{"start_line":145,"start_character":25,"end_line":145,"end_character":31},"updated":"2017-02-01 10:09:53.000000000","message":"I don\u0027t think it is needed at the moment, and gets in the way in aging (can drop the lambda and send the function directly without it)..","commit_id":"9fe0c32b2d9a2ee6d3770ca32f3c1e8c2c467203"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"92897dbed381498f22c54bf7513484e9f1a219fb","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    \"\"\""},{"line_number":144,"context_line":"    for name, modifier in _cookie_modifiers.items():"},{"line_number":145,"context_line":"        value \u003d modifier(opaque)"},{"line_number":146,"context_line":"        cookie, mask \u003d get_cookie(name, value, cookie, mask)"},{"line_number":147,"context_line":"    return cookie, mask"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_45f777d2","line":145,"range":{"start_line":145,"start_character":25,"end_line":145,"end_character":31},"in_reply_to":"3a461143_6780fb8b","updated":"2017-02-01 10:48:35.000000000","message":"True. But it will be needed soon (app tagging), and I want that patch to be as localised as possible. As an infrastructure, the design is passable.\n\nI think this is the lesser of all evils.","commit_id":"9fe0c32b2d9a2ee6d3770ca32f3c1e8c2c467203"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"016a8dc174ceaaf9b42a9e7c97b11e12cc50d896","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    for name, modifier in _cookie_modifiers.items():"},{"line_number":145,"context_line":"        value \u003d modifier(opaque)"},{"line_number":146,"context_line":"        cookie, mask \u003d get_cookie(name, value, cookie, mask)"},{"line_number":147,"context_line":"    return cookie, mask"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_a7b823c9","line":147,"range":{"start_line":147,"start_character":11,"end_line":147,"end_character":23},"updated":"2017-02-01 10:00:02.000000000","message":"wouldn\u0027t this return the last one only?","commit_id":"9fe0c32b2d9a2ee6d3770ca32f3c1e8c2c467203"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"8f9a6b09a0c1209dbe78a85c77616905cc7bc74b","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    for name, modifier in _cookie_modifiers.items():"},{"line_number":145,"context_line":"        value \u003d modifier(opaque)"},{"line_number":146,"context_line":"        cookie, mask \u003d get_cookie(name, value, cookie, mask)"},{"line_number":147,"context_line":"    return cookie, mask"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_c74fef8f","line":147,"range":{"start_line":147,"start_character":11,"end_line":147,"end_character":23},"in_reply_to":"3a461143_a7b823c9","updated":"2017-02-01 10:09:53.000000000","message":"It would return the final result, cookie is updated iteratively.","commit_id":"9fe0c32b2d9a2ee6d3770ca32f3c1e8c2c467203"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"add7fc855ecb11d1074d44fb4fb347f6d8e9a3d7","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    _cookie_modifiers[name] \u003d modifier"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"def global_modify_cookie(cookie, mask, opaque):"},{"line_number":148,"context_line":"    \"\"\"For each modifier registered with `add_global_cookie_modifier` above,"},{"line_number":149,"context_line":"    get the value, and encode it onto the cookie."},{"line_number":150,"context_line":"    :param cookie:  The current cookie value"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_300999de","line":147,"range":{"start_line":147,"start_character":4,"end_line":147,"end_character":24},"updated":"2017-02-02 11:54:09.000000000","message":"maybe apply_global_cookie_modifiers?","commit_id":"2de4ac7676e1a90af525060397537537bfcad11e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c0457adcf297e8d4d6b7386621103905820dd268","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    _cookie_modifiers[name] \u003d modifier"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"def global_modify_cookie(cookie, mask, opaque):"},{"line_number":148,"context_line":"    \"\"\"For each modifier registered with `add_global_cookie_modifier` above,"},{"line_number":149,"context_line":"    get the value, and encode it onto the cookie."},{"line_number":150,"context_line":"    :param cookie:  The current cookie value"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_907b2d29","line":147,"range":{"start_line":147,"start_character":4,"end_line":147,"end_character":24},"in_reply_to":"3a461143_300999de","updated":"2017-02-02 11:59:49.000000000","message":"Will change if I respin","commit_id":"2de4ac7676e1a90af525060397537537bfcad11e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"225328ba43323fea0b78cb92faf466adde52c9f3","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    _cookie_modifiers[name] \u003d modifier"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"def global_modify_cookie(cookie, mask, opaque):"},{"line_number":148,"context_line":"    \"\"\"For each modifier registered with `add_global_cookie_modifier` above,"},{"line_number":149,"context_line":"    get the value, and encode it onto the cookie."},{"line_number":150,"context_line":"    :param cookie:  The current cookie value"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_d8f160cf","line":147,"range":{"start_line":147,"start_character":4,"end_line":147,"end_character":24},"in_reply_to":"3a461143_907b2d29","updated":"2017-02-03 19:50:53.000000000","message":"Done","commit_id":"2de4ac7676e1a90af525060397537537bfcad11e"}],"dragonflow/tests/unit/test_cookies.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"897113722b634a8e2c94ccb7461433b621585952","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        cookies.add_global_cookie_modifier(\u0027t2\u0027, 3, lambda x: 3)"},{"line_number":104,"context_line":"        cookie, mask \u003d cookies.apply_global_cookie_modifiers(2 \u003c\u003c 32, 3 \u003c\u003c 32,"},{"line_number":105,"context_line":"                                                             None)"},{"line_number":106,"context_line":"        self.assertEqual(cookie, 2 \u003c\u003c 32 | 3 \u003c\u003c 4 | 6)"},{"line_number":107,"context_line":"        self.assertEqual(mask, 0x3 \u003c\u003c 32 | 0x7 \u003c\u003c 4 | 0xf)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa31d9ce_ebb2294b","line":107,"range":{"start_line":106,"start_character":8,"end_line":107,"end_character":58},"updated":"2017-02-15 03:09:22.000000000","message":"It is normally assertEqual(expected, observed)","commit_id":"a13c89f6453e42a79f9fd1924ebfa2c7bdf05aee"}]}
